karta create for a new folder. Use karta setup when the folder already
contains an agent and you want to name it, set the deploy gate, or choose the
delivery method.
The smallest possible agent project
CLAUDE.md
A fuller Claude Code agent project
The files under
.claude/ are standard Claude Code. Karta reads those
definitions rather than asking you to restate them in a Karta-specific format.
Permissions and bounded authority
.claude/settings.json is where you bound what the agent can do. Its
permissions.allow list is the agent’s authority: list the tools and commands
the app actually needs (for example "Bash(python validate.py:*)") and keep it
tight. Anything not on the list pauses the turn for approval instead of running.
In a deployed session, an off-allowlist tool call surfaces as a tool-permission
prompt the end user answers over the API (approve_once, approve_session, or
deny) - it does not silently fail. How a deployment treats those prompts is set
by runtime.permission_mode: the default prompts for
approval; autonomous auto-approves for the session.
Two habits keep the allowlist honest:
- Prefer a deterministic entrypoint over an improvised pipeline. When a task is a fixed sequence (build, lint, package, verify), ship a checked-in script the agent runs as one allowlisted command rather than a pipeline of many commands that each need approval.
- Treat the allowlist as a guardrail, not a sandbox. The matcher works on command prefixes; a compound command is checked per segment, and a construct like a heredoc can carry a body past prefix matching. Your isolation boundary is the per-instance sandbox, not the allowlist.
karta dev, an interactive terminal lets you
answer each prompt. A non-interactive run (piped input or no TTY) has no one
to answer, so an off-allowlist tool is denied and the turn stalls. Allow the tools
the app needs in .claude/settings.json up front, run karta dev interactively,
or set runtime.permission_mode for unattended runs.
The OpenCode equivalent
DeepAgents, Goose, and Codex CLI equivalents
DeepAgents
Goose
Codex CLI
.claude/ or CLAUDE.md means Claude Code, .opencode/
means OpenCode, .deepagents/ means DeepAgents, .goose/ means Goose, and
.codex/config.toml means Codex CLI. karta create --harness deepagents,
karta create --harness goose, and karta create --harness codex-cli write
the AGENTS.md and marker files for you.
Multiple agents in one repo
One repo can hold several agents - each a folder with its own harness-native instruction file and its ownkarta.toml:
karta.toml carries its own name, deploy gate, and
deploy_method. Deploy them independently from their folders; selecting one
never builds its siblings. See karta.toml and the deploy
loop.
karta setup scans for folders with karta.toml, CLAUDE.md, .claude/,
.opencode/, .deepagents/, .goose/, or .codex/ markers. If a repo
contains several agent folders, pass the folder explicitly:
Exercise the Karta surface locally
Author and test the agent in the harness workflow you already use. When you want to see how it behaves through Karta’s session API,karta dev runs the
project locally with a chat REPL and hot reload:
Sub-agent files
The frontmatter format for harness sub-agents.
karta.toml
Build hints for publishing a release.

