View Markdown

Projects and agents

Every message comes from an agent and is about a project, and Kabu shows them that way: one thread per agent in each project, so “claude-code in payments-api” never mixes with “nightly-build in web”.

  • A project is a repository, a service or an environment: payments-api, web, staging.
  • An agent is who is asking: claude-code, copilot-cli, release-bot, nightly-build.

Naming them

Pass project and agent on a message or a session, by name. A name Kabu has not seen creates the project or agent, and names that differ only in case, spaces, - and _ are one: My App, my-app and my_app are the same project. Without a project, a message goes to the project called default. Each also has an id (prj_…, agt_…) that works wherever a name does.

You rarely type them. kabu names the project after the repository your coding agent started in, wherever its commands run, and the agent after the coding agent that runs it (Claude Code, Copilot CLI, Codex, Cursor and others); see Which project. Over MCP, kabu mcp fills in the same project, and the client’s own name is the agent’s.

Keys bound to a project or an agent

A key can be bound to a project, an agent or both. A bound key always sends as its agent, whatever a request says, and as its project: a request that leaves the project out gets it, and one that names another project is refused with 403. That is how a shared CI system’s key can only ever speak for its own job. See Keys and scopes.

Limits

Creating by name stops at 1,000 projects and 1,000 agent names per org, with 429 quota_exceeded: reuse a name, or tidy up in the console. An agent that sends 20 near-identical messages within a minute is paused for 10 minutes, and you are told once, so a loop cannot flood your phone. While it is paused, its messages are refused with 429 rate_limited and a Retry-After saying when the pause lifts.