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-agents core: 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.

/deploy only 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 toUseEffect
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.

/sync has 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 reads REMOVED — 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:

SubcommandDescription
(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:

FlagDefaultDescription
--sender <name>heartbeatOverride the sender name shown on heartbeat messages
--delivery <mode>internalDelivery 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:

SubcommandDescription
(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:

FlagDefaultDescription
--sender <name>scheduleOverride the sender name shown on calendar messages
--delivery <mode>talkDelivery mode: talk (conversational) or internal (non-conversational)
--timezone <tz>System defaultIANA 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:

SubcommandDescription
listList 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:

StatusMeaning
todoUnclaimed -- no agent assigned yet
doingIn progress -- an agent has claimed it
doneCompleted

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:

CommandDescription
/agent <name> rebuildRebuild a single agent
/agentsList all agents
/agents rebuildRebuild 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
/deployList 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
/statusShow status
/sync-walletsSync OWS wallet addresses to ENS records
/wallet <name> [chain]Show agent wallet addresses
/update <name> [--wallet|--name]Update agent properties
/heartbeatList heartbeats
/heartbeat add <agent> <s> <msg> [--sender <name>]Add heartbeat
/heartbeat pause|resume|remove <id>Manage heartbeat
/calendarList calendar events
/calendar add <agent> <time> <days> <msg> [--sender <name>]Add calendar event
/calendar pause|resume|remove <id>Manage calendar event
/task listList 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:

ScriptDescription
remote-command.shSend a CLI command to the manager via /remote
talk-to-manager.shSend a conversational message to the manager via /talk and receive a reply
start-listener.jsStart a temporary HTTP listener to receive replies from the manager
admin-session.jsFull admin session -- start listener, send messages, collect replies

Environment variables:

VariableDefaultDescription
MANAGER_URLhttp://localhost:4100URL of the manager daemon
ADMIN_LISTENER_PORT4050Port 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