SIGN IN SIGN UP

Make LangChain the default harness, with the tool loop governed (#33)

`agent-bot` hand-writes the AG-UI protocol and leaves the tool loop to
whatever is watching. That is a fine reference and a bad thing to build
a deployment on, so the default teammate endpoint is now
`agent-langgraph` on 4201: a real framework, running a real loop.

The loop moves into the agent, and stays governed. A framework Bot that
called an MCP server directly would be a Bot that walked around the
grant, the policy and the audit row, which are the product. So it calls
back to `/api/agent-tools/call`, authenticated by a shared secret
because the caller is a service with no person behind it, and that
route goes through the same plugin store as everything else. No secret
configured means the route does not exist and the Bot is told so, rather
than a deployment quietly accepting anybody who can reach the port.

The runtime now sends a remote agent the tools its Bot was granted, on
every run rather than configured once, so a grant added or revoked
applies to the next run and not after a restart.

Two defects fixed on the way. `BOT_MODEL` arrived from compose as an
empty string, which is a value, so the agent asked its provider for a
model named "" and every run died with "you must provide a model
parameter" — read as a broken Bot rather than missing configuration.
And the run emitted its answer before the tool calls that informed it,
so the surface drew a Bot that spoke first and worked afterwards; tool
events are now sent as they happen, with each stretch of prose owning
its own message id.

Driven in a browser: the LangGraph Bot answered a question about the
expense policy, the transcript drew the tool line and then the answer
with its source link, and the audit row names risk-analyst calling
through the deployment rather than the vendor.
D
David McKay committed
afde20f352704db09ca4b9beee64a862999ebf85
Parent: f29ba9c
Committed by GitHub <noreply@github.com> on 8/20/2026, 4:15:59 PM