CLI Reference
Complete reference for ID Agents interactive CLI commands
CLI Reference#
The ID Agents interactive CLI is the primary interface for managing agents. Start it with npm run id-agents and use the commands below to deploy, communicate with, and manage your agents.
Where this fits. The interactive CLI ships with the open-source
id-agentscore: the manager daemon plus its bundled interactive CLI and library that actually run the agent processes. The CLI is attached to the manager daemon in-process, so starting it starts the manager. The separate ID Agents Dashboard is a proprietary macOS GUI that layers a visual interface (agents, tasks, calendar, heartbeats, news, library, agent profiles) on top of the same manager daemon; the CLI runs the fleet on its own, with or without the Dashboard installed.
Starting the CLI#
npm run id-agents
The interactive CLI is a terminal interface to the manager daemon. The daemon listens on port 4100 by default and agents are assigned ports starting at 4101. The CLI itself does not bind a network port.
With a custom manager port:
npm run id-agents -- --port 5000
Or via environment variable:
MANAGER_PORT=5000 npm run id-agents
Commands#
/deploy#
Deploy agents from a YAML configuration file.
/deploy <config>
Examples:
/deploy configs/my-team.yaml
/deploy configs/production.yaml
This reads the config file, creates agent processes, assigns ports, and starts each agent's RESTAP server.
/deployonly creates. It will not touch a team that already exists, and there is no override flag. Deploying onto a live team name is refused with a 409 and this message:Team "<name>" already exists. /deploy only creates new teams. To change a live team use /agents spawn, /agents remove, or /model. To inspect drift, /diff <team> <config>.
The deployment model#
The database is the source of truth. Config files are import and export artifacts, not a desired state that gets continuously applied. Nothing reconciles a running team against a file.
That gives four separate jobs, each with its own command:
| You want to | Use | Effect |
|---|---|---|
| Create a team from a file | /deploy <config> | Creates. Refuses an existing team |
| Create a new team from a file | /import <file> [--team <name>] | Creates a new team; --team overrides the file's own team: key |
| Write a config from the database | /export <team> [path] | Reads the live team and writes a config file |
| See how a team and a file differ | /diff <team> <config> | Reports drift and changes nothing |
To change a live team, change the team, not the file. Use /model <agent-name> <model> to change an agent's model, and /delete <agent> to remove one. Then /export if you want the file to catch up.
/export, /import, /diff, and /model are manager commands. Run them through the Remote API or the admin-control skill.
/synchas been removed. It is deliberately still recognised so that typing it tells you where the capability went rather than failing as an unknown command. Its help text now readsREMOVED — use /diff for drift, /agents spawn|remove and /model for live changes. This is unrelated to/sync-wallets, which is a different command and is not removed.
/agents#
List all running agents with their names, ports, and status.
/agents
/agents rebuild#
Rebuild all agents. This restarts every agent process.
/agents rebuild
/agent rebuild#
Rebuild a single agent by name.
/agent <name> rebuild
Example:
/agent coder rebuild
/ask#
Send a message to an agent. The conversation session is maintained across multiple /ask calls.
/ask <agent> <message>
Examples:
/ask coder Write a hello world function in TypeScript
/ask researcher Find the latest papers on transformer architectures
/ask * (Broadcast)#
Send a message to all agents at once.
/ask * <message>
Example:
/ask * What is your current status?
/hey#
Alias for /ask. Works identically.
/hey <agent> <message>
/news#
Check recent messages and responses from an agent.
/news <agent>
Use the -l flag to see full message content:
/news -l <agent>
/clear#
Clear the conversation session with an agent (start fresh). If no agent is specified, clears all sessions.
/clear [agent]
Examples:
/clear coder
/clear
/delete#
Delete an agent and stop its process. Supports bulk deletion with confirmation.
/delete <agent>
/delete * # Delete all agents (with confirmation)
/delete --team <name> # Delete all agents in a team (with confirmation)
Examples:
/delete researcher
/delete *
/delete --team staging
/output#
List artifacts produced by an agent. Agents write output files to {workingDir}/output/ by convention.
/output <agent>
Example:
/output coder
/artifact#
Read a specific artifact file from an agent's output directory.
/artifact <agent> <path>
Example:
/artifact coder report.md
/status#
Show the status of the manager and all agents.
/status
/help#
Display the help screen with all available commands.
/help
/team#
Show, switch, or manage teams.
/team # Show current team
/team <name> # Switch to or create team
/teams # List all teams
/team delete <name> # Delete a team (team must be empty -- delete agents first)
Example:
/team personal
/teams
/wallet#
Show an agent's OWS wallet addresses. Optionally filter by chain.
/wallet <agent>
/wallet <agent> eip155:1
/update#
Update agent properties after deployment.
/update <agent> --wallet
/update <agent> --name
/heartbeat#
Manage heartbeats (interval-based recurring schedules).
Heartbeats use an agent-driven model: the YAML config sets the interval (a number in seconds), and the agent reads its own HEARTBEAT.md file for the checklist of tasks to perform on each tick. The framework delivers the heartbeat; the agent decides what to do with it.
Subcommands:
| Subcommand | Description |
|---|---|
| (none) | List all active heartbeats |
add <agent> <seconds> <message> | Add a heartbeat |
pause <id> | Pause a heartbeat |
resume <id> | Resume a paused heartbeat |
remove <id> | Remove a heartbeat permanently |
Flags:
| Flag | Default | Description |
|---|---|---|
--sender <name> | heartbeat | Override the sender name shown on heartbeat messages |
--delivery <mode> | internal | Delivery mode: talk (conversational) or internal (non-conversational) |
HEARTBEAT.md:
Agents can define a HEARTBEAT.md file in their working directory. This file contains the agent's own checklist -- what to inspect, verify, or report on each heartbeat tick. The framework delivers the heartbeat at the configured interval; the agent reads HEARTBEAT.md to decide what actions to take. The YAML heartbeat field is just the interval number (in seconds), not a {interval, message} object.
Examples:
# Add a heartbeat that runs every 10 minutes
/heartbeat add contracts 600 "Run security review" --delivery internal
# Add a heartbeat with a custom sender name
/heartbeat add ops 300 "Check monitoring dashboards" --sender ops-monitor
# List all heartbeats
/heartbeat
# Pause a heartbeat
/heartbeat pause hb_agent_123
# Resume a paused heartbeat
/heartbeat resume hb_agent_123
# Remove a heartbeat
/heartbeat remove hb_agent_123
/calendar#
Manage calendar events (wall-clock scheduled events).
Subcommands:
| Subcommand | Description |
|---|---|
| (none) | List all active calendar events |
add <agent> <time> <days|date> <message> | Add a calendar event |
pause <id> | Pause a calendar event |
resume <id> | Resume a paused calendar event |
remove <id> | Remove a calendar event permanently |
Flags:
| Flag | Default | Description |
|---|---|---|
--sender <name> | schedule | Override the sender name shown on calendar messages |
--delivery <mode> | talk | Delivery mode: talk (conversational) or internal (non-conversational) |
--timezone <tz> | System default | IANA timezone for the calendar event (e.g., America/New_York) |
Examples:
# Add a calendar event for X engagement Mon-Fri at 9am
/calendar add x 09:00 "mon,tue,wed,thu,fri" "Check X for tweets" --timezone America/New_York
# Add a calendar event with a custom sender
/calendar add lead 17:00 "fri" "Weekly summary" --timezone America/New_York --sender weekly-review
# Add a one-time calendar event on a specific date
/calendar add lead 08:00 "2026-04-01" "Generate monthly report" --timezone America/New_York
# List all calendar events
/calendar
# Pause a calendar event
/calendar pause cal_agent_456
# Resume a paused calendar event
/calendar resume cal_agent_456
# Remove a calendar event
/calendar remove cal_agent_456
Schedules can also be defined in the YAML config (see Configuration).
/task#
Manage tasks for coordinating work across agents.
Subcommands:
| Subcommand | Description |
|---|---|
list | List all tasks with their current status |
create <description> --name <id> | Create a new task |
claim <id> | Claim an unassigned task (moves to doing) |
done <id> | Mark a task as completed |
Task statuses:
| Status | Meaning |
|---|---|
todo | Unclaimed -- no agent assigned yet |
doing | In progress -- an agent has claimed it |
done | Completed |
Examples:
# Create a task
/task create "Fix the overflow bug" --name fix-overflow
# List all tasks
/task list
# Claim a task
/task claim fix-overflow
# Mark a task done
/task done fix-overflow
REST API: Agents can also use the Tasks REST endpoints directly (
POST /tasks,GET /tasks,POST /tasks/:name/claim,POST /tasks/:name/done,DELETE /tasks/:name) instead of going through/remote. See RESTAP Protocol -- Tasks API for details.
/quit#
Exit the interactive CLI.
/quit
Remote API#
The Manager exposes a /remote endpoint that lets any external tool -- including another Claude Code session -- interact with your agent team programmatically. This is how you manage agents from outside the interactive CLI.
From a terminal or script:
curl -X POST http://localhost:4100/remote \
-H "Content-Type: application/json" \
-d '{"command":"/agents"}'
From another Claude Code session: If you're working in Claude Code on a different project, you can dispatch tasks to your agent team without leaving your current session:
# Ask an agent to do something
curl -s -X POST http://localhost:4100/remote \
-H "Content-Type: application/json" \
-d '{"command":"/ask contracts Review the latest changes"}'
# Check for the reply
curl -s -X POST http://localhost:4100/remote \
-H "Content-Type: application/json" \
-d '{"command":"/news contracts"}'
This means any Claude Code instance on the same machine can coordinate with your agent team -- dispatching work, checking results, and managing the fleet.
Available remote commands:
| Command | Description |
|---|---|
/agent <name> rebuild | Rebuild a single agent |
/agents | List all agents |
/agents rebuild | Rebuild all agents |
/ask <name> <message> | Send message to agent |
/clear [agent] | Clear session |
/delete <name> | Delete agent |
/delete * | Delete all agents (with confirmation) |
/delete --team <name> | Delete all agents in a team |
/output <name> | List agent artifacts |
/artifact <name> <path> | Read a specific artifact |
/deploy | List available configs |
/deploy <config> | Create a team from a YAML config. Refuses an existing team |
/export <team> [path] | Write a config file from the database |
/import <file> [--team <name>] | Create a new team from a config file |
/diff <team> <config> | Report drift between a team and a config. Changes nothing |
/model <agent-name> <model> | Change a live agent's model |
/news [-l] <name> | Check recent messages |
/status | Show status |
/sync-wallets | Sync OWS wallet addresses to ENS records |
/wallet <name> [chain] | Show agent wallet addresses |
/update <name> [--wallet|--name] | Update agent properties |
/heartbeat | List heartbeats |
/heartbeat add <agent> <s> <msg> [--sender <name>] | Add heartbeat |
/heartbeat pause|resume|remove <id> | Manage heartbeat |
/calendar | List calendar events |
/calendar add <agent> <time> <days> <msg> [--sender <name>] | Add calendar event |
/calendar pause|resume|remove <id> | Manage calendar event |
/task list | List all tasks |
/task create <desc> --name <id> | Create a task |
/task claim <id> | Claim an unassigned task |
/task done <id> | Mark task completed |
No authentication is required. The /remote endpoint has no auth.
Admin Control Skill#
The admin-control skill lets any Claude Code session manage your agent team programmatically. Install it in a separate Claude Code project and it gives that session full control over your fleet -- dispatching work, polling for results, and sending messages to the manager.
The skill provides three communication patterns:
1. Remote commands -- Send CLI commands to the manager via /remote (as shown above). This is the simplest pattern for one-off operations like checking status or deploying configs.
2. Talk to manager -- Start a temporary HTTP listener, then send a message to the manager via /talk. The manager processes the message with its LLM and sends a reply back to the listener. Use this for conversational interactions where you want the manager to reason about your request.
# Start a listener on port 4050, send a message, wait for reply
./start-listener.js &
curl -s -X POST http://localhost:4100/talk \
-H "Content-Type: application/json" \
-d '{"message": "What agents are running and what are they working on?", "reply_to": "http://localhost:4050/news"}'
3. Polling for replies -- Dispatch work to agents via /ask (through /remote), then poll each agent's /news endpoint for responses with timestamp filtering. Use this for parallel fan-out work.
# Dispatch work to multiple agents
BEFORE=$(date +%s)000
curl -s -X POST http://localhost:4100/remote \
-H "Content-Type: application/json" \
-d '{"command":"/ask agent-1 Review the auth module"}'
curl -s -X POST http://localhost:4100/remote \
-H "Content-Type: application/json" \
-d '{"command":"/ask agent-2 Review the payments module"}'
# Poll for responses (timestamp filtering to only get new items)
curl -s "http://localhost:4102/news?since=$BEFORE"
Example workflow -- threshold-based completion:
Dispatch a review task to 7 agents and wait until at least 5 have responded:
# 1. Record the timestamp before dispatching
BEFORE=$(date +%s)000
# 2. Fan out work to all agents
for agent in agent-1 agent-2 agent-3 agent-4 agent-5 agent-6 agent-7; do
curl -s -X POST http://localhost:4100/remote \
-H "Content-Type: application/json" \
-d "{\"command\":\"/ask $agent Review the latest security changes\"}"
done
# 3. Poll until 5 of 7 agents have responded
DONE=0
while [ $DONE -lt 5 ]; do
DONE=0
for port in 4101 4102 4103 4104 4105 4106 4107; do
COUNT=$(curl -s "http://localhost:$port/news?since=$BEFORE" | jq '.items | length')
[ "$COUNT" -gt 0 ] && DONE=$((DONE + 1))
done
sleep 5
done
echo "Threshold reached: $DONE agents completed"
Scripts included with the skill:
| Script | Description |
|---|---|
remote-command.sh | Send a CLI command to the manager via /remote |
talk-to-manager.sh | Send a conversational message to the manager via /talk and receive a reply |
start-listener.js | Start a temporary HTTP listener to receive replies from the manager |
admin-session.js | Full admin session -- start listener, send messages, collect replies |
Environment variables:
| Variable | Default | Description |
|---|---|---|
MANAGER_URL | http://localhost:4100 | URL of the manager daemon |
ADMIN_LISTENER_PORT | 4050 | Port for the temporary reply listener |
Development Commands#
These npm scripts are available for development:
npm run build # Compile TypeScript
npm run dev # Development mode with hot reload
npm run id-agents # Start the interactive CLI
npm test # Run tests