Animated Octomind icon — purple pixel-art octopus

Workflows have lived in Octomind for months — multi-step, self-verifying jobs defined in TOML, shipped through taps. The built-in muvon/tap alone carries eighteen of them: review, develop, debug, deep-review, plan-and-build, research, content, and more. But to run one, you had to leave the conversation. Open a terminal, pipe stdin, wait for JSONL to scroll past.

Octomind 0.52.0 shipped on September 11. Its headline closes that gap: tap workflows now run from inside a session — as a slash command, as a background action the agent can call, and as something you can inspect before anything executes.

/workflow, without leaving the chat

The new session command has three shapes:

text
/workflow                  → list installed tap workflows
/workflow review           → show the definition, run nothing
/workflow review add rate limiting to the API → run it; the rest of the line is input

The list shows every workflow your installed taps provide, with descriptions. If nothing's installed, it says so and points at octomind tap user/repo.

A run takes everything after the name as input, verbatim — no quoting rules, no argument parsing. Under the hood it's the same runner you know from the CLI (octomind workflow <name> --format jsonl with your input on stdin), and the command blocks until the workflow finishes, then prints the final step's output and what the run cost.

One honest limitation: only tap workflows resolve by name here. Local TOML paths stay a CLI-only feature — sessions run what your taps ship.

The agent can run workflows too

The tap tool gained a workflow action, and it behaves differently from the slash command on purpose:

jsonl
{
	"action": "workflow",
	"name": "plan-and-build",
	"input": "Add a --json flag to the export command"
}

This one runs detached, in the background. It doesn't contribute to the current turn — the final step's output lands in the session inbox on a later turn, exactly like a specialist reply from tap(action="run"). Changed your mind? tap(action="stop", session=<id>) cancels it. Omit the name and you get the same listing the slash command shows.

We also tightened when the agent is allowed to reach for it. The tool description now says explicitly: only run a workflow when you asked for one by name or clearly referred to it — never pick a workflow on its own to solve the current task, and never sit waiting for a detached run it was told won't finish this turn.

Look before you run

The third piece is small and it's our favorite. Call the tap action with a name but no input:

jsonl
{
	"action": "workflow",
	"name": "deep-review"
}

Nothing runs. You get the workflow's definition back — its steps, and where {{input}} lands in them — with a usage note telling the caller to read the definition, compose the input, and call again. deep-review sweeps a change across five parallel lenses — correctness, security, concurrency, performance, design — then adversarially verifies every finding; before this release, knowing what to put in its input meant opening the TOML. Now the agent (or you, through it) can check what a workflow actually expects before committing a run.

The full behavior is in the workflows guide and the session commands reference.

A spending stop now says it stopped

If you run with a spending threshold, hitting it used to end things quietly — an unattended caller could be left guessing why the session went silent.

0.52.0 surfaces the stop. Threshold stops are now tracked across sessions and ACP requests, reported through ACP and websocket status, and returned to unattended callers with a dedicated CLI status. Request spending state also resets at each request boundary, so one request crossing the line can't smear its accounting into the next.

Background jobs report back

Three fixes in the same vein: nothing that runs detached should vanish.

  • Pending background jobs are reconciled. After the reconcile interval, Octomind reads pending job resources and pushes a timed-out or missing completion status to the inbox — once per job, not repeatedly.
  • Detached job evidence survives. Labels, bodies, and completion order are retained and folded into what the supervisor gate sees, so a job that finished while nobody was looking still counts as completed work.
  • MCP resource updates find their session. When session hints are unavailable, updates fall back to a registry lookup instead of being dropped; unowned or already-delivering updates are logged and skipped.

Also in this release

  • Tool descriptions stopped being billed twice. Tool definitions were duplicated into the system prompt alongside the native tool list. They're not anymore — fewer tokens on every request, same behavior.
  • Compression failures explain themselves. When a fold fails and context stays above the hard ceiling, the error now says why; forced compression with no eligible history is rejected instead of silently doing nothing, and failures reach stderr in JSONL mode. This builds on the 0.51.1 trimming fallback.
  • Supervisor constraint recitation got cleaner. Subjectless fragments from sentence splitting are dropped (decimal points inside requirement sentences survive), wrapped and long listed constraints keep their indentation and wrapping, prose after list items is separated, and incomplete constraint stubs are filtered out.
  • Markdown headings are non-binding. The reciter treats headings as structure, not constraints — your ## Notes section is no longer read back as a rule.

Update to Octomind 0.52.0

bash
curl -fsSL https://octomind.run/install.sh | bash -s -- --version 0.52.0
octomind --version

See the installation guide for other platforms and methods, and the full changelog for everything in this release.

Workflows in sessions need no configuration — install a tap that ships one and type /workflow. If you've been keeping a shell alias around just to pipe stdin into your workflows, this is the release that retires it.