Skip to content

Commit 9bd0418

Browse files
AlemTuzlakclaude
andauthored
docs: refactor AGENTS.md and CLAUDE.md with progressive disclosure (CopilotKit#3259)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 0f47b01 commit 9bd0418

6 files changed

Lines changed: 170 additions & 12 deletions

File tree

.claude/docs/architecture.md

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# Architecture & Packages
2+
3+
## Three-Layer Architecture
4+
5+
```
6+
Frontend (React/Angular/Vanilla) → Runtime (Express/Hono server) → Agent (LangGraph/CrewAI/BuiltIn/Custom)
7+
```
8+
9+
All layers communicate via the **AG-UI protocol** — an event-based standard streamed over SSE.
10+
11+
## V1 vs V2
12+
13+
V2 (`@copilotkitnext/`) is the real implementation. V1 (`@copilotkit/`) is the public API that wraps V2 internally. New features always go in V2. If V1 compatibility is needed, create a thin re-export or wrapper in the corresponding V1 package.
14+
15+
## V2 Packages
16+
17+
- **shared**: Common utilities, types, and constants used across all other packages.
18+
- **core**: The `CopilotKitCore` orchestrator — the central brain on the frontend. Manages the agent registry, tool registry, context store, and event subscriptions. All framework packages (React, Angular, Vanilla) wrap this.
19+
- **react**: React hooks (`useAgent`, `useFrontendTool`, `useAgentContext`, etc.) and `CopilotKitProvider`. Hooks are thin wrappers that register/unregister with `CopilotKitCore` on mount/unmount.
20+
- **angular**: Angular DI tokens, services, and signal-based state. Same concepts as React but using Angular patterns (`inject()`, signals, `AgentStore`).
21+
- **runtime**: The server-side `CopilotRuntime` class that receives HTTP requests and delegates to agents. Provides Express and Hono adapters. Contains the `AgentRunner` abstraction for managing thread/conversation state.
22+
- **agent**: The `BuiltInAgent` — a default agent implementation powered by the Vercel AI SDK. Used when developers don't bring their own agent framework.
23+
- **voice**: Voice input and transcription support.
24+
- **web-inspector**: A debug console (Lit web component) for inspecting agent communication in development.
25+
- **sqlite-runner**: An `AgentRunner` implementation that persists thread state to SQLite instead of memory.
26+
27+
## V1 Packages
28+
29+
- **react-core**: The public `<CopilotKit>` provider and hooks. Internally delegates to V2 core.
30+
- **react-ui**: Chat UI components — `CopilotChat`, `CopilotPopup`, `CopilotSidebar`, `CopilotPanel`.
31+
- **react-textarea**: The `CopilotTextarea` component for AI-assisted text editing.
32+
- **shared**: Shared types and telemetry utilities.
33+
- **runtime**: Server-side runtime with GraphQL server and LLM adapters.
34+
- **runtime-client-gql**: urql-based GraphQL client for frontend-to-runtime communication.
35+
- **sdk-js**: Helpers for LangGraph/LangChain agent integration.
36+
37+
## Request Lifecycle
38+
39+
1. **Init**: Frontend creates `CopilotKitCore` → fetches agent info from runtime → creates a `ProxiedAgent` instance per remote agent.
40+
2. **User sends message**: Message is added to the agent, then `runAgent()` is called.
41+
3. **HTTP request**: A POST is sent to the runtime with a `RunAgentInput` payload containing messages, registered tools, context, threadId, and state.
42+
4. **Runtime processing**: Request middleware runs → agent is resolved and cloned → `AgentRunner` executes the agent.
43+
5. **SSE stream back**: Agent emits AG-UI events streamed to the frontend: run lifecycle events, text message chunks (streaming), and optional tool call events.
44+
6. **Frontend tool execution**: When the agent calls a frontend tool, Core looks up the handler in its registry, executes it locally in the browser, and sends the result back to the agent which continues processing.
45+
7. **UI update**: Core updates its message store and notifies subscribers → React/Angular re-renders.
46+
47+
## Core Concepts
48+
49+
### AG-UI Protocol
50+
51+
All agent↔UI communication is event-based. Events follow a structured lifecycle: `RUN_STARTED``STEP_STARTED` → message/tool events → `STEP_FINISHED``RUN_FINISHED`. Events are streamed over SSE and validated with Zod schemas. The `EventType` enum in `@ag-ui/core` defines all event types.
52+
53+
### ProxiedAgent
54+
55+
The frontend representation of a remote agent. Implements the `AbstractAgent` interface but translates calls into HTTP requests to the runtime, streaming SSE events back. Created automatically when the runtime reports available agents.
56+
57+
### AgentRunner
58+
59+
An abstract class on the runtime side responsible for managing thread state (conversation history, agent state). The default `InMemoryAgentRunner` is ephemeral; `SQLiteAgentRunner` provides persistence. Custom runners can be built for any storage backend.
60+
61+
### Tool Registration
62+
63+
Tools can be **frontend tools** (handler runs in the browser, registered via `useFrontendTool`) or **backend tools** (handler runs on the server, defined in the agent config). Tools can be scoped to a specific agent via `agentId`, or available to all agents by omitting it.
64+
65+
### Context
66+
67+
Application data sent alongside messages to give agents awareness of the current UI state. Registered via `useAgentContext(description, data)` where data is any JSON-serializable value. Automatically included in every agent run.
68+
69+
### Multi-Agent
70+
71+
Multiple agents can be registered in a single `CopilotRuntime`. Each agent gets its own endpoint, message thread, state, and optionally scoped tools. The frontend selects which agent to interact with via `useAgent({ agentId })`.
72+
73+
### Middleware
74+
75+
`CopilotRuntime` supports `beforeRequestMiddleware` and `afterRequestMiddleware` for cross-cutting concerns like authentication, logging, and request/response transformation.

.claude/docs/git.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Git & PRs
2+
3+
## Worktree Workflow
4+
5+
Always use a git worktree for non-trivial work. This keeps the main working tree clean and lets you work in isolation.
6+
7+
1. **Start a worktree** at the beginning of a task. This creates a new branch and a separate working directory.
8+
2. **Do all work** inside the worktree — commits, builds, tests.
9+
3. **Push the worktree branch** to the remote with `-u` to set up tracking.
10+
4. **Create a PR** targeting `main` using `gh pr create --base main`.
11+
5. **Clean up** the worktree after the PR is merged.
12+
13+
## Creating a PR
14+
15+
When the work is ready:
16+
17+
1. Stage and commit your changes in the worktree.
18+
2. Push the branch: `git push -u origin <branch-name>`
19+
3. Create the PR: `gh pr create --base main`
20+
4. Use a clear title (under 70 chars) and a body summarizing what changed and why.
21+
22+
## Commit Conventions
23+
24+
- Write concise commit messages focused on the "why", not the "what".
25+
- Stage specific files — avoid `git add -A` or `git add .` to prevent accidentally including unrelated changes.
26+
- Never amend commits unless explicitly asked. Always create new commits.
27+
- Never force-push unless explicitly asked.

.claude/docs/hooks.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Hook Development
2+
3+
When creating a new hook, always complete **all** of the following:
4+
5+
1. **Implementation**: Create the hook in the V2 react package. If V1 compatibility is needed, add a re-export in the V1 react-core package.
6+
2. **JSDoc**: Add JSDoc on top of the hook implementation, including usage examples.
7+
3. **Tests**: Write extensive tests covering behavior, edge cases, and lifecycle (mount/unmount/re-render).
8+
4. **Documentation**: Add a dedicated docs page under `/docs` and update the relevant docs metadata file(s) so the page appears in navigation.

.claude/docs/workflow.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Workflow & Process
2+
3+
## When to Plan vs. Fix Autonomously
4+
5+
- **Bug fixes** (small/medium, < 5 files): Fix autonomously. No plan mode, no check-in. Just fix it, run tests, done.
6+
- **Large bugs** (5+ files or architectural impact): Enter plan mode first.
7+
- **New features and refactors**: Always enter plan mode. Get user sign-off on the approach before implementing.
8+
9+
## Planning
10+
11+
- Enter plan mode for non-trivial features and refactors.
12+
- Write the plan to `tasks/todo.md` with checkable items.
13+
- If something goes sideways during implementation, stop and re-plan — don't push through a broken approach.
14+
15+
## Verification
16+
17+
- Never mark a task complete without proving it works.
18+
- Run tests and check for regressions.
19+
- Diff behavior between main and your changes when relevant.
20+
21+
## Bug Fixing
22+
23+
- When given a bug report: find the root cause, fix it, verify. No hand-holding needed.
24+
- Point at logs, errors, failing tests — then resolve them.
25+
- Go fix failing CI tests without being told how.
26+
27+
## Self-Improvement
28+
29+
- After any correction from the user: update `tasks/lessons.md` with the pattern and a rule to prevent it.
30+
- Review lessons at session start.

AGENTS.md

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,20 @@
1313

1414
<!-- nx configuration end-->
1515

16-
# Hook Development Requirements
16+
# CopilotKit
1717

18-
When creating a new hook, always complete all of the following:
18+
AI agent framework with three layers: **Frontend** (React/Angular/Vanilla) → **Runtime** (Express/Hono) → **Agent** (LangGraph/CrewAI/BuiltIn/Custom), communicating via the AG-UI protocol (event-based SSE).
1919

20-
- Add dedicated documentation for the hook under `/docs`.
21-
- Update the relevant docs metadata file(s) so the page appears in docs navigation.
22-
- Add JSDoc on top of the hook implementation, including usage examples.
23-
- Write extensive tests for the hook (covering behavior, edge cases, and lifecycle where applicable).
20+
## Essentials
21+
22+
- **Nx monorepo** — always run tasks through `nx` (`nx run`, `nx run-many`, `nx affected`), never the underlying tooling directly.
23+
- **V1 wraps V2** — V2 (`@copilotkitnext/`) is the real implementation. V1 (`@copilotkit/`) is the public compatibility layer that delegates to V2. Build new features in V2 first. Add V1 wrappers only if backward compatibility is needed.
24+
- **Simplicity** — prefer the simplest correct solution. For non-trivial changes, consider if there's a cleaner approach before committing.
25+
- **Worktrees** — always work in a git worktree for isolation. See [Git & PRs](.claude/docs/git.md) for the full workflow.
26+
27+
## Reference (read when relevant to your task)
28+
29+
- [Architecture & Packages](.claude/docs/architecture.md) — V2/V1 package roles, request lifecycle, core concepts (AG-UI, ProxiedAgent, AgentRunner, tools, context, multi-agent)
30+
- [Hook Development](.claude/docs/hooks.md) — checklist for creating new hooks (docs, tests, JSDoc)
31+
- [Workflow & Process](.claude/docs/workflow.md) — when to plan, when to fix autonomously, verification, self-improvement loop, this should be your default mindset when working on any task
32+
- [Git & PRs](.claude/docs/git.md) — worktree workflow, branching, creating PRs

CLAUDE.md

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,20 @@
1313

1414
<!-- nx configuration end-->
1515

16-
# Hook Development Requirements
16+
# CopilotKit
1717

18-
When creating a new hook, always complete all of the following:
18+
AI agent framework with three layers: **Frontend** (React/Angular/Vanilla) → **Runtime** (Express/Hono) → **Agent** (LangGraph/CrewAI/BuiltIn/Custom), communicating via the AG-UI protocol (event-based SSE).
1919

20-
- Add dedicated documentation for the hook under `/docs`.
21-
- Update the relevant docs metadata file(s) so the page appears in docs navigation.
22-
- Add JSDoc on top of the hook implementation, including usage examples.
23-
- Write extensive tests for the hook (covering behavior, edge cases, and lifecycle where applicable).
20+
## Essentials
21+
22+
- **Nx monorepo** — always run tasks through `nx` (`nx run`, `nx run-many`, `nx affected`), never the underlying tooling directly.
23+
- **V1 wraps V2** — V2 (`@copilotkitnext/`) is the real implementation. V1 (`@copilotkit/`) is the public compatibility layer that delegates to V2. Build new features in V2 first. Add V1 wrappers only if backward compatibility is needed.
24+
- **Simplicity** — prefer the simplest correct solution. For non-trivial changes, consider if there's a cleaner approach before committing.
25+
- **Worktrees** — always work in a git worktree for isolation. See [Git & PRs](.claude/docs/git.md) for the full workflow.
26+
27+
## Reference (read when relevant to your task)
28+
29+
- [Architecture & Packages](.claude/docs/architecture.md) — V2/V1 package roles, request lifecycle, core concepts (AG-UI, ProxiedAgent, AgentRunner, tools, context, multi-agent)
30+
- [Hook Development](.claude/docs/hooks.md) — checklist for creating new hooks (docs, tests, JSDoc)
31+
- [Workflow & Process](.claude/docs/workflow.md) — when to plan, when to fix autonomously, verification, self-improvement loop, this should be your default mindset when working on any task
32+
- [Git & PRs](.claude/docs/git.md) — worktree workflow, branching, creating PRs

0 commit comments

Comments
 (0)