Complete reference for the qoderwake CLI: daemon, authentication, config and storage, Wakers, projects, MCP, Skills, permissions, IM channels, sessions, groups, SOP, messages/runs/traces, automations, memory, Teams, plugins, and all commands and options.
What it is
qoderwake is QoderWake's local command-line tool plus a resident daemon. It starts a local daemon that manages digital employees (Wakers), projects, sessions, IM channels, scheduled tasks, memory, and more, and serves a local Web Console. The CLI itself is a thin client of the daemon: the vast majority of commands simply forward requests to the local daemon's HTTP API.
Basic form
| Global option | Description |
|---|---|
-v, --version | Print the version |
-h, --help | Print help; append --help to any subcommand to see its usage |
Quick start
Install the CLI before first use. On macOS / Linux, use the one-line command-line install:
qoderwake is not found, reopen the terminal, or use the full path ~/.qoderwake/bin/qoderwake.
After installation:
Tip:statusreturns structured JSON containingdevice(device online status),sessions(total / running),agents(number of local Wakers), andtasks(internal cron task health).
Core concept model
Understanding these objects and their hierarchy is a prerequisite for using the CLI well.
- Waker (digital employee): the core entity, id prefix
ag_. Historically called worker / agent; the commandworkeris a hidden alias ofwaker, and--worker-id/--agent-idare compatibility aliases of--waker-id. A Waker owns its own projects, MCP, Skills, memory, and permissions. - Project: a code repository or workspace binding. Two kinds: Waker-private projects (require
--waker-id) and public projects (--public, belonging to no Waker).project onboardclones/symlinks the repo and runs an initial analysis to seed project memory. - Session (a run): a single run unit of a Waker, id prefix
sess_. The isolation dimension = Waker + workspace + sessionId. It produces artifacts, file changes, and an event stream. - Conversation (conversation kernel, convId): the next-generation unified communication/execution node, identified by
conversation_id+kind(default/group_conversation/group_thread). It carries messages, delivery, runs, and attachments. Themessagesandrunscommands operate on it. - Group: a container holding multiple group conversations; a Thread can be derived from a message.
channelis the "single-conversation constrained" form of a group. - Run / Task: a Run is one execution frame of a conversation (
runs list/cancel); a Task is a lifecycle work unit tracked by a Trace. - Trace: links
trace_id → agent_id / session_id / task_id / run_idtogether and computes queue / dispatch / execution / total durations. It is the cross-object observability connector. - Automation: a task triggered on a schedule (cron) or once (timestamp), id prefix
tr_; the legacy command name istrigger. A single execution is onern_run. - Channel (IM channel): an inbound IM binding for DingTalk / Lark / WeChat, etc. Pairing is the channel-user pairing handshake, with an approval flow.
- SOP (Standard Operating Procedure): a collaboration skill with
skill_kind=sop, in a three-layer structure — profile (stable catalog identity), release (immutable, with version and summary), template (editable white-boxqoder-sop-template/v1JSON). It can be bound to a group in order. - Skill / MCP / Plugin / Extension: a Skill is a Waker capability pack (git-versioned, diff/rollback-able); MCP is a per-Waker external tool server; a Plugin is an in-process trigger/event-source plugin; an Extension is the local qodercli extension runtime manifest (read-only).
- Memory: two scopes —
agent(a Waker's long-term memory) andproject(requires--project-id). Supports preview (dream), snapshot, diff, rollback, import/export. - Teams / Mission / RoleRun: a Team is a temporary member set within a project; a Mission is the authoritative task lifecycle entity; a RoleRun is a member's execution record under a specific committed plan version.
teams diagnoseproduces a read-only diagnosis.
Global conventions and common options
Most commands share a set of common options; learn them once and reuse everywhere:
| Option | Meaning |
|---|---|
--waker-id <id> | Specify the digital employee. Required for most commands when omitted; --worker-id / --agent-id are compatibility aliases |
--format <table|json> | Output format, default table; some commands support only json/text/markdown |
--json | Output raw JSON directly, equivalent to --format json, suitable for scripting |
--file <path> / --json-file <path> | Read long text or JSON input from a file to avoid shell escaping |
--dry-run / no -y, --yes | Write operations show a preview/diff first, and only persist once a confirmation flag is added |
--project-id <id> | Specify the project for project-scoped operations |
- Every command supports
-h, --help; the options in this manual come from each command's--help. - Destructive/write operations (template update/rollback/delete, memory rollback/import, etc.) only preview by default; you must explicitly add
-y/--yes/--applyto execute. - The CLI is only a thin client of the daemon; run
qoderwake startto bring up the daemon before running most commands.
Daemon management
start — start the daemon
| Option | Description |
|---|---|
--host <host> | Listen address. Local loopback only by default; specifying a public address triggers an external-exposure confirmation |
--port <port> | Listen port or auto, default 19820 (CN region default 19830) |
--foreground | Run in the foreground (no detach), convenient for watching logs |
--open | Open the browser Console after starting |
--no-keepalive | Start a detached daemon but do not register an OS-level keepalive service |
--mock | Use the embedded mock gateway, no login required (--foreground only), for local trial/debugging |
-y, --yes | Non-interactively confirm external exposure |
stop / restart
restart options are basically the same as start; --force is used to confirm the "the replacement instance is available locally only" scenario.
status — daemon status
device (device online status), sessions (total / running), agents (number of local Wakers), tasks (internal cron task health).
portal — open the local Console
Authentication and account
login
| Option | Description |
|---|---|
--method <method> | Login method: browser (default, browser authorization), token (interactively paste a PAT), file (read a PAT from a file) |
--token-file <path> | File path to read the personal access token (PAT) from when --method file |
--qoder-cli-path / --qodercli-path | Legacy no-op; browser login is now hosted by qoderwake itself |
logout / whoami
Configuration and storage
qoderwake has three independent config stores: config (daemon app config, config.json), settings (user preferences, settings.json), and permission (each Waker's four-section permissions, see the Permission section).
config — daemon app config
settings — user preferences
settings init --storage selects the storage backend: sqlite (default) or file.
storage — storage backend migration
| Option | Description |
|---|---|
--from <backend> | Source backend: sqlite or file |
--to <backend> | Target backend: sqlite or file |
--switch | After a successful migration, automatically switch settings.storage.backend to the target backend |
--switch it only copies data and does not change the current backend.
backup — pre-upgrade backups
Always run qoderwake stop before restoring; otherwise it will fail because the daemon holds the storage.
Waker (digital employee)
Basic CRUD
--template-id / --template-json <path> / --template-zip <path> (pick one as the template source), --name, --description, --workspace <path> (omit to use the daemon-hosted workspace), --session-timeout <seconds>.
Key export options: --out <path> writes to a file; --full exports everything (projects/triggers/memory/connectors/permissions); --include-secrets includes sensitive env and tokens; --include-runs includes trigger run history. Omitting both --waker-id and --full exports all Wakers.
waker update — update by field
name, description, avatar, coreCapabilities, workStyles, deliveryCommitments, skill, mcp, identity, persona, bible.
- List/JSON fields (coreCapabilities/workStyles/deliveryCommitments/skill/mcp) support
--appendto append instead of overwrite. - Text fields (identity/persona/bible) also support
--append; use--fileto read from a file. - For
avatar,--fileis an image file path.
waker template — private templates
Solidify a mature Waker into a reusable, versioned private template:
savesupports--dry-runto preview the snapshot / stripped fields / quota, and--idempotency-keyfor retry safety.update/rollback/deleteonly print the diff/plan by default; add-y, --yesto actually write.--page/--page-sizepagination is available only withlist --mine.
Projects (project)
Projects come in two kinds: Waker-private projects (require --waker-id) and public projects (--public, belonging to no Waker).
| Option | Description |
|---|---|
--public | Target a public project (without a waker) |
--name / --description | Project name / description |
--path <path> | Filesystem source path |
--git-url <url> | Git repository URL |
--local-path <path> | Local path of the git source |
--label <label> | Context source label |
--initializer-command <cmd> | Initialization shell command |
--initializer-timeout <s> | Initialization timeout (seconds) |
listcan use--include-publicto merge public projects into the Waker's project list, and--include-public-scope used|allcontrols whether to include only used or all.onboardclones/symlinks the repo and runs an initial analysis to seed project memory.- All project commands are compatible with the legacy
--worker-idalias.
MCP (external tool integration)
Each Waker can mount several MCP Servers (stdio / http / sse transports).
| Option | Description |
|---|---|
--json <json> / --json-file <path> | Import MCP JSON directly |
--name / --description | Name / description |
--command <cmd> / --args <a,b,c> / --env <json> | stdio transport: command / comma-separated args / JSON env vars |
--http-url <url> / --transport stdio|http|sse | HTTP/SSE address and transport type |
--headers <json> / --header KEY=VALUE | HTTP/SSE request headers (--header is repeatable) |
--oauth-client-metadata-url / --oauth-client-id / --oauth-client-secret | OAuth client metadata and credentials |
--oauth-token-auth-method / --oauth-scope / --oauth-resource-metadata-url | OAuth token-endpoint auth method / scope / protected-resource metadata |
Skill (capability pack)
A Skill is a Waker's capability pack, git-versioned, diff/rollback-able.
- The
SKILL_ID+DOWNLOAD_URLreturned byskill searchcan be fed directly toskill add --install-url. - The
--actionofskill managecan becreate/patch/edit/write_file/remove_file, targeting a single Waker or a conversation (choose one of--waker-idor--conversation-id), and supports--dry-runvalidation.
Permission (permission guard)
Each Waker's permissions consist of four independent sections: tool-guard (tool interception), file-guard (file interception), builtin-tools (built-in tools), and model-security (model security).
tool-guard / file-guard / builtin-tools / model-security, all accepting --json or --json-file.
builtin read-only catalogs:
It's recommended to first export the current state withpermission get --json, modify it, and then usepatch <section>to update only the changed section, to avoidupdateoverwriting everything and losing other sections.
IM channels and pairing (channel)
Channel lifecycle
DingTalk channel registration (QR)
pairing — channel-user pairing
The pairing handshake between an external IM identity and a channel, with an approval flow:
Extension (local extension runtime)
Read-only view of the local qodercli extension runtime manifest:
Sessions (session)
A Session is a single run unit of a Waker (id prefix sess_), producing artifacts, file changes, and an event stream.
session create/sendcan pass a controller-event array via--events-json <json>or--events-json-file <path>.session artifacts--include-file-changescan be paginated with--file-changes-limit/--file-changes-cursor.session trajectoryproduces a redacted trajectory, written by default tosessions/redacted/<sessionId>.md(--no-write-memorydisables it,--forceoverwrites,--outspecifies the output file); use--scope agent|projectto write to the corresponding memory scope.
Group conversations (group)
--waker/--sop/--paramare all repeatable;--sopcan carry@versionand binds in the order passed.
group sop — ordered SOP binding for a group
SOP system catalog (sop)
An SOP (Standard Operating Procedure) is a collaboration skill with skill_kind=sop, in a three-layer structure: profile (stable catalog identity) → release (immutable version) → template (editable white-box JSON).
sop build's--set k=vis repeatable, used to inject template parameters; the output is exactly the skill directory generated at install time.
Messages / Run / Trace
messages — conversation messages
| Option | Description |
|---|---|
--text <t> | Message text (unless --file is used) |
--mention <idOrName> | Wake a conversation member (repeatable) |
--private-to <idOrName> | Visible only to the sender + the specified member (repeatable) |
--reply-to <seqOrId> | Quote an earlier message |
--if-latest <seq> | Send only if this is still the latest message you can see |
--intent <intent> | Intent: chat / ask / notify / request_action |
--image <path> / --file <path> | Attachments (both repeatable) |
--model <model> | Model override for the woken Waker |
--wait / --timeout <secs> | Wait for the wake run triggered by this message to finish (default 120s) |
claim/read is a pair of idempotent read mechanisms:claimtakes a stable page (returns a claimId), andreadthen precisely marks 1..N of that claim as read.
runs — conversation run frames
trace — task chain observability
--source:console/cli/api/trigger/im/work/dingtalk/dingtalk-user/dingtalk-ai-assistance/unknown.--status:arrived/created/queued/dispatching/running/success/failed/cancelled/timeout.--limitranges from 1..1000, default 50.
Automations (automation)
Tasks triggered on a schedule (cron) or once (timestamp) (id prefix tr_, legacy command name trigger); a single execution is one rn_ run.
| Option | Description |
|---|---|
--schedule-type <type> | cron (recurring) or one-time (a single ISO 8601 timestamp) |
--cron <expr> | 5-field cron expression (required when --schedule-type=cron) |
--cron-preset <preset> | daily / weekly / monthly / custom (default custom) |
--run-at <timestamp> | ISO 8601 timestamp (required for one-time) |
--timezone <tz> | IANA time zone (default local or Asia/Shanghai) |
--prompt <p> / --prompt-file <path> | Task prompt (choose one) |
--project-id <pid> | Optional local project binding |
--model <model> | qodercli model (default auto) |
--enabled <bool> | Whether enabled (default true) |
--idempotency-key <key> | Reuse the create-operation key on retry |
--file-system read|read-write|none, --network true|false, --run-commands true|false, --command-allow-list <a,b,c> (empty string clears), --pull-config-json/--pull-config-file, --permissions-json/--permissions-file; schedule fields can change --schedule-type / --cron / --cron-preset (update additionally supports hourly) / --run-at / --timezone.
inspect run is for diagnostics; it can --include-prompt and use --events-limit / --comments-limit / --outbox-limit (1-200) to control the row count of each table.
Memory (memory)
Two scopes: agent (a Waker's long-term memory, default) and project (requires --project-id). All subcommands support --scope agent|project; --agent-id is a deprecated alias of --waker-id.
update/removeare guarded text-range operations that require--old-textto match exactly; they can carry--expected-hash(the guard hash from memory_search) and--reason;--dry-runpreviews first.rollback/importonly dry-run by default; add--applyto actually write (and a pre-rollback/pre-import snapshot is created first).- The project scope can additionally pass
--project-name/--project-rootto locate the context and transcript. show --viewacceptsindex/topics/sessions/all(long_term/dailyare compatibility aliases).
Teams (Teams runtime)
Read-only diagnosis of Teams / Mission runtime data:
- You can focus a single diagnosis chain by Mission / user-intent correlation chain / RoleRun / ExecutorCommand.
Plugins (plugin)
A Plugin is a trigger/event-source plugin loaded in-process locally.
plugin scheduled-task — declarative scheduled-task registry
Diagnostics and maintenance
| Option | Description |
|---|---|
[traceId] / --trace-id <id> | Search logs by trace id or session id |
--keyword <kw> | Search by keyword |
--level <level> | Minimum level: debug / info / warn / error |
--qodercli | Show qodercli debug logs only |
--clean | Show only the raw message for structured logs |
--limit <n> | Limit the number of lines (default 200) |
-f, --follow | Follow and output new logs |
For troubleshooting, first check daemon health withqoderwake status, then locate errors withqoderwake log --level error --limit 100; when official support is needed, package logs withqoderwake feedback.
Environment variables
The following are common, user-facing environment variables you can set directly (from source such as core/paths.ts, core/user-auth.ts, cli/index.ts):
| Environment variable | Purpose |
|---|---|
QODERWAKE_HOME | Override the qoderwake home directory (default ~/.qoderwake, CN region ~/.qoderwake-cn) |
QODER_ENV | Runtime environment: daily / test / empty (i.e. prod). Daily development needs export QODER_ENV=daily |
QODER_PERSONAL_ACCESS_TOKEN | Personal access token (PAT) for headless environments |
QODER_PERSONAL_ACCESS_TOKEN_FILE | Read the PAT from a file (takes precedence over the above) |
QODER_USER_INFO | User info JSON for env authentication |
QODER_MACHINE_ID | Device machine id (machine binding) |
QODERCLI_PATH | Specify the qodercli executable path |
QODERWAKE_SETTINGS_PATH | Override the settings.json path |
QODERWAKE_DEFAULT_WORKSPACE | Override the default workspace directory |
QODERWAKE_LOG_LEVEL | Log level (set to debug for verbose logging) |
QODERWAKE_ENDPOINT_BASE_URL | Override the server endpoint base URL (on-prem / VPC) |
QODER_CONFIG_DIR | Override the CLI config directory |
There are also many internalQODER_*/QODERWAKE_*variables (such asQODERWAKE_DAEMON_URL,QODER_AGENT_ID, and various hook timeouts) that the daemon injects into child processes; you do not need to set them manually.
Directory layout (~/.qoderwake)
All of qoderwake's local state lives under the home directory (can be overridden with QODERWAKE_HOME):
| Path | Contents |
|---|---|
qoderwake | The main CLI / daemon binary |
bin/ | Other executables |
qodercli/ | QoderWake-managed qodercli config and skills directory |
config/ | Daemon app config (config.json) and settings.json |
data/ | Business data (sqlite / file backend: Wakers/projects/sessions/memory, etc.) |
logs/ | Logs (qoderwake.log, etc.; this is what qoderwake log reads) |
plugins/ | Installed plugins |
extensions/ | Local extension runtimes |
runtimes/ / runtime-resources/ / resources/ | Runtimes and built-in resources |
backups/ | Automatic pre-upgrade backups (managed by qoderwake backup) |
state/ / run/ | Runtime state and process/port info |
tools/ / tmp/ / .tmp/ | Tools and temporary files |
.auth | Login credentials |
.installed-version / .qodercli-version | Installed version markers |
Common workflows
From zero to ready
Create a digital employee and bind a project
Configure MCP and Skills
Create a scheduled automation
Group conversation + message-driven
Observability and diagnostics
Troubleshooting quick reference
| Symptom | Suggestion |
|---|---|
| Command reports "daemon unreachable" | First qoderwake status; if not running, qoderwake start; if the port is taken, qoderwake start --port auto |
| Not logged in / 401 | Confirm with qoderwake whoami; re-run qoderwake login; for headless use QODER_PERSONAL_ACCESS_TOKEN(_FILE) |
| Locate errors | qoderwake log --level error --limit 100; by chain qoderwake log <traceId>; live with -f |
| Abnormal qodercli behavior | qoderwake log --qodercli; if needed, specify the correct binary with QODERCLI_PATH |
| Roll back after an upgrade | qoderwake stop → qoderwake backup list → qoderwake backup restore <id> |
| Switch the storage backend | qoderwake storage migrate --from file --to sqlite --switch |
| Need official support | qoderwake feedback --message "..." to upload local logs |

