Agent
Use camber agent commands to manage Camber agents from your terminal.
This page covers common agent operations:
camber agent pullcamber agent updatecamber agent push
Agent pull
Use camber agent pull when you want to bring a mirrored Camber agent back to your local machine.
The command restores the agent’s Context Mirror into a local project folder and installs the agent and skills for a supported agentic coding tool.
camber agent pull @owner.aliasBy default, this uses the Claude Code integration and writes into the current directory.
You can choose the agentic coding tool integration:
camber agent pull @owner.alias --integrate claude-code
camber agent pull @owner.alias --integrate cursorYou can also choose the parent destination:
camber agent pull @owner.alias --dest /path/to/local/folderPull output
The command creates one project folder under the destination:
project_<owner>_<alias>/
├── .camber/
│ └── sync.yaml
├── .claude/ or .cursor/
├── README.md
├── chat/
├── knowledge-base/
├── project/
├── requirements/
├── schema/
└── instruction.mdFor example:
camber agent pull @camberuser.context-mirror-agentcreates:
project_camberuser_context-mirror-agent/The pulled mirror files are copied from:
stash://<owner>/.camber/agent-context/<agent-alias>/Camber restores all files and folders stored in that mirror root. The folders shown above are the standard Context Mirror layout, but extra folders added to the mirror are pulled too.
Pull integrations
With --integrate claude-code, Camber writes the local agent file to:
project_<owner>_<alias>/.claude/agents/<owner>.<agent-alias>.mdSkills are restored to:
project_<owner>_<alias>/.claude/skills/<skill-name>/With --integrate cursor, Camber writes the local Cursor rule to:
project_<owner>_<alias>/.cursor/rules/camber-agent-<owner>.<agent-alias>.mdcSkills are restored to:
project_<owner>_<alias>/.cursor/skills/<skill-name>/Cloud skill folders are not restored as a root skills/ folder. Camber remaps each skill into the selected agentic coding tool’s skill folder.
Each skill folder keeps its SKILL.md, scripts, references, assets, and nested files.
Pull replace behavior
camber agent pull replaces the generated project_<owner>_<alias>/ folder each time it runs.
Use this when you want the local copy to match the latest state held by the Camber agent.
project_<owner>_<alias>/ unless you have saved them elsewhere. Running camber agent pull again replaces that folder.Pull JSON output
Use --output json when scripting:
camber agent pull @owner.alias --integrate claude-code --output jsonExample response:
{
"agent": "@owner.alias",
"integration": "claude-code",
"dest": "/path/to/project_owner_alias",
"agent_file": "/path/to/project_owner_alias/.claude/agents/owner.alias.md",
"mirror": ["README.md", "chat", "project", "requirements"],
"skills": ["api-endpoint-auditor", "test-case-generator"]
}If the agent does not have a Context Mirror folder in Stash, the command still creates the local Claude Code agent or Cursor rule from the Camber agent metadata.
Agent update
Use camber agent update when you want to update an existing Camber agent by tag.
The command resolves the agent from @owner.alias, so you do not need to know the agent UUID.
camber agent update @owner.alias \
--name "New agent name" \
--description "New description" \
--instructions-file ./instruction.mdYou can update one field or several fields in the same command.
Supported fields:
--name--description--instructions--instructions-file--structured-output--output json
--instructions and --instructions-file are mutually exclusive.
The CLI does not update an agent alias. If the alias needs to change, create a new agent or use an admin-supported workflow. Context Mirror paths depend on the alias, so changing it casually can break existing mirror references.
Update instructions from a file
Use --instructions-file when your agent instructions are stored in Markdown:
camber agent update @owner.alias --instructions-file ./instruction.mdThis replaces the agent instructions with the file content.
Update instructions inline
For short edits, use --instructions:
camber agent update @owner.alias --instructions "Answer concisely and use the project context when needed."Structured output
Enable structured output:
camber agent update @owner.alias --structured-output=trueDisable structured output:
camber agent update @owner.alias --structured-output=falseUpdate JSON output
Use --output json when scripting:
camber agent update @owner.alias \
--instructions-file ./instruction.md \
--output jsonExample response:
{
"id": "agent-uuid",
"name": "New agent name",
"alias": "alias",
"owner_name": "owner",
"tag": "@owner.alias",
"description": "New description",
"status": "ACTIVE"
}Agent push
Use camber agent push after pulling a mirrored agent locally, editing the pulled files, and wanting those local changes to become the new Camber agent mirror state.
This command is intentionally similar to a force push: the enabled local mirror sections become the desired cloud state for that agent.
Run the command from the pulled mirror root, the folder that contains .camber/sync.yaml:
cd project_owner_alias
camber agent pushUse JSON output when scripting:
camber agent push --output jsonThere is no --dry-run, no confirmation prompt, and no agent override flag. The target agent comes from .camber/sync.yaml.
Push local layout
camber agent pull creates the expected local layout:
project_<owner>_<alias>/
├── .camber/
│ └── sync.yaml
├── .claude/ or .cursor/
├── README.md
├── chat/
├── knowledge-base/
├── project/
├── requirements/
├── schema/
└── instruction.mdRun camber agent push from project_<owner>_<alias>/, not from the original repository root unless that root contains .camber/sync.yaml.
sync.yaml
.camber/sync.yaml tells the CLI which agent to update and which local sections to sync.
Example:
agent: "agent-uuid"
owner: "owner"
alias: "alias"
exclude:
- ".git/**"
- ".env*"
- ".venv/**"
- "__pycache__/**"
- "**/__pycache__/**"
instruction:
enabled: true
path: instruction.md
readme:
enabled: true
path: README.md
project:
enabled: true
path: project
knowledge_base:
enabled: true
path: knowledge-base
exclude: []
chat:
enabled: true
path: chat
exclude: []
requirements:
enabled: true
path: requirements
schema:
enabled: true
path: schema
skills:
enabled: true
path: .claude/skills
managed: "*"
exclude: []By default, sections are enabled. Set enabled: false on a section when you do not want camber agent push to change that cloud section.
Push behavior
Enabled sections are uploaded to a staging area first, then Camber commits them to the agent mirror:
README.mdinstruction.mdproject/requirements/schema/knowledge-base/chat/- configured skills folder
instruction.md is special: after the mirror commit succeeds, Camber updates the agent instructions from this file. If instruction.md is missing, the mirror file is removed, but the agent instructions are not updated.
Files in these sections are indexed for agent retrieval:
knowledge-base/chat/- skill
references/folders
Unsupported files in indexed sections are skipped with a warning. They are not uploaded and are not indexed.
Project files under project/, plus README.md, instruction.md, requirements/, and schema/, are mirror files. They are not added to Knowledge Base by camber agent push.
Push skills
Skills are read from the configured skills.path.
With:
skills:
enabled: true
path: .claude/skills
managed: "*"all skill folders under .claude/skills are treated as the desired managed skill set for the Camber agent.
To manage only selected skills:
skills:
enabled: true
path: .claude/skills
managed:
- api-endpoint-auditor
- test-case-generatorManaged skills that are deleted locally are deleted from the Camber agent. Local skills that are not in the managed list are ignored.
Use skills.exclude to ignore selected skill folders:
skills:
exclude:
- old-skillPush excludes
Global excludes apply across sections. Section excludes apply only within that section.
Example:
project:
enabled: true
path: project
exclude:
- "experiments/**"
- "AGENTS.md"Excluded files and folders are not uploaded. They are also not deleted from the cloud mirror, because they are outside the managed push set.
Push failure behavior
The CLI validates local config before uploading:
.camber/sync.yamlmust exist- the agent UUID must match the remote agent
- paths must stay inside the mirror root
- symlinks are rejected
- managed skill folders must contain valid
SKILL.md
Files are uploaded to staging first. If upload fails, Camber does not commit the staged state.
If the backend commit fails, the staging folder is left in place for debugging and the command prints the staging path.
After a successful commit, staging is removed.
Push JSON output
camber agent push --output jsonExample response:
{
"agent": "@owner.alias",
"staging_prefix": "stash://owner/.camber/staging/alias/username/",
"final_prefix": "stash://owner/.camber/agent-context/alias/",
"warnings": [],
"sections": {
"project": {
"copied": 12,
"created": 0,
"updated": 0,
"deleted": 1,
"queued": 0,
"skipped": 0
}
}
}Typical Context Mirror flow
camber agent pull @owner.alias
cd project_owner_alias
# edit files, skills, chat, or instruction.md
camber agent push