Skip to content

CLI reference

The coro binary (packages/runner/cli/index.ts) wraps the local runner HTTP API. Most users stay in the dashboard after coro start; the commands below target automation, SSH sessions, and CI.


coro start

Starts startRunner(), binds Express (default port 3000), serves /dashboard/, and opens a browser unless suppressed.

FlagMeaning
--config <path>Overrides ~/.coro/config.json
--port <port>HTTP listener
--no-openSkip opening the dashboard tab
--openForce open even in seemingly headless environments

coro job

Submits POST /jobs targeting workflows/job/workflow.md (generic implementation lane). Dedicated workflows dispatch from the dashboard or custom automation that posts arbitrary workflowPath values directly to POST /jobs.

Typical implementation flags

FlagNotes
--repo, --reviewers, --descriptionRequired together for free-form CLI jobs
--service-nameDisplay label (defaults to repo slug)
--git-providerSCM override (github, bitbucket, …)
--jira-ticketAlternate body supplying only jiraTicketId
--no-streamSkip SSE tail after dispatch

--jira-ticket mode skips repo/reviewer/description enforcement because spec writers pull context from trackers.

Successful responses print jobId, status, and streamUrl (/jobs/:id/stream).


coro jobs

GET /jobs table view.

FlagMeaning
--type <type>Query filter forwarded to /jobs

coro status

GET /jobs/:jobId pretty printer.

FlagMeaning
--job <id>Required

coro logs

Subscribes to /jobs/:jobId/stream (SSE) with timestamps / colour cues.

FlagMeaning
--job <id>Required
--tail <n>Experimental tail window (0 = show everything observed after connect)

Ctrl+C detaches without killing the job.


coro resume

POST /jobs/:jobId/resume with JSON { "eventKey": "<cli-value>" } (Commander --event, default manual-resume).

FlagMeaning
--job <id>Required
--event <key>Stored on the resumed turn for auditing
--no-streamSkip SSE after the POST succeeds

coro cancel

POST /jobs/:jobId/cancel.

FlagMeaning
--job <id>Required
--reason <text>Optional note surfaced in telemetry

coro message

POST /jobs/:jobId/message { "message": "<text>" }.

Syntax:

Terminal window
coro message --job <jobId> "Please focus on rollback documentation"

coro login

OAuth helper against the hosted control plane; writes cloud.url + cloud.token.

FlagMeaning
--cloud-urlDefaults to http://localhost:4000 for dev stacks
--email, --passwordProvide non-interactively

Ends by reminding you to rerun coro init / coro runner start.


coro init

Bootstraps ~/.coro/config.json (Anthropic plugin slot API key mode, SCM credentials, dirs).

HighlightsMeaning
--localDrop hybrid cloud block
--api-key, --intelligence-dir, --working-dirFast path knobs
--scm <pluginId>Choose Bitbucket/GitHub/GitLab id
--git-providerDeprecated alias of --scm
--git-username, --git-token, --git-workspaceLegacy git block mirrored into plugins loader
--intelligence-remoteSeeds intelligence.gitRemote

Interactive prompts fill missing fields — still prefer dashboard fine-tuning after first boot.


coro runner …

Prefixes supported for scripting parity.

runner start

Identical flags/behaviour as coro start.

runner status

Loads LocalConfig, prints hybrid vs local detection, SCM plugin slug, dirs, truncated API hints.

runner stop

Informational stub today (foreground Ctrl+C workflow).


coro campaign …

Operate on workflows/campaign/workflow.md jobs already in-flight.

SubcommandHighlights
listFilters /jobs for campaign workflows
show --job <id>Prints dependency DAG + aggregate token stats
skip --job <id> --child <name>Posts /children/:child/skip
rerun …/children/:child/rerun
cancel …/children/:child/cancel

Optional --reason forwards to APIs. Creating a campaign still begins as a normal coro job — the Planner calls convert_to_campaign.


coro plugin …

SubcommandAction
init <id>Scaffold ~/.coro/plugins/<id> (`—kind scm
install <npm-spec>npm install + manifest wiring (--id override)
uninstall <id>Remove drop-in folder
listGET /plugins when online else scan ~/.coro/plugins

Restart the runner after installs so loaders pick up new manifests.


Hybrid reminders

Hybrid mode activates when both cloud.url and cloud.token exist. External webhooks land on the SaaS hostname while your laptop still listens on :port for dashboard + CLI (/guides/hybrid-mode/).