Skip to content

CLI Commands

Use artu help <topic> [command] for focused help. Most commands also accept a trailing --help. Pass-through commands preserve that flag as payload, so use the explicit artu help form for them. Help writes to stdout, while invalid usage writes to stderr.

Human CLI information follows the language selected in Settings → Language. This includes help, local diagnostics, table headings, doctor, update guidance, and local server, theme, module, and integration messages. The supported codes are en, es, pt, fr, de, id, zh, and ja.

Commands and flags always stay in English. For example, Chinese and Indonesian users still type artu pane list, while its description and surrounding guidance use the selected language. Paths, IDs, agent names, Git references, URLs, model names, and user content are never translated.

English
Usage: artu pane <command> [args]
Simplified Chinese
用法:artu pane <command> [args]
Indonesian
Penggunaan: artu pane <command> [args]

Automation remains language-neutral. JSON responses, --json output, UHP methods and schemas, event names, error codes, and process exit codes do not change with the selected language. Use JSON or UHP rather than parsing a localized human table. artu --version also stays canonical and does not load the language setting.

The generated reference below intentionally shows the canonical English form.

Artuditu: Mission control for your AI coding agents
usage: artu <command> [args]
(no args) launch / attach the TUI
--session <name> target one named server session
--version, -V print the version
--help, -h show compact help
help [all|<topic> [command]] show compact, complete, or focused help
doctor check optional external tools (git, gh, …)
update check for and install a newer Artuditu release
ping check the server
workspaces:
workspace list list workspaces
workspace new create a workspace in the current directory
workspace open <path> open <path> as a workspace (or focus it if already open)
workspace focus <i> focus workspace i (0-based)
workspace rename <i> <name> rename workspace i without changing its folder
workspace pin <i> pin workspace i (0-based) in the sidebar
workspace unpin <i> unpin workspace i (0-based)
workspace close [<i>] close a workspace (default: active)
tabs:
tab list list tabs in the current workspace
tab new new tab
tab focus <n> focus tab n (1-based)
tab move <from> <to> move a tab to an exact position (1-based)
tab move left|right move the active tab one position (--tab N targets one)
tab swap <first> <second> exchange two tab positions (1-based)
tab rename <name> name a tab (--tab N to target one; empty clears it)
tab close [<n>] close a tab (default: active)
panes / agents:
pane list list panes and read-only history metrics in the current tab
pane split [<id>] [--down] [--no-focus] split a pane (default: side by side)
pane focus <id> focus a pane (jumps to its workspace/tab)
pane move [<id>] (--tab <n> | --new-tab) move a pane within its workspace
pane run [<id>] <cmd...> run a command in a pane
pane send [<id>] <text> send raw text to a pane
pane read [<id>] print a pane's recent output
pane status [<id>] print a pane's agent status and history metrics (any workspace)
pane processes [<id>] list cached executable identities without exposing arguments
pane name <name> name a pane so you can mention it (--pane <id>; --clear)
pane purpose <text...> save a pane purpose (--pane <id>; --clear)
pane close [<id>] close a pane
agent list list every agent across all workspaces/tabs
agent start <name> --kind <k> [--pane <id> | --anchor <id>] [--down] [--timeout <s>] [-- <args>]
spawn beside an anchor or reuse a pane, wait until ready, name it
agent fork <target> [--name <alias>] [--no-focus]
fork a supported agent's session into a sibling pane
agent name <name> alias the current agent, same as pane name (--clear to drop)
agent prompt <target> <text> [--wait] [--until STATE] [--timeout <s>]
atomically prompt and optionally wait (send is an alias)
agent send <target> <text> [--wait] [--until STATE] [--timeout <s>]
compatibility alias for agent prompt
agent keys <target> <key>... send control keys (enter, esc, ctrl+c, up, …)
agent read <target> [--lines N] [--source visible|recent] print an agent's output
agent get <target> one agent's live info (pane, name, kind, status, cwd)
agent explain <target> show identity/state evidence and active authority
agent report [<pane>] --source <id> --kind <agent> --status <state>
publish a leased authoritative state (integration API)
agent release [<pane>] --source <id> release that integration authority
agent sessions list resumable sessions found on disk
agent resume <id> reopen a resumable session into a pane
skill enable install the bundle in ~/.agents/skills/artuditu and detected hosts
skill status show the bundled release and installation details
skill disable remove unchanged Artuditu-managed installations
skill show print the bundled, version-matched SKILL.md
wait output <id> --match <text> [--timeout <s>] block until output appears
wait agent-status <id> --status done|blocked|working|idle [--timeout <s>]
attach <id> open the TUI into a single fullscreen pane
search:
search <text...> [--case] find text across every pane's scrollback (docs/63);
--case is case-sensitive; returns matches as JSON
search --fuzzy <query...> [--scope all|navigate|files|output] [--all-sessions]
[--limit <1-200>] [--case] [--json]
rank navigation, file paths, and retained output;
legacy search stays exact unless --fuzzy is passed
themes:
theme list [--json] list built-in, installed, and virtual themes
theme path print/create the shared themes directory
theme init <id> [--extends <id>] write an editable TOML starter
theme validate <path> [--strict] [--json] validate without installing
theme install <source> [--yes] install a local file, HTTPS URL, GitHub repo, or community/<id>
theme use <id> select and persist a registered theme
theme uninstall <id> remove an inactive local theme
theme reload rescan installed themes in the selected server
bars:
bar list list declared Artuditu Bar widgets and live content
bar push --id <id> [--region top-right|bottom-right] --content <json>
publish validated live widget segments;
--content-file, --compact-content, --text and --state supported
bar move --id <id> --region top-right|bottom-right|off
bar remove --id <id> clear live widget content, preserving placement
appearance:
ui sidebar [--side left|right] --width <n> set a sidebar's width (columns)
ui sidebar [--side left|right] --hide|--show toggle a sidebar
ui dock list list docks and which side each is on
ui dock move --id <id> --side left|right place a dock on a side
ui dock push --id <id> [--title <t>] [--side left|right] [--rows <json>]
feed a module's sidebar dock its rows (JSON array,
or piped on stdin). See docs/29 + the website
ui notification push --text <text> [--level info|success|warning|error]
ui notification clear [--dedupe-key <key>]
ui toast <text> flash a one-line message in the UI
modules (extensions):
module search [<query>] find modules published to the `artuditu-module` GitHub topic
module list list installed modules
module info <id> show a module's actions / panes / events / source
module link <path> register a local module dir (--disabled to skip enabling)
module install <owner>/<repo>[/sub] [--ref REF] [--yes] install from GitHub
module unlink <id> remove a module from the registry
module uninstall <id> unlink + delete a git-installed module's checkout
module enable <id> | disable <id>
<id> is a module id or the owner/repo it came from
module actions list every action across modules
module run <id> <action> invoke a module action (captures + logs output)
module pane open <id> <entrypoint> [--placement split|overlay|tab]
module pane focus <pane> | close <pane>
module log [<id>] tail module command logs (--limit N)
module config-dir <id> print/create a module's config dir
module settings <id> list a module's declared settings and values
module settings <id> <key> [<value>] read / write one setting
git:
git status branch, ahead/behind, working tree of the current workspace
git branches local branches with tracking
git log [--limit N] recent commits
git open [<workspace>] open the git tab for a workspace
files tree print the FILES tree of the active node
files open <path> [--target pane|tab|preview] open a file in a view
files reveal <path> expand the tree to a path
files refresh re-read the tree from disk
diff review:
diff list [--layer staged|worktree|untracked|conflict] list exact diff layers
diff open [<path>] [--layer <layer>] [--view auto|split|stack]
[--placement preview|pane|tab]
diff get <path> [--layer <layer>] [--include-patch] inspect a bounded semantic diff
diff refresh refresh the shared FILES and DIFF index
diff note add --file <path> (--old-line N|--new-line N) --body <text>
[--end-line N] [--kind question|issue|suggestion|praise]
diff note list [--file <path>] [--state open|resolved|outdated|orphaned]
diff note edit <id> --body <text>
diff note resolve|reopen <id>
diff note remove <id> --yes
diff note send --to <agent> [<id>...] [--all-open]
worktrees:
worktree list list the current repo's worktrees
worktree create <branch> create a worktree + workspace for <branch>
worktree open <path> open an existing worktree as a workspace
worktree remove <path> remove a worktree (its branch is kept)
orchestration (multiple agents on one project, docs/22):
task add "<title>" [--paths <glob>...] [--dep <id>...] [--gate <cmd>]
task list list all tasks + their status/assignee
task get <id> show one task
task claim <id> claim a task for this pane (deps must be done)
task next [--start] [--agent <cmd>] claim the next ready task (--start spawns
an isolated worker), for an agent loop draining the queue
task start <id> [--branch <b>] [--agent <cmd>] spawn an isolated worker:
a git worktree + pane, auto-claimed and path-leased
task heartbeat <id> --context <0..1> report context usage (blocks done at >85%)
task update <id> [--status <s>] [--output <o>] [--note <n>]
task done <id> mark done + release its leases
task merge <id> integrate the task's branch into artuditu/integration
(isolated worktree, conflicts block the task)
task release <id> return a claimed task to the queue
task delete <id> remove a task (release/finish an active one first)
lease acquire <glob>... --task <id> reserve file paths (denied if they overlap)
lease release <id> release a lease
lease list list active path leases
events:
events stream live status changes
universal harness protocol:
uhp capabilities print live methods, contracts, limits, and protocol identity
uhp schema print the complete installed UHP JSON Schema bundle
uhp snapshot print a fenced session snapshot for harness bootstrap
uhp events stream sequenced UHP events
uhp proxy forward one JSON request from stdin to the selected server
sessions:
session list [--json] list default and named server sessions
session attach <name> start or attach the named session
session stop <name> [--json] stop only the named session and its panes
session delete <name> [--json] delete a stopped named session
remote:
--remote <host> [ssh args] attach to a artu session on <host> over plain ssh
server:
server status is the server running, and what version
server start start the background server if it isn't up
server stop stop the server (and all panes)
server reload load the installed binary without stopping panes or sockets (Unix)
server restart stop + start (load a newly-installed binary)
server update-manifest fetch the latest agent-detection rules from artu.jdev.run
(applies live if the server is up; else on next start)
integration install|uninstall <claude|copilot|codex|opencode|kimi|grok>
add/remove artuditu's session-resume hook (uninstall
removes only artuditu's hook, never the agent)
[>_•] If you are an AI, run this to read:
/|\ artu skill show
or read $HOME/.agents/skills/artuditu/SKILL.md