Saved Prompts, Run on Demand
A procedure is a prompt you write once and run whenever you want — “summarize my open PRs”, “draft my weekly update”, “triage my inbox”. It’s the on-demand twin of a heartbeat job: same execution machinery, but no schedule. A procedure never fires on its own — it sits on the Procedures tab of the Library page until you hit Play or ask Wolffish to run it. (Since v1.0.286 Procedures, Projects and Automations are three tabs of one Library destination rather than three sidebar rows; the phone followed in its v1.0.56.) Saved procedures are plain data — a flat list of{ title, prompt, mode, icon, projectId } records in brain/procedures.json. You never hand-edit that file. Manage them on the Procedures tab, or just talk to Wolffish through its procedures capability (procedure_list, procedure_view, procedure_create, procedure_edit, procedure_delete, procedure_run).
Procedure or Automation?
Procedures and automations are siblings that share one runner but differ on what starts them. Choosing between them comes down to a single question: do you want to re-run this yourself, or have it run on a clock?No timing words? It’s a procedure. “Every day”, “in 15 minutes”, “from now on” → that’s an automation. And a one-off you just want done right now is neither — it’s simply work Wolffish does in the moment; nothing gets saved.
The Procedures Page
Open Procedures from the app menu. Each saved procedure is a card showing its emoji icon, its title, when it was last edited, and a preview of its prompt — most-recently-edited on top. A procedure bound to a project shows the project’s name on its card. The page refreshes itself live when the store changes underneath it — ask Wolffish mid-chat to save or tweak a procedure and its card appears or updates in place.
In the editor, the title is required — it’s the card’s name — and the prompt is a Markdown field. An emoji picker sets the card’s icon (every procedure has one; new ones start as 📋), and a project selector optionally binds the procedure to a project — its runs then execute with the project’s instructions and file list, and their conversations register under the project. Edits save automatically about half a second after you stop typing, so there’s no Save button, just Done.
A procedure carries no state of its own — there’s no “enabled” toggle and no last-run field. It’s inert data: it exists until you delete it, and “running” is a property of the run, not of the saved procedure.
Running a Procedure
Start a run two ways:- Play on the card, or
- Ask Wolffish — “run my morning brief” — which fires it with
procedure_run.
[procedure]) in History, so you can spot whose run it was at a glance — and its conversation is created before the run starts, so you can open it and watch.
Out of your way is not out of reach. Since v1.0.236 a procedure run creates its conversation before it starts rather than surfacing only once it’s over: the row appears in the conversations list immediately with a live processing pulse, you can open it and watch the reply arrive, and the Stop button works on it — the same button, the same gesture, for a run nobody typed. Progress is written to disk while the run works, so quitting or crashing halfway leaves a real transcript instead of a bare prompt, and reopening the app mid-run finds it still going.
- Sealed and isolated. A run is its own conversation — it can’t skew your live chat’s context, hijack its Stop button, or overwrite it. It runs to completion on its own; Wolffish doesn’t sit and wait on the result.
- Up to three at once, coalesced. Procedure runs share the bounded run pool with automations — three concurrent slots. If every slot is busy, the run queues and starts the moment one frees — and asking to run the same procedure again while it’s in flight folds in rather than running twice.
A Procedure Picks Its Own Thinking Level
Since v1.0.310 a procedure no longer inherits whatever thinking level your chat happened to be set to — a saved prompt that only needed a light pass could quietly run at maximum, and a deep one could run at minimum because you had switched the composer down earlier in the day. The effort a job deserves is a property of the job. A thinking switch sits on the card, beside the mode toggle, offering off, on, high and max. New procedures start from the mode you are running right now, so nothing changes until you say so; anything saved before v1.0.310 carries no setting and keeps following your chat exactly as it always did. The levels offered are the ones your selected model actually honours, so a card can never present one the model would silently ignore. The same switch is on the same card on your phone, reading and writing the very same value — one setting seen from two places. From a terminal:Through Wolffish
You rarely need to touch the page — just ask:- “Save this as a procedure” / “make a saved prompt for my weekly update” → creates one
- “What procedures do I have?” → lists them by number and title
- “Show me my inbox-triage procedure” → prints its full prompt
- “Rename it to Weekly Update” / “tweak the prompt to also include GitHub” → edits title and/or prompt
- “Run my morning brief” → fires it now, in the background
- “Delete the PR summary procedure” → removes it (Wolffish confirms first)
procedures capability. You reference a procedure by its number (from the list), its exact title, or its id:
procedure_list— every procedure: number, title, one-line prompt previewprocedure_view— one procedure’s full title and complete promptprocedure_create— save a new one (title + self-contained prompt, optionalmode)procedure_edit— change a title, prompt, and/or mode (omit whichever you keep)procedure_delete— permanently remove one (asks you to confirm)procedure_run— run one now, in a fresh background conversation
Writing a Good Procedure Prompt
A run executes with Wolffish’s full toolset but no chat context, so write the prompt the way you’d brief yourself cold:- Be concrete and self-contained. “Summarize my unread GitHub notifications and append the digest to today’s daily log” beats “summarize them” — there’s no “them” in a fresh conversation.
- Say where the output goes — a file, memory, or you on a channel (
telegram_send/whatsapp_send, only if that channel is connected). - Keep it safe to run unattended. Favor read / summarize / notify over irreversible actions, since a run auto-approves its tool calls. Apply the What to Schedule checklist to a procedure just as you would to a scheduled job.
Where They Live
Procedures are stored as a single JSON file atbrain/procedures.json in your workspace — a flat list, written atomically so it’s never torn by a crash or a concurrent edit. Each record is { id, title, prompt, mode, icon, projectId, createdAt, updatedAt } (projectId only when bound); the list shows the most-recently-edited first. Treat the file as managed data: create, edit, and delete through the page or through Wolffish rather than hand-editing it.
See Also
- Heartbeat & Scheduling — the scheduled counterpart: run a prompt on a timer instead of on demand
- What to Schedule — the safety decision layer for anything that runs unattended, procedures included
- Built-in Capabilities — the
procedurescapability and its tools, listed alongside every other built-in - Self-Authoring Skills — when a repeated workflow deserves a real new tool, not just a saved prompt