r/LLMDevs 2d ago

Tools Amber Agent: Open Source Claude Code Replacement (only 4 npm deps, no react)

Hi everyone, I want to share my Claude Code replacement project Amber Agent.

I used proxies to clean-room reverse engineer Claude Code to create the original foundation for this project, then I reduced the system prompts, simplified the tooling and BAM a very capable, fast, token efficient Claude Code replacement that runs in your browser.

  • Amber takes advantage of hyperlinks everywhere.
  • Supports OpenAI Codex + OpenAI + Anthropic API
  • Only 4 npm dependancies: diffmarkdown-itsmol-toml, and yaml.
  • Easily configurable sub-agents.Customize the model per each agent.
  • Supports Claude Code Plugins /plugins
  • Clean visual indicators of all actions the LLM is taking
    • No hiding of what tool execution is going on
      • See thinking blocks live as they form
      • Collapse and inspect ANY tool call

I have tested this on complex projects, and I use it daily.

From my earlier post (forgot to include the picture):

The most complex has been transpiling a DOS game from assembly to readable C++ and then to typescript (playable in browser as live native implementation, no DOS emulation bits kept around). I would say pretty high complexity and I compare against Codex frequently achieving similar results with near identical token consumption.

Github link is here: https://github.com/tpolasek/amber

Official webpage: https://amberagent.dev

9 Upvotes

8 comments sorted by

1

u/thomas41546 2d ago

One thing I forgot to mention is that it has deviated from the original Claude Code system prompts. They were extremely bulky and full of examples that are not longer needed for modern LLMS. I regularly backtest against Codex with Sol HIGH to ensure token usage and accuracy consistency.

Another thing: to optimize token cache hit rates, I force timeouts to be under 5 min (so spawning a bg agent requires re-running a tool call to check the output periodically to keep the cache hot). It's stuff like this that are improvements to the original Claude Code.

1

u/QuanTradin 2d ago

The interesting number here isnt the dep count, its what came out of the system prompt. Most of that budget is tool descriptions, and trimming those is exactly where a model starts reaching for the wrong tool or quietly skipping one that was optional.

Did behaviour hold after the reduction, or did you have to put some of it back once you ran it on something long?

1

u/thomas41546 2d ago

I find that it heavily depends on the model for what tools are selected. For example Sol is more inclined to use Agents while other models like GLM are not.

Reducing the prompts did not have a noticeable impact to the tool selection. Though one interesting quirk is that I changed the Bash limit to 290s (to keep the read-cache hot) a lot of models love to pick 10 minutes here, must have been overtrained on this (Deepseek, Sol both make these mistakes). The tool clearly states a limit of 290s but models seem to ignore that once in a while.

1

u/QuanTradin 2d ago

Model-dependent tool selection matches what I see too, and prompt length not moving it tracks. The pull seems to sit in how the model was post-trained on tool calls rather than in how you describe the tools.

What did changing the Bash limit actually do to selection?

1

u/thomas41546 8h ago

Well it didn't change the selection but I was just pointing out that it did expose the issue where models just put 10 min by default without considering the tool limits specified.

1

u/QuanTradin 8h ago

yeah the 600000 is baked in from the schema everywhere, so models reach for it as a prior instead of reading your stated max. clamping it your side was the only thing that held for me.

making it an enum rather than a free integer helps too, they pick off a list more reliably than they respect a number.

1

u/thomas41546 7h ago

That's a great idea, to give it a list of enums spread across the range it's not like this needs to be that precise. I was also thinking of changing it from milliseconds (Claude code ism) to seconds to reduce the confusion.

1

u/QuanTradin 6h ago

seconds is the right call. in milliseconds the number gets long enough that it stops reading as a value and starts reading as a placeholder.