Reference
Command line
Every shelley subcommand and flag, from the binary's own help.
shelley [global-flags] <command> [command-flags]
Global flags go before the command. Flags take one dash or two (-db and
--db are the same). shelley <command> -h prints a command’s flags, though a
few commands, noted below, don’t understand -h.
Global flags
| Flag | Default | Does |
|---|---|---|
-db PATH |
shelley.db |
SQLite database: conversations, settings, custom models, MCP servers. Relative to the current directory, so set it. |
-config PATH |
none | Optional shelley.json. A path that doesn’t exist is ignored. |
-default-model ID |
none | Default model for the web UI. Overrides default_model in shelley.json. Unset, the first ready model wins. |
-predictable-only |
off | Use only predictable, a built-in fake model. Free, and useless for real work. |
-debug |
off | Debug logging. |
-disable-gateway |
off | Ignore llm_gateway from shelley.json. |
-disable-llm-integration |
off | Ignore any discovered exe.dev LLM integration. |
serve
Starts the web server.
shelley --db ~/.shelley/shelley.db serve --port 9000
| Flag | Default | Does |
|---|---|---|
-port N |
9000 |
TCP port. Shelley listens on all interfaces. 0 picks a free port. |
-port-file PATH |
none | Write the port actually used to this file (handy with -port 0). |
-socket PATH |
~/.config/shelley/shelley.sock |
Unix socket for shelley client and shelley mcp. none disables it, which also breaks the agent’s own shelley mcp calls. |
-require-header NAME |
none | Reject /api/ and /mcp/ requests over TCP that lack this header. Only checks that it’s present: useful behind a proxy that sets it, not authentication by itself. |
-systemd-activation |
off | Take the listening socket from systemd (LISTEN_FDS) instead of opening a port. |
-banner TEXT |
none | Show a banner at the top of the UI, e.g. to mark a demo instance. |
The Unix socket is created with mode 0600 and skips the -require-header
and cross-origin checks; whoever can open it is trusted. The default socket
path follows XDG_CONFIG_HOME if it’s set.
models
Prints the built-in models Shelley would offer with the current API keys,
-config, and global flags, without starting the server: ID, provider, API
type, base URL, where the credentials came from, and a * on the default.
Transcription models, if any, are listed after. Custom models added in the UI
live in the database and aren’t shown. No flags of its own.
shelley models
client (experimental)
A command-line client for a running Shelley, connecting over the Unix socket by default. It prints JSON. Its interface may change without notice.
| Flag | Does |
|---|---|
-url URL |
unix:///path, http://host:port, or https://host:port. Defaults to $SHELLEY_SOCKET, else the default socket. |
-H 'Name: Value' |
Extra request header, repeatable. |
| Subcommand | Does |
|---|---|
chat -p PROMPT |
Sends a message, starting a new conversation unless -c ID is given, and prints the conversation ID. Also -model, -cwd, -reasoning, -tool NAME=on|off, -no-tools, -tag, -ephemeral (wait for the turn, then archive), -disable-notifications. |
read ID |
Prints a conversation’s messages as JSON lines. -wait streams until the turn ends; -full gives complete records; -usage gives token totals including subagents. |
list |
Lists conversations. -archived, -limit N (default 50), -q QUERY. |
search QUERY |
Searches slugs and message content. -limit N (default 20). |
tag ID [TAG...] |
Shows or adds tags; -rm removes, -set replaces. |
tags |
Tags in use, most used first. |
archive ID |
Archives a conversation. |
help |
Detailed help with examples. |
ID=$(shelley client chat -cwd ~/src/app -p "run the tests" | jq -r .conversation_id)
shelley client read -wait "$ID"
mcp
Uses the MCP servers registered with Shelley: list, search, call, add,
rm, auth, restart. -url (before the subcommand) picks the server,
with the same default as client. See MCP servers.
skill
Lists, prints, or creates skills: skill ls, skill cat NAME,
skill new NAME. No flags, and -h isn’t recognized. See
Skills.
tour
Tools for commit tours, the narrated walkthroughs stored
as git notes. Mostly run by the agent, following the commit-tour skill.
| Subcommand | Does |
|---|---|
tour chunks COMMIT |
Prints the commit’s diff as numbered patch fragments, as JSON. -index for a compact index, -text for raw patch text, -only 0,3-5 to pick chunks. |
tour scaffold COMMIT |
Prints a skeleton tour that covers every chunk. |
tour verify COMMIT TOUR.json |
Checks a tour against the commit. |
tour attach COMMIT TOUR.json |
Verifies, then stores the tour as a git note. |
tour show COMMIT |
Prints the stored tour. |
All take -C DIR (default .) for the repository. shelley tour -h isn’t
recognized but prints this usage anyway.
unpack-template
shelley unpack-template go ./myapp
Copies a project template into a directory, creating it if needed. There is
one template, go: a Go web app with HTTP handlers, SQLite with migrations,
and a systemd unit, written with exe.dev VMs in mind. -h lists the
templates.
exe-scroll
Runs exe-scroll, a terminal-session program embedded in the binary. Shelley
uses it for the web UI’s persistent terminals. Its usage is
exe-scroll <socket> [-- command...]: attach to the session at that socket,
or start one running the command (default $SHELL). Detach by sending the
attaching process SIGUSR2. shelley exe-scroll -h has the details.
dtach
The older persistent-terminal helper, kept so terminal sessions created by previous versions stay attachable. New sessions use exe-scroll.
shelley dtach new -s SOCKET [-cwd DIR] [-cols N -rows N] -- CMD [ARGS...]
shelley dtach attach -s SOCKET
There’s no detach key; close the terminal to detach.
version
Prints version information as JSON. It takes no flags and ignores -h:
{
"version": "0.1346.914604164",
"tag": "v0.1346.914604164",
"commit": "330874c6e28f2ee76dae3c60522342b9610d0d90",
"commit_time": "2026-10-10T01:54:50Z"
}
The flag definitions are in cmd/shelley/main.go.