AACWorkflow Docs

CLI Reference

Complete command reference for the AACWorkflow CLI and agent daemon.

The aacworkflow CLI connects your local machine to AACWorkflow. It handles authentication, workspace management, issue tracking, and runs the agent daemon that executes AI tasks locally.

Authentication

Browser Login

aacworkflow login

Opens your browser for OAuth authentication, creates a 90-day personal access token, and auto-configures your workspaces.

Token Login

aacworkflow login --token <mul_...>

Authenticate using a personal access token directly. Useful for headless environments. Pass --token= with an empty value to be prompted interactively (so the token never lands in shell history).

Check Status

aacworkflow auth status

Shows your current server, user, and token validity.

Logout

aacworkflow auth logout

Removes the stored authentication token.

Agent Daemon

The daemon is the local agent runtime. It detects available AI CLIs on your machine, registers them with the AACWorkflow server, and executes tasks when agents are assigned work.

Start

aacworkflow daemon start

By default, the daemon runs in the background and logs to ~/.aacworkflow/daemon.log.

To run in the foreground (useful for debugging):

aacworkflow daemon start --foreground

Stop

aacworkflow daemon stop

Status

aacworkflow daemon status
aacworkflow daemon status --output json

Shows PID, uptime, detected agents, and watched workspaces.

Logs

aacworkflow daemon logs              # Last 50 lines
aacworkflow daemon logs -f           # Follow (tail -f)
aacworkflow daemon logs -n 100       # Last 100 lines

Supported Agents

The daemon auto-detects these AI CLIs on your PATH:

CLICommandDescription
AntigravityagyGoogle's coding agent
Claude CodeclaudeAnthropic's coding agent
CodeBuddycodebuddyTencent's coding agent
CodexcodexOpenAI's coding agent
CopilotcopilotGitHub's coding agent
Cursor Agentcursor-agentCursor coding agent
HermeshermesNous Research coding agent
KimikimiMoonshot coding agent
Kiro CLIkiro-cliKiro ACP coding agent
OpenCodeopencodeCommercial coding agent
OpenClawopenclawCommercial coding agent
PipiInflection coding agent
QoderqodercliAlibaba's coding agent
TraetraecliByteDance's coding agent

You need at least one installed. The daemon registers each detected CLI as an available runtime.

How It Works

  1. On start, the daemon detects installed agent CLIs and registers a runtime for each agent in each watched workspace
  2. It polls the server at a configurable interval (default: 30s) for claimed tasks
  3. When a task arrives, it creates an isolated workspace directory, spawns the agent CLI, and streams results back
  4. Heartbeats are sent periodically (default: 15s) so the server knows the daemon is alive
  5. On shutdown, all runtimes are deregistered

Configuration

Daemon behavior is configured via flags or environment variables:

SettingFlagEnv VariableDefault
Poll interval--poll-intervalAACWORKFLOW_DAEMON_POLL_INTERVAL30s
Heartbeat interval--heartbeat-intervalAACWORKFLOW_DAEMON_HEARTBEAT_INTERVAL15s
Agent timeout--agent-timeoutAACWORKFLOW_AGENT_TIMEOUT2h
Max concurrent tasks--max-concurrent-tasksAACWORKFLOW_DAEMON_MAX_CONCURRENT_TASKS20
Daemon ID--daemon-idAACWORKFLOW_DAEMON_IDhostname
Device name--device-nameAACWORKFLOW_DAEMON_DEVICE_NAMEhostname
Runtime name--runtime-nameAACWORKFLOW_AGENT_RUNTIME_NAMELocal Agent
Workspaces rootAACWORKFLOW_WORKSPACES_ROOT~/aacworkflow_workspaces

Agent-specific overrides:

VariableDescription
AACWORKFLOW_CLAUDE_PATHCustom path to the claude binary
AACWORKFLOW_CLAUDE_MODELOverride the Claude model used
AACWORKFLOW_CODEX_PATHCustom path to the codex binary
AACWORKFLOW_CODEX_MODELOverride the Codex model used
AACWORKFLOW_OPENCODE_PATHCustom path to the opencode binary
AACWORKFLOW_OPENCODE_MODELOverride the OpenCode model used
AACWORKFLOW_OPENCLAW_PATHCustom path to the openclaw binary
AACWORKFLOW_OPENCLAW_MODELOverride the OpenClaw model used
AACWORKFLOW_HERMES_PATHCustom path to the hermes binary
AACWORKFLOW_HERMES_MODELOverride the Hermes model used
AACWORKFLOW_PI_PATHCustom path to the pi binary
AACWORKFLOW_PI_MODELOverride the Pi model used
AACWORKFLOW_CURSOR_PATHCustom path to the cursor-agent binary
AACWORKFLOW_CURSOR_MODELOverride the Cursor model used
AACWORKFLOW_KIMI_PATHCustom path to the kimi binary
AACWORKFLOW_KIMI_MODELOverride the Kimi model used
AACWORKFLOW_KIRO_PATHCustom path to the kiro-cli binary
AACWORKFLOW_KIRO_MODELOverride the Kiro model used
AACWORKFLOW_COPILOT_PATHCustom path to the copilot binary
AACWORKFLOW_COPILOT_MODELOverride the Copilot model used
AACWORKFLOW_CODEBUDDY_PATHCustom path to the codebuddy binary
AACWORKFLOW_CODEBUDDY_MODELOverride the CodeBuddy model used
AACWORKFLOW_ANTIGRAVITY_PATHCustom path to the agy binary
AACWORKFLOW_ANTIGRAVITY_MODELOverride the Antigravity model used
AACWORKFLOW_QODER_PATHCustom path to the qodercli binary
AACWORKFLOW_QODER_MODELOverride the Qoder model used
AACWORKFLOW_TRAECLI_PATHCustom path to the traecli binary
AACWORKFLOW_TRAECLI_MODELOverride the Trae model used

Profiles

Profiles let you run multiple daemons on the same machine — for example, one for production and one for a staging environment.

# Set up a staging profile
aacworkflow setup --profile staging

# Start its daemon
aacworkflow daemon start --profile staging

# Default profile runs separately
aacworkflow daemon start

Each profile gets its own config directory (~/.aacworkflow/profiles/<name>/), daemon state, health port, and workspace root.

Workspaces

List Workspaces

aacworkflow workspace list

Watched workspaces are marked with *. The daemon only processes tasks for watched workspaces.

Watch / Unwatch

aacworkflow workspace watch <workspace-id>
aacworkflow workspace unwatch <workspace-id>

Get Details

aacworkflow workspace get <workspace-id>
aacworkflow workspace get <workspace-id> --output json

List Members

aacworkflow workspace member list <workspace-id>

Update Workspace

需要 admin 或 owner 权限。所有字段都是部分更新(PATCH 语义):未传的字段保持不变。

aacworkflow workspace update <workspace-id> --name "Acme Eng"
aacworkflow workspace update <workspace-id> \
  --description "Engineering team workspace" \
  --issue-prefix ENG

长文本走 stdin(保留换行/反斜杠):

cat <<'CTX' | aacworkflow workspace update <workspace-id> --context-stdin
我们是一支 5 人 AI-native 团队。
工作语言:中文 + 英文混合。
CTX

可编辑字段:--name--description / --description-stdin--context / --context-stdin--issue-prefixslug 创建后只读,不暴露在 CLI。--description--description-stdin(以及 context 同名对)互斥。未传任何字段 flag 时命令拒绝执行,避免空 PATCH 触发无意义的 workspace 更新事件。--issue-prefix "" 也会被拒绝:当前后端在 prefix 为空时静默跳过该字段,CLI 在本地拦下避免“看似成功的 no-op”。

Issues

List Issues

aacworkflow issue list
aacworkflow issue list --status in_progress
aacworkflow issue list --priority urgent --assignee "Agent Name"
aacworkflow issue list --assignee-id 5fb87ac7-23b5-4a7a-81fa-ed295a54545d
aacworkflow issue list --full-id
aacworkflow issue list --limit 20 --output json

表格输出默认显示可直接复制到后续命令的 issue KEY(例如 AAC-123);需要完整 UUID 时使用 --full-id。Available filters: --status, --priority, --assignee / --assignee-id, --project, --limit. 在重名 workspace 下用 --assignee-id <uuid> 可以精确锁定一个成员或 agent。

Get Issue

aacworkflow issue get AAC-123
aacworkflow issue get <uuid>
aacworkflow issue get <id> --output json

<id> 同时接受 issue key(aacworkflow issue list 表格里直接显示,例如 AAC-123)和完整 UUID(给 list--full-id 可显示)。同样的规则适用于下面 update / assign / status / comment / subscriber / runs 等接受 <id> 的命令。

Create Issue

aacworkflow issue create --title "Fix login bug" --description "..." --priority high --assignee "Lambda"
aacworkflow issue create --title "Fix login bug" --assignee-id 5fb87ac7-23b5-4a7a-81fa-ed295a54545d

Flags: --title (required), --description, --status, --priority, --assignee / --assignee-id, --parent, --project, --due-date. 脚本里如果已经拿到了 UUID(例如来自 aacworkflow workspace member list --output json),传 --assignee-id <uuid>(与 --assignee 互斥)以精确锁定。

Update Issue

aacworkflow issue update <id> --title "New title" --priority urgent

Assign Issue

aacworkflow issue assign <id> --to "Lambda"
aacworkflow issue assign <id> --to-id 5fb87ac7-23b5-4a7a-81fa-ed295a54545d
aacworkflow issue assign <id> --unassign

--to-id <uuid>(与 --to 互斥)按 UUID 精确分配;适合重名 workspace 下脚本化场景。

Change Status

aacworkflow issue status <id> in_progress

Valid statuses: backlog, todo, in_progress, in_review, done, blocked, cancelled.

Comments

# List comments
aacworkflow issue comment list <issue-id>

# Add a comment
aacworkflow issue comment add <issue-id> --content "Looks good, merging now"

# Reply to a specific comment
aacworkflow issue comment add <issue-id> --parent <comment-id> --content "Thanks!"

# Delete a comment
aacworkflow issue comment delete <comment-id>

Execution History

# List all execution runs for an issue
aacworkflow issue runs <issue-id>
aacworkflow issue runs <issue-id> --full-id
aacworkflow issue runs <issue-id> --output json

# View messages for a specific execution run
aacworkflow issue run-messages <task-id>
aacworkflow issue run-messages <short-task-id> --issue <issue-id>
aacworkflow issue run-messages <task-id> --output json

# Incremental fetch (only messages after a given sequence number)
aacworkflow issue run-messages <task-id> --since 42 --output json

runs 的表格输出默认显示 task UUID 短前缀;需要完整 task UUID 时使用 --full-idrun-messages 可直接接受完整 task UUID;从 runs 表格复制短前缀时需要同时传 --issue <issue-id>,CLI 只会在该 issue 的 runs 内解析。

Projects

Projects group related issues (e.g. a sprint, an epic, a workstream). Every project belongs to a workspace and can optionally have a lead (member or agent).

List Projects

aacworkflow project list
aacworkflow project list --status in_progress
aacworkflow project list --output json

Available filters: --status.

Get Project

aacworkflow project get <id>
aacworkflow project get <id> --output json

Create Project

aacworkflow project create --title "2026 Week 16 Sprint" --icon "🏃" --lead "Lambda"

Flags: --title (required), --description, --status, --icon, --lead.

Update Project

aacworkflow project update <id> --title "New title" --status in_progress
aacworkflow project update <id> --lead "Lambda"

Flags: --title, --description, --status, --icon, --lead.

Change Status

aacworkflow project status <id> in_progress

Valid statuses: planned, in_progress, paused, completed, cancelled.

Delete Project

aacworkflow project delete <id>

Associating Issues with Projects

Use the --project flag on issue create / issue update to attach an issue to a project, or on issue list to filter issues by project:

aacworkflow issue create --title "Login bug" --project <project-id>
aacworkflow issue update <issue-id> --project <project-id>
aacworkflow issue list --project <project-id>

Configuration

View Config

aacworkflow config show

Shows config file path, server URL, app URL, and default workspace.

Set Values

aacworkflow config set server_url wss://api.example.com/ws
aacworkflow config set app_url https://app.example.com
aacworkflow config set workspace_id <workspace-id>

Other Commands

aacworkflow version              # Show CLI version and commit hash
aacworkflow update               # Update to latest version
aacworkflow agent list           # List agents in the current workspace

Output Formats

Most commands support --output with two formats:

  • table — human-readable table (default for list commands)
  • json — structured JSON (useful for scripting and automation)
aacworkflow issue list --output json
aacworkflow daemon status --output json