mirror of
https://github.com/hanzoai/mcp.git
synced 2026-10-29 02:55:49 +00:00
An agent could already keep a todo list (`tasks`), but only on its own disk. Nothing here reached the board a human looks at, so "what is this agent doing" had no answer outside the agent. These four tools are the cloud /v1/tracker surface — the ONE work-item primitive — as MCP tools. They are deliberately NOT called tasks_*. Three planes are easy to braid and cloud apps/tracker/contract.go is law about it: a tracker Issue is a work item, hanzoai/tasks is durable async execution, and the local `tasks` tool is a private file at ~/.hanzo/todos.json. Naming these tasks_* would have collided with that third one and pointed callers at the plane nobody can see. Linking a run needed no new field. An agent's run is a SESSION — "mission" is not modeled anywhere in the fleet — and the tracker contract already defines extRef as "a link INTO another plane", so `session` writes the anchor `session:<id>` and hanzo.app renders that session's live status on the row. tracker_create defaults source to agent, because the board's ?source=agent filter is only true if agents say so. Cloud's own refusal reaches the caller verbatim — "unknown status filter" is worth more to an agent than a generic failure — and the org is never sent: it is minted server-side from the bearer, and a tool that sends one is a tool asking to be trusted about tenancy. NOTE: the jest suite cannot RUN on main right now — TypeScript 7.0.2 is installed and ts-jest 29.4.6 cannot read its compiler API, so all 18 suites fail to load. That break predates this commit and is orthogonal to it (verified on a clean origin/main checkout). These tools were verified twice: 20 jest tests green under the TS 5 toolchain, and 11 runtime checks through the shipped esbuild bundle under main's current dependency state. Co-authored-by: Hanzo Dev <[email protected]>