! shell
prefix. /project uses subcommands.
Project management
Owner-only means the guild owner, or a member with
OWNER_ROLE_ID (or
Administrator/Manage Server). list and status are available to any
authorized member. Access is decided by ACCESS_ROLE_ID / BLOCK_ROLE_ID,
with block checked first.Sessions
Scheduled tasks
Approvals and questions
Approval mode is per project channel./mode writes the override; the
APPROVAL_MODE environment value seeds the global default on first boot.
auto— the bot answers every permission request from the enforced policy immediately, exactly like previous releases.plan— a dry run. Read-only tools (read,glob,grep,list,find) run;bash,edit,write,patch,external_directory,webfetch, unknown tools, and sensitive-path reads are rejected.buttons— read-only tools run; every other non-denied request posts an Approve once / Always allow / Reject message in the thread. Requests time out after 5 minutes and are rejected. Deny-listed commands, sensitive paths, and unknown tools are rejected without asking.
buttons mode an agent question renders as buttons (one to five options), a
string select (six to twenty-five options), a Custom answer button that
opens a modal, and a Reject button. Multi-question requests collect answers
in order. Questions time out after 5 minutes and are rejected. auto and
plan modes reject questions rather than interrupting the run.
Clicking a button from a previous bot process answers “this request is no
longer active”; pending requests are not persisted across restarts.
Worktrees and forks
Cost and providers
Messages and shell
Text-like attachments on a message are size-capped, written to a validated
.celly/inbox, and referenced in the prompt. Shell output is truncated and
chunked across up to three messages with a total-length footer.
Deferred to v1.1
Commands:/project restart.
Features: voice messages, image attachments, OpenCode web UI, diff viewer,
tunnels/screenshare, forum-channel layout, cloud sandboxes.
The OpenCode web UI is intentionally not published (the sandbox server stays
loopback-only); attach from a terminal instead — see the
terminal attach guide.
See the architecture reference for what happens under
the hood when you run these.