ARC CLI — Command Reference
ARC CLI is the command-line tool for interacting with Arc Cloud. Manage projects, issues, wiki, and skills straight from your terminal.
- Source code:
clients/arc-cli.ts - API client:
clients/lib/api.ts - Build:
scripts/build-arc.sh(compiled binary)
Installation and Setup
Configuration is stored in ~/.arc/config.json (server_url, token, connected_at).
arc login [server_url]
Authorization via device code flow. Opens a browser for confirmation.
arc login # default server: https://arc-os.co
arc login https://my-server.com # custom server
After launch the CLI prints a URL and a one-time code. Open the URL in a browser, confirm the authorization — the CLI receives the token automatically.
arc login --token <token>
Direct token authorization (for automation or when device flow is unavailable).
arc login --token eyJhbGciOiJIUzI1NiI...
The CLI validates the token against the API before saving it.
arc logout
Removes credentials from ~/.arc/config.json and strips the ARC block from CLAUDE.md (if present).
arc logout
arc projects
List the projects available on the server.
arc projects
Output:
Available projects:
Name Type Status
--------------------------------------------------
arc-v2 bot running
my-project bot unknown
Starting a Session
arc <project> [mode]
Initializes a Claude session with full project context. Equivalent to arc start <project> [mode].
arc my-project dev # dev mode (default)
arc my-project prod # prod mode
arc --role clceo my-project # with the CEO role
What happens on launch:
- Request
GET /api/cli/init/:project/:mode— fetches CLAUDE.md, worker config, skills - Session-start picker (issue #115) — interactive selection of the active issue for the session: open issues (sorted P0→P3 + recent-first, fuzzy filter if >10), recently-closed (with reopen-confirm on pick),
[n]create new,[q]skip with double-confirm. The selected id is stored in~/.arc/sessions/<project>-<worker>.jsonasactive_issue_id - Context injection into the local
CLAUDE.md(ARC Cloud block +Active issue: #N — Titleblock) - The
ARC_ACTIVE_ISSUE_ID=<id>env var is passed to the Claude subprocess — the Bash tool sees it forarc issue logwithout re-prompting - Cleanup of deprecated
.mcp.jsonentries (if any) - Launch of the
claudesubprocess with TTY interactivity - Start of the background watcher (see "Session Monitoring")
Parameters:
| Parameter | Description |
|---|---|
project |
Technical project name (e.g. arc-v2) |
mode |
dev (default) or prod |
--role <role> |
Session role (e.g. clceo, developer) |
Non-interactive bypass: ARC_ISSUE_ID=42 arc my-project dev skips the picker and uses the given id (for CI/scripts).
Mid-session switch: arc issue switch <id> (from a parallel terminal) switches the active issue — it writes switched_away on the previous issue + switched_in on the new one. The current session picks up the new id after a restart.
arc continue <project> [mode]
Resume the last Claude Code session (24-hour window). Auto-restores active_issue_id without re-prompting.
arc continue my-project # pick up the previous session + active issue
arc continue my-project --reselect-issue # force re-run picker
arc tour
Interactive 5-step onboarding in the terminal (mirrors web checklist). Progress syncs with the web dashboard.
arc tour
Issue Management
arc issues [--status <filter>]
List the project's issues.
arc issues # open only (default)
arc issues --status closed # closed only
arc issues --status all # all issues
Output:
3 issue(s):
- #12 [P1] Add dark mode [ux, frontend]
- #15 [P2] Fix login timeout
- #18 [P0] Critical: DB migration
arc issue create --title "..." [options]
Create a new issue.
arc issue create --title "Add dark mode" --priority P1 --labels "ux,frontend"
arc issue create --title "Fix bug" --body "Detailed description here" --priority P0
Parameters:
| Parameter | Required | Description | Default |
|---|---|---|---|
--title <text> |
yes | Issue title | — |
--body <text> |
no | Detailed description | — |
--priority <level> |
no | P0 / P1 / P2 / P3 |
P2 |
--labels <list> |
no | Comma-separated labels: bug,ux |
— |
arc issue update <id> [options]
Update an existing issue.
arc issue update 12 --status closed
arc issue update 15 --priority P0 --title "Critical: Fix login timeout"
arc issue update 18 --body "Updated description with more context"
Parameters:
| Parameter | Description |
|---|---|
--status <status> |
open or closed |
--title <text> |
New title |
--body <text> |
New description |
--priority <level> |
P0 / P1 / P2 / P3 |
At least one parameter is required for an update.
arc issue log <id> "<text>" [--author <name>]
Add a progress entry to an issue (activity log).
arc issue log 12 "Started implementation"
arc issue log 12 "Dark mode toggle works" --author "developer"
Parameters:
| Parameter | Required | Description | Default |
|---|---|---|---|
id |
yes | Issue number | — |
text |
yes | Entry text | — |
--author <name> |
no | Author name | cli |
The backend (POST /api/mcp/issues/:project/:id/log) accepts optional fields type (whitelist: log / session_start / session_end / switched_in / switched_away / auto_summary / reopened) and ts (ISO-8601 for backdated entries; future-dated values are clamped to now). Used internally by the session-start picker (#115) and arc retro (#117).
arc issue switch <id>
Switch the active issue for the current session (issue #115). Saves to ~/.arc/sessions/<project>-<worker>.json, writes switched_away on the previous issue + switched_in on the new one.
arc issue switch 42
arc issue switch 42 --worker consultant # for a specific worker (default: developer)
Validation: the issue must exist and be open. If it is closed — run arc issue update <id> --status open first.
arc sessions <project> [mode]
View all saved sessions for a project and resume any of them on demand — even if you forgot to run continue (issue #131).
arc sessions arc-v2 # all workers
arc sessions arc-v2 --worker developer # developer only
Prints a table: transcript status (● present / ✗ lost), worker name, short session-id, session age, active issue. Below it — a list of all .jsonl files, including "orphaned" ones (not bound to the current worker).
After the table — an interactive picker:
- Enter a worker name (
developer,sentinel…) — resumes that worker's latest session - Enter the 8 characters of a session-id — resumes that specific session
Enter— skip
How it works: the picker writes the chosen session_id + transcript_path to ~/.arc/sessions/<project>-<worker>.json, then launches a regular arc <project> continue.
arc retro <project> [options]
Reconstruct issues retroactively from session history + git log (issue #117). Scans ~/.arc/sessions/<project>-*.json, reads the first user prompt from the transcript JSONL, collects commits via git log --since=started_at --until=ended_at.
arc retro gapap # dry-run — prints the plan
arc retro gapap --apply # creates issues
arc retro gapap --since 2026-01-01 # only after this date
arc retro gapap --worker consultant # only for one worker
What is skipped automatically:
| Type | Why |
|---|---|
| Linked sessions | active_issue_id already set (post-#115) |
| Warm-up sessions | 0 commits + trivial prompt (hi, test, continue) |
| Duplicates | Jaccard title similarity ≥0.55 + ±48h overlap with an existing issue |
Older than --since |
outside the window |
What happens on --apply:
createIssuefor each candidate (priority=P2, label=retro)- Backdated activity entries:
session_start(started_at) +auto_summaryper commit (commit timestamp) +session_end(ended_at) — viaPOST /logwith thetsfield - Sessions >30 days old with commits →
status=closedimmediately. Recent unfinished →status=open.
Skills and Knowledge
arc skill <name>
Load a skill from Cloud. Prints the skill's instructions and evals (if any).
arc skill consultant_system
arc skill crm-api-reference
Requires the ARC_PROJECT variable (set automatically by arc start).
If the skill is not found, the CLI prints the list of available ones.
arc kb search "<query>"
Search the project wiki. Keyword match on file names; returns up to 5 best results (content truncated to 2000 characters).
arc kb search "deployment"
arc kb search "arc-cli"
arc learnings
Accumulated rules and corrections from all of the project's sessions.
arc learnings
Output:
- [cli] Always validate project name before API calls
- [deploy] Test nginx config before reload
Wiki and Roadmap
arc wiki update --file <name> --content "..."
Create or update a project wiki page.
arc wiki update --file "architecture" --content "# Architecture\n\nMain components..."
arc wiki update --file "deploy-guide" --content "$(cat my-doc.md)"
Parameters:
| Parameter | Required | Description |
|---|---|---|
--file <name> |
yes | Page name (without .md) |
--content <text> |
yes | Markdown content |
Output: Wiki created: architecture.md (342 bytes) or Wiki updated: ...
arc roadmap sync --phase <id> --status <text> [--notes "..."]
Update a phase status in the project roadmap.
arc roadmap sync --phase 45 --status "IN PROGRESS"
arc roadmap sync --phase 44 --status "DONE" --notes "All analytics redesigned"
Parameters:
| Parameter | Required | Description |
|---|---|---|
--phase <id> |
yes | Phase ID (e.g. 38.1, 45) |
--status <text> |
yes | Status: DONE, IN PROGRESS, PLANNED, etc. |
--notes <text> |
no | Notes for the phase |
Reporting
arc report --summary "..." [options]
Send a session report to Arc Cloud.
arc report --summary "Implemented dark mode with system preference detection"
arc report --summary "Fixed auth bug" --files "auth.ts,middleware.ts" --decisions "Switched to HMAC tokens"
Parameters:
| Parameter | Required | Description |
|---|---|---|
--summary <text> |
yes | Brief summary of what was done |
--files <list> |
no | Comma-separated changed files |
--decisions <list> |
no | Comma-separated key decisions |
Documentation Enforcement (Phase 49.1-49.2.1)
ARC has a built-in system that keeps documentation up to date without human reminders. It works together with the pre-push git hook (scripts/check-docs-coverage.ts).
arc wrapup
Read-only checklist — shows which docs need updating for unpushed commits.
arc wrapup
Delegates to scripts/check-docs-coverage.ts. Mapping:
| Code change / commit | What is expected |
|---|---|
shared/migrations/* |
docs/public/architecture/database-schema.md |
shared/routes/* |
docs/public/api/api-reference.md |
Phase NN in the commit msg |
docs/ROADMAP.md + docs/status/current-state.json |
| ≥3 backend files & ≥50 LOC | learnings.md |
arc wrapup --generate
Auto-draft skeleton entries for missing docs. Writes TODO-marked stubs to:
learnings.md— timestamp + auto-detected scope (api/backend/frontend/infra/process)docs/ROADMAP.md— Phase NN heading + commit summarydocs/status/current-state.json— version bump + prepended change
arc wrapup --generate
# then: review via `git diff`, replace TODOs with real content, commit
TODO markers intentionally won't pass review — the structure is generated, not the content.
arc wrapup --from-summary "<text>"
Capture a research/decision/finding directly into learnings.md without a code commit. Closes the blind spot for work without code commits (capacity analysis, broker comparison, trade-off review).
arc wrapup --from-summary "Decision: rejected Redis for single-VPS — broker overhead unjustified for 10KB/msg, 1-to-1 FIFO. fs.watch sufficient."
The CLI auto-classifies:
- Type: decision / lesson / finding / spike (regex hints)
- Scope: infra / perf / security / api / frontend / process
Entry format:
- [2026-04-28T15:00:00.000Z] [perf] Decision: ...
GitHub Integration (Phase 49.3)
Webhook-based notifications + UI feed for linked GitHub repos.
arc github link <project> <owner/repo>
Link a repo to a project. Returns the webhook URL, secret, and step-by-step instructions for GitHub repo Settings → Webhooks.
arc github link arc-v2 SerhiiInUa/citadel-v2
Output:
✓ Repo linked.
Webhook URL: https://arc-os.co/api/webhooks/github
Webhook secret: <32-byte hex>
Setup instructions:
1. Go to https://github.com/SerhiiInUa/citadel-v2/settings/hooks
2. Click "Add webhook"
3. Payload URL: https://arc-os.co/api/webhooks/github
4. Content type: application/json
5. Secret: <secret>
6. Events: Push, Pull requests, Workflow runs, Issues
arc github links [project]
List the repos linked to a project (default: ARC_PROJECT env).
arc github links arc-v2
arc github unlink <project> <id>
Remove a link by id (from arc github links).
arc github unlink arc-v2 3
Supported events: push, pull_request, workflow_run, issues (95% of use cases).
What you get after setup:
- Telegram notification to the project owner on every event (icon + summary + GitHub link)
- Sidebar feed in the Workspace ContextRail (polls 30s, last 8 events)
Detailed setup guide: GitHub Integration Setup.
Neural Memory
arc memory refresh
Phase 71.8 (#365): re-embed all of the project's key knowledge sources (MANIFEST + ROADMAP + wiki + open issues) into the self-hosted RAG store (embeddings + embeddings_vec). Same endpoint, new semantics — writes to the local SQLite, not to Google NotebookLM.
arc memory refresh
Output:
Refreshing neural memory...
Synced: 12 | Errors: 0
Sources:
- wiki/architecture.md
- wiki/deploy-guide.md
- issues/open
Timeout: 30 seconds (the volume of embed calls to Cohere for a full re-embed).
This step is usually unnecessary — the Phase 71.5 hooks automatically re-embed every wiki/issue/skill write.
arc memory refreshis useful as a "force re-index" after a mass pull or a migration.
arc memory fetch-artifact — removed in Phase 71.8
The NotebookLM audio overview has no RAG equivalent. The endpoint returns 410 Gone. If you need a voice summary — see a future Phase for Whisper TTS over the project wiki.
Environment Variables
Set automatically by arc start, but you can set them manually to use subcommands outside a session.
| Variable | Description | Auto | Manual |
|---|---|---|---|
ARC_PROJECT |
Technical project name | yes | yes |
ARC_SERVER_URL |
Arc OS server URL | yes | yes |
ARC_TOKEN |
JWT authorization token | yes | yes |
ARC_ROLE |
Session role (clceo, developer, etc.) |
yes | yes |
ARC_WORKER_ID |
Worker ID (from workers_registry.json) |
yes | no |
ARC_WORKER_LABEL |
Display name of the worker | yes | no |
Manual usage example (outside arc start):
export ARC_PROJECT=my-project
export ARC_SERVER_URL=https://arc-os.co
export ARC_TOKEN=eyJhbGciOiJIUzI1NiI...
arc issues
arc learnings
Session Monitoring
On arc start a background watcher launches automatically, which:
- Finds the new
.jsonlfile in~/.claude/projects/{normalized-cwd}/ - Reads new lines from the transcript every 3 seconds
- Parses
userandassistantmessages - Sends them to
POST /api/cli/chat-log/:project(fire-and-forget) - Content is truncated to 10,000 characters per message
The watcher is non-critical — errors are ignored, and the session keeps working even if the CRM is unavailable.
Usage Examples
Typical workflow
# 1. Log in (one-time)
arc login
# 2. View available projects
arc projects
# 3. Start a session
arc my-project dev
# --- Inside the Claude session: ---
# 4. View open issues
arc issues
# 5. Create a new issue
arc issue create --title "Add dark mode" --priority P1 --labels "ux,frontend"
# 6. Log progress
arc issue log 42 "Started implementation"
arc issue log 42 "Toggle component ready, testing system preference detection"
# 7. Update the wiki
arc wiki update --file "architecture" --content "# Architecture\n\nUpdated with dark mode module..."
# 8. Update the roadmap
arc roadmap sync --phase 45 --status "IN PROGRESS"
# 9. Load a skill when needed
arc skill crm-api-reference
# 10. View learnings
arc learnings
# 11. Close the issue
arc issue update 42 --status closed
# 12. Send a report
arc report --summary "Implemented dark mode with system preference detection" \
--files "theme.ts,App.tsx,DarkModeToggle.tsx" \
--decisions "Used CSS custom properties for theming"
Memory synchronization
arc memory refresh
arc memory fetch-artifact --type audio_overview
Working with multiple projects
# Session for the first project
arc project-alpha dev
# In another terminal — a session for the second one
arc project-beta dev --role clceo
Timeouts
| Operation | Timeout |
|---|---|
| Standard API requests | 15 seconds |
arc memory refresh |
30 seconds |
arc memory fetch-artifact |
60 seconds |
| Device code flow (login) | determined by the server (expires_in) |