Chat surfaces
Everything you can do at the werbos chat prompt: REPL flags, slash commands, private mode, mission scaffolding, the budget gate. The 'what can I type?' reference.
werbos chat is the canonical surface. The same engine drives
werbos serve (HTTP), the React SPA, and the in-process
WerbosClient, but the REPL is where the surface area lives most
visibly. This page is the reference for everything you can type
inside it — flags, slashes, private mode, missions.
Inside the REPL: ? / /help
The fastest way to remember the surface:
werbos> ?
werbos> /help
Both render a quick-reference card with slashes grouped by surface:
chat: /mirror /private /buddy /reset
eval: /label /regressions
notebook: /notebook (Tom)
skills: /skill
vision: /see [region|full|window|clear]
mission: /goal /dream /tasks
budget: /budget
schedule: /schedule
Persona slashes
/mirror # show current character / voice ratio (0-100)
/mirror 50 # change persistently for this session
/mirror 30 disagree with me on this # one-turn override; resets after the AI replies
The mirror slider is the F.2 character/voice blend control. See personas for the full story.
Private chat — --private flag + /private slash
Private mode skips archive write at session finalize. Useful for
ephemeral tasks where you don’t want a .pfm left behind.
werbos chat --private # entire session is private
Inside the REPL:
werbos> /private # toggle private mode for the session
werbos> /private status # show current state
Server-side counterpart:
POST /api/chats?private=1
The SPA renders a “private” badge on the active-chat header when
this is set. chat.private_mode is exposed in the _active_chat_dict
return shape so any UI can render the indicator.
The session still runs through every other surface — events, recorder, tool dispatch. Only the finalize archive write is skipped.
Vision — /see slash
/see # interactive region select (drag)
/see region # same as above
/see full # silent full-screen capture
/see window # click-to-pick window
/see clear # drop pending images without sending
Captures attach to the live session’s pending-images buffer; the
NEXT typed message becomes the prompt. Pair with --vision-model
for the model to actually see the image. See
vision for the full surface.
Skills — /skill slash
/skill # show current mode + list enabled skills
/skill list # all skills with status (enabled, invocations, age)
/skill show <name> # print the body
/skill enable <name> # toggle enabled flag
/skill disable <name>
/skill mode <off|propose|auto>
Skills auto-fire when the user message matches their triggers. See skills for the design.
Tom + the notebook
werbos chat --tom # memoryless persona, only a notebook
Inside any session (Tom or default):
/notebook # show notebook + byte count
/notebook clear # wipe
/notebook edit <text> # replace contents
The notebook is Tom’s only state across turns. Capped at 4 KB.
Every Tom turn emits a KIND_TOM_ATTESTATION event proving
history_length: 0. See personas for the
compliance angle.
Mission scaffolding — /goal and /dream
/goal shapes long-running work; /dream is the wishful
“someday-maybe” rung. Phases + status give background agents
structured input to answer “which ticket moves an active goal
forward?”
/goal # list active goals
/goal new <text> # create a new goal
/goal retire <id> # graveyard, not delete
/dream # list dreams
/dream new <text> # create
Goals + dreams persist as JSON in mission/<id>.json. The
graveyard pattern (retired_at field, never deleted) keeps the
diff history honest — git log mission/ answers “what did I
commit to and when did I let it go?”
Background tasks — /tasks
/tasks # list pending + running tasks
/tasks status <id> # detail for one task
/tasks cancel <id> # mark cancelled
Tasks live in werbos.tasks.TaskStore (SQLite, optimistic-lock
CAS via a version column). The asyncio runner yields to
foreground turns — when you start chatting, the runner backs off
until the AI turn-lock releases. See
background tasks for the design.
Budget gate — /budget
Generic per-agent cost caps. Trips emit warden Alerts.
/budget # show current caps + spend
/budget set <agent> <amount> # change a cap
/budget reset <agent> # reset spend
Background agents call BudgetGate.check_or_pause() before
spending; on BudgetExceeded they transition to waiting_human
with a retry_after_utc so the next-day re-attempt has a
deterministic trigger.
Reminders — /schedule
One-shot scheduled reminders with relative-duration parsing.
/schedule in 30m remind me to check the build
/schedule at 17:00 wrap up the day
/schedule in 2h dogfood the html persona
/schedule list # what's queued
/schedule cancel <id>
Powered by werbos.schedule.ScheduleStore + werbos serve’s
background sweep. Reminders fire as foreground notifications; if
you’re mid-chat, they queue until the next prompt.
Dogfood loop — /regressions and /label
/label good # mark the last assistant turn good
/label bad <reason> # mark bad (the dogfood-replay agent reads this)
/regressions # show recent regressions surfaced by the replay agent
The replay agent re-runs bad-labeled turns through the current
model nightly and surfaces /regressions items when the new
result is better than the original — the chat-archive quality-
feedback loop.
CLI flags
The full set is werbos chat --help; the subset that matters for
day-to-day:
# persona surface
werbos chat --persona-name html # packaged persona by slug
werbos chat --persona-file PATH # load persona from disk
werbos chat --tom # memoryless persona
werbos chat --mirror 87 # character / voice ratio (0-100)
werbos chat --character-file PATH # override the always-full 13%
# tools
werbos chat --tools calculator # opt-in tools
werbos chat --no-shell # disable shell tool (default leash)
werbos chat --confirm-shell # prompt before each shell call
werbos chat --shell-yolo # shell with no confirms (dangerous)
# vision
werbos chat --vision-model llama3.2-vision:11b
werbos chat --vision-host http://... # vision model on a different host
werbos chat --vision-prompt "..." # override the default vision prompt
# memory + context
werbos chat --memory-dir ~/notes # custom memory dir
werbos chat --no-memory # disable memory entirely
werbos chat --project-context-file PATH
werbos chat --no-project-context # skip .werbos.md walk
# session shape
werbos chat --private # don't archive
werbos chat --backend mlx --adapter PATH # MLX with a LoRA adapter
werbos chat --max-tokens 8192 # context budget
# archive
werbos chat --archive-dir ~/... # custom archive dir
werbos chat --archive-format json # alternative to .pfm
Quit tokens
The REPL accepts a generous set of “I’m done” tokens:
:q :quit :exit quit exit bye Q
Ctrl-D # EOF
Ctrl-C # interrupt; finalizes the archive cleanly
A second Ctrl-C during archive finalization escapes with a clean
(interrupted; archive may be incomplete) message — no traceback.
See also
- Personas — the voice + character + user.md composition
- Skills — auto-firing knowledge injection
- Vision —
/see+ the vision provider - Background tasks —
/tasks, runner, budget gate