P3 (kickoff): generic tools/ library + end-to-end tool-using-agent test

Stand up executus/tools — the generic, host-agnostic tool library — and prove
the full pattern end to end:

- tools/tools.go: Register(reg) adds the always-available zero-dependency tools
  (currently `think`). A light host calls it and is immediately useful; backed
  tools (web/store/meta groups) will register via grouped registrars with
  nil-safe Deps as they land.
- tools/think.go: the `think` tool moved from mort (imports only executus/tool).
- tools/integration_test.go: end-to-end proof that the executor runs an agent
  which CALLS a registered tool — the fake model emits a `think` tool call, the
  executor dispatches it through the registry, the model finalises, and the step
  instrumentation captures the `think` step. Exercises the full tool-dispatch
  loop through run.Executor.

Stacked on phase-2-run-kernel (P3 needs run.Executor). Remaining P3: the
meta/web/net/store/compose groups + their Deps + default backends (splitting
mort's default.go grab-bag).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-26 20:54:28 -04:00
parent 16ddd90914
commit df95425bb5
4 changed files with 180 additions and 1 deletions
+5 -1
View File
@@ -58,7 +58,11 @@ CORE (majordomo + stdlib):
structured output — no separate structured/ pkg)
llmmeta/ shared meta-LLM helper over model/ [P1 ✓]
compact/ context compactor (WithCompactor hook) [P2 ✓]
tools/{web,net,store,compose,meta,comms} generic tools [P3]
tools/ generic tool library + Register entrypoint; [P3 wip]
think moved; end-to-end "agent calls a tool"
test green. Remaining: meta/web/net/store/
compose groups + their nil-safe Deps + default
backends (the default.go grab-bag split) [P3]
BATTERIES (opt-in siblings, each nil-safe + a default):
persona/ Agent noun + AgentStore seam + yml loader [P4]