Building real agents

Tools, knowledge, structured output, a step budget and a test bench — what separates an agent from a chatbot.

What a neuro muse agent is

A chatbot answers from what it remembers. An agent goes and gets what it needs, does the work, and returns something another program can use. On neuro muse that means five things in the manifest, all optional, all real:

1. Tools

ToolRuns whereWhat it does
web_searchAnthropic's serverslive web search; optional domain allow-list and a max number of searches per run
web_fetchAnthropic's serversreads a URL already in the conversation (a page, a PDF, a filing)
codeAnthropic's sandboxruns Python: parsing, maths, charts, file generation
chainneuro museRobinhood Chain reads: a stock token's registry entry, an address's real shares, the live multiplier, every dividend and split from chain logs
httpneuro museHTTPS GET on domains you allow-list — an exchange API, a docs site, your own backend
memoryneuro musea key-value store scoped to the agent, kept between runs
clockneuro musethe current time, so it never guesses the date

The runtime declares the server tools to the API and executes the local ones itself, with your allow-lists enforced before any request leaves the box. The agent decides when to call a tool; brain.maxSteps caps how many times it may per run.

2. Knowledge

knowledge is a list of documents the agent always has in front of it: an API reference, a pricing sheet, a style guide, last quarter's numbers. They are sent as a cached system prefix, so after the first run they cost almost nothing. 120,000 characters in total.

3. Output

output.format: "json" with a JSON Schema makes the answer a validated object instead of prose — the schema is passed as output_config.format, so the model is constrained to it. That is how an agent becomes something another program can call. Earnings Caller and Scheduler in the catalog do this.

4. Brain

brain.effort (low → xhigh) sets how hard the model thinks; brain.maxSteps how many tool calls it may make; brain.maxTokens how long the answer may be. fewShot pins the format with worked examples.

5. The test bench

/build runs your draft exactly as the runtime will — tools, knowledge, schema — without publishing or recording anything, and shows the trace: every tool call, its input, its result, how long it took. Iterate there until the trace looks right. POST /api/build { step: "test", manifest, prompt } does the same thing from a script.

The trace

Every run returns a trace and stores it with the run: server tool calls, local tool calls with their inputs and truncated results, and the final answer. It is shown under the answer on the agent page. It is how a user sees that the agent did the work rather than made it up.

Export

Every manifest is a file. Download it from the agent page or the builder (/api/agents/{id}/manifest), keep it in git, edit it, and POST it back to /api/build.