Produce a small, coherent Rust toolkit that can support a coding-agent-style application without forcing provider, UI, or storage choices.
Deliverables:
- confirm the product statement
- confirm crate split
- confirm v1 non-goals
- confirm the initial content/event model
- confirm the driver-style loop API, blocking interrupt model, and pause/resume semantics
- confirm the lower-level capability abstraction shared by tools and MCP
Docs to write:
docs/v1-boundary.mddocs/architecture.mddocs/provider-adapter.md
Exit criteria:
- we can describe what belongs in
agentkitin one paragraph - we can explain why stateful and stateless providers fit the same abstraction
- we can explain the normalized content model without referring to any one provider's wire types
Deliverables:
- workspace skeleton
agentkit-coreagentkit-capabilitiesagentkit-loop- event types
- session and model adapter traits
- driver API with
next()yielding only blocking interrupts and turn completion - loop integration tests with a fake model
Docs to write:
docs/architecture.mddocs/loop.mddocs/events.md
Exit criteria:
- a fake provider can stream output, request a tool, receive the result, and finish a turn
- a host can answer an approval request and resume the same loop instance
- usage and errors are represented in the event stream
- non-blocking reporting does not require the host to manually drive every event
Deliverables:
agentkit-tools-core- filesystem tool
- a minimal custom-tool extension path with low boilerplate
- permission model
- approval hook interface
Docs to write:
docs/tools.mddocs/shell-tool.mddocs/filesystem-tool.mddocs/permissions.md
Exit criteria:
- a host can register custom tools with minimal boilerplate
- filesystem tools can be locked down by policy
Deliverables:
agentkit-contextAGENTS.mdloading with custom search paths- skills loading with custom directories
agentkit-mcpwith auth hooks, server lifecycle management, tools, resources, and prompts- MCP-owned adapters that expose MCP resources/prompts through the capability layer for context use
Docs to write:
docs/context.mddocs/agents-md.mddocs/skills.mddocs/mcp.md
Exit criteria:
- a host can add project instructions and skills without hardcoding path logic
- MCP tools can be surfaced through the same registry as native tools
- MCP resources and prompts can be exposed through stable
agentkitabstractions
Deliverables:
agentkit-compactionagentkit-reporting- usage aggregation
- transcript checkpointing hooks
- JSON/logging reporters
Docs to write:
docs/compaction.mddocs/reporting.mddocs/usage.md
Exit criteria:
- the loop can trigger compaction without owning the compaction policy
- a host can observe usage, tool activity, and failures from structured outputs
Deliverables:
agentkitumbrella crate with feature-gated re-exports- ergonomic builder APIs
- one end-to-end example app using a fake provider
Docs to write:
docs/getting-started.mddocs/examples/minimal-agent.mddocs/feature-flags.md
Exit criteria:
- a new user can understand the library from the example without reading every internal crate first
If the goal is to move from design to code quickly, the first useful milestone is narrower than the full v1:
agentkit-coreagentkit-capabilitiesagentkit-loopagentkit-tools-core- one fake tool
- one fake provider adapter
That is enough to validate the central claim: one loop abstraction can support tool-calling agents without knowing a real provider implementation.
Once code starts landing, docs/ should stay small and navigable:
docs/README.mddocs/v1-boundary.mddocs/architecture.mddocs/getting-started.mddocs/loop.mddocs/tools.mddocs/permissions.mddocs/context.mddocs/mcp.mddocs/compaction.mddocs/reporting.mddocs/examples/
Avoid adding one-off design notes unless they capture a real decision. If a document does not explain an API or a boundary, it will decay quickly in an empty repo.
If the model adapter API becomes too abstract, simple stateless providers become awkward.
Mitigation:
- design around a session abstraction
- prove it with one fake stateless adapter and one fake stateful adapter before locking APIs
- keep provider-native types behind the adapter boundary and validate the normalized projection layer separately
If prompts, approvals, or storage assumptions leak into core crates, the toolkit becomes hard to reuse.
Mitigation:
- treat these concerns as injected interfaces
- require each crate README or module doc to state what policy it does not own
If each built-in tool invents its own permission model, hosts cannot reason about risk coherently.
Mitigation:
- define shared permission concepts early
- make shell and filesystem tools adopt them first
If compaction tries to become memory, retrieval, and summarization all at once, it will slow the whole project down.
Mitigation:
- keep compaction to loop hooks and transcript replacement artifacts in v1
The next concrete step should be to turn the boundary doc into code-facing docs, then create the workspace skeleton around that plan.
The highest-value immediate docs are:
docs/architecture.mddocs/provider-adapter.mddocs/tools.mddocs/permissions.md
Those four documents will force the important API shapes into the open before implementation starts.