Project structure

Project structure

A Curb project is a folder of React components. The folder names are the routes.

my-agent/
  package.json        "dev": "curb dev", depends on "curb"
  tsconfig.json       jsx: react-jsx (required)
  context/            optional markdown, referenced via <Text src="…" />
  src/agent/
    agent.tsx         exports `agent` (defineAgent): the agent level, where every conversation
                      starts: prompts, config, skills index, tools every skill has
    <name>/skill.tsx  one folder per skill, opened when needed; nested folders are sub-skills

The voice session (speech, turn-taking, interruptions, the production worker) is the framework’s, the same on every route; a project holds no copy of it.

Routes come from folder names: src/agent/claim-procedure/skill.tsx is /claim-procedure. Discovery is automatic: never register skills manually. Every skill has a folder of its own: a skill.tsx next to agent.tsx is not a skill, and curb check says where its content goes (AGENT_HOME_SKILL_REMOVED).

Agent authoring is imported from the "curb" package:

import { Agent, Skills, Skill, Tool, Instruction, defineAgent, z } from "curb";

Voice settings are <Agent> props and defineAgent options; see Voice sessions.

Files Curb writes

These stay out of git. The project’s .gitignore already lists them.

PathWhat it holds
.envYour keys and settings. See Configuration
.data/Recorded conversations, by default .data/conversations.jsonl
.curb/Generated files, and link.json, the hosted agent this project deploys to
.mcp-auth/Tokens of MCP servers you signed in to

mcp.servers.json holds the MCP servers you added in the preview. It never holds tokens.

Next steps