The command line guide
Whatever the Sill app does with your mail, calendar, tasks and contacts, wros does too, from a shell, a script, a scheduled job or an AI agent. This page is the short tour; the full command reference ships with the tool.
Overview
Sill is a set of small programs called cores, one per area, behind one local gateway. You only ever type wros. The interface commands live under wros sill, and sill is an alias for that.
you ── wros task add … ──▶ gateway (127.0.0.1) ──▶ tasks core ──▶ encrypted local database
│ email, calendar, contacts, codes, media,
│ pdf, ai, matrix, sms cores
└─ never routes secrets: the connectors core is the only
one that holds passwords and tokensEach area is a component you can install or leave out. Run a command of a component that is not installed and you get a clear error naming it and the fix. If a core crashes, the supervisor restarts it with a back-off.
Five minutes
$ wros install -d # choose what to install (-m minimal, -d recommended, -c a,b exactly these) $ wros up # start the core in the background (safe to repeat) $ wros status # what is running, which accounts are connected $ wros account connect gmail --email you@gmail.com $ wros email list --limit 5 $ wros task add "buy milk" --due fri $ wros help task # usage of every task command
Not installed yet? Start with the install guide.
Components
wros components lists them. Installing is additive; features that need two components say which one is missing.
| Component | Gives you | Stage |
|---|---|---|
email | Mail, tags, insights, aliases, signatures, drafts, search | stable |
connectors | Adding accounts and signing in; the only holder of passwords and tokens | stable |
calendar | Calendars, events, invitations, reminders | stable |
tasks | Tasks, tags, linking tasks to events | stable |
contacts | Contacts, channels, relationships, suggestions | stable |
codes | Verification codes found in your mail | stable |
media | Attachments sorted into folders | stable |
pdf | Read, fill, redact and sign PDFs | stable |
ai | AI chat sessions, classification, summaries | beta |
matrix | Matrix / WhatsApp chat (no terminal commands yet) | beta |
sms | Stored text messages (phone sync is not built) | placeholder |
ui | The Sill desktop app | stable |
Running a command
A command is words and options. Quote anything with spaces. Every command has the shape wros <domain> <action> [arguments] [options].
$ wros task add "buy milk" --due fri --priority important $ wros email search "is:unread from:alice" $ wros event add "Standup" --start "fri 09:00" $ wros contact add "Ada Lovelace" --email ada@example.com
| If | then wros <command> |
|---|---|
| the core is running | attaches to it, sharing accounts and queues, so the desktop app updates live |
| nothing is running | starts only the core(s) it needs, runs, and stops them again |
Options every command accepts: --json, --text, --yes, --standalone (ignore a running core), --up (start the core first), --level (cap this call's safety level), --client (the name recorded in the audit log).
Getting help
$ wros help # the command list, grouped by domain $ wros help task # every task command $ wros help task add # one command (same as: wros task add --help) $ wros commands --json # every command with a JSON Schema $ wros schema task.add # the schema of one command
Ids, dates and paths
- Ids: tables print the first 8 characters. Anywhere an id is expected, any unique prefix of 4 or more characters works.
- Dates:
2026-10-09,today,tomorrow,fri,+3d. Date-times:"fri 14:30","2026-10-09 09:00"(local time). - Paths: relative paths are relative to where you are, not to the background core.
- Structured input:
wros call <command> --args '<json>', or--args -to read JSON from standard input. It avoids shell quoting for multi-line mail bodies.
Output & exit codes
On a terminal you get tables. Piped, or with --json, you get one JSON envelope. --text forces tables.
$ wros task list ID TITLE PRIORITY DUE PIN REPEAT -------- ---------------- --------- ---------- --- ------ c364b634 buy milk important 2026-10-16 no - (1 rows) $ wros task list --json {"command":"task.list","data":[…],"level":"read","ok":true}
Every failure prints error[WROS-Exxx]: <cause> and, when one exists, fix: <command to paste>.
| Exit | Meaning |
|---|---|
0 | ok |
2 | usage mistake or unknown command |
3 | not found |
4 | needs confirmation (repeat with --yes) |
5 | denied by the safety policy |
6 | failed: the work was attempted and did not succeed |
Safety
Every command has a level: read (looks only), write (changes local data), ai (calls an AI provider), send (sends something to other people), destructive (removes for good).
- A person at a terminal gets every level. A script, a pipe or an agent gets
read,writeandai. - Widen or narrow with
SILL_LEVEL, with~/.sill/cli-policy.json, or per call with--level. A call can lower its own level, never raise the session's. sendanddestructivecommands always need--yes, even when permitted.- Every call is appended to
~/.sill/logs/cli-audit.jsonl. - Secrets are never shown or taken on a command line. No command prints a password, token or API key, and none accepts one as an argument.
You can also see and switch every outside connection the cores make:
$ wros permissions list $ wros permissions disable <id>
Examples
The full argument list of all commands is in the reference that ships with wros (wros help <domain>).
| Area | Try |
|---|---|
| Accounts | wros account providers · wros account connect gmail --email you@gmail.com · wros account list |
wros email list · wros email show <id> · wros email draft save … · wros email send … --yes | |
| Calendar | wros event list · wros event add "Standup" --start "fri 09:00" · wros calendar sync |
| Tasks | wros task add "write the report" --due +3d · wros task list · wros task done <id> |
| Contacts | wros contact search ada · wros contact show <id> · wros contact nameless |
| Codes & media | wros code list · wros media folders |
wros pdf info lease.pdf · wros pdf text lease.pdf --pages 1-2 · wros pdf redact lease.pdf --find "123-45-6789" |
pdf fill, redact and sign save a new file next to the original and never overwrite it unless you add --replace. pdf sign draws a picture of a signature; it is a visual signature, not a digital one.Run the core
| Command | What it does |
|---|---|
wros up | Start the gateway and every installed core in the background. Does nothing if already running. |
wros status | Running or not, version, uptime, components, connected accounts. |
wros shutdown | Stop everything cleanly. Also restart. |
wros sync [mail|calendar] | Sync now. |
wros logs -f | Follow the system log. |
wros doctor | Diagnostics: data directory, database, mode, allowed levels. |
wros notify test | on | off | quiet | Check or change native notifications. |
wros autostart on | off | Start at login (Windows Run entry; Linux systemd --user unit). |
wros sill up | web | Open the desktop app, or the web UI at http://sill.localhost:4780 (this computer only). |
wros update | backup | restore | Keep it current, and keep your data safe. |
wros up is a detached user process: no administrator rights, no OS service. It takes an instance lock, restarts crashed cores, and listens only on 127.0.0.1 with a random token.
Scripts & AI agents
Piped output is JSON and exit codes are stable, so scripts can rely on both. For AI tools, wros mcp is an MCP server with one tool per command.
$ wros up $ claude mcp add sill -- wros mcp
- An agent session defaults to
read,writeandai. For a read-only assistant, start it withSILL_LEVEL=read. - Sending mail or deleting needs your permission and
confirm: true(--yesin a shell). Agents should never add it on their own. - An agent cannot read or change passwords, OAuth secrets, tokens or API keys, and cannot add an IMAP account.
wros eventsstreams changes (email:new,contacts:changed…) as JSON lines.
Troubleshooting
"the tasks component is not installed" (WROS-E317)
Run the fix it prints: wros install -c tasks.
"not answering" (WROS-E319)
A core has crashed. The supervisor restarts it by itself; check wros status and wros logs. After five crashes in ten minutes it gives up, and crash reports are kept under ~/.sill/logs/crashes.
Exit code 4 or WROS-E513
The command sends or deletes something. Check it, then repeat with --yes.
Not in the terminal yet
Matrix / WhatsApp, adding a password (IMAP) account, and the PDF signature editor are app-only for now.