0.14.0
0.14.0 brings durable timers, sandboxed execution, and the diagnostic tools to understand exactly what’s happening inside a running workflow.New Components
<Timer> — Pause a workflow for minutes, hours, or until a specific time
Durable timers that survive process restarts. The workflow engine persists the
timer target to SQLite and automatically resumes execution when it fires — no
long-lived process required.
<Sandbox> — Run untrusted code in isolation
Execute agent-generated code or compute-heavy tasks in isolated environments.
Three backends:
| Runtime | What it does |
|---|---|
| Bubblewrap (default) | Local Linux namespace isolation, near-zero overhead |
| Docker | Container execution with CPU/memory limits and volume mounts |
| Codeplane | Remote VM workspace execution via SSH |
autoAcceptDiffs to skip the gate for fully autonomous
workflows.
<ContinueAsNew> — Prevent unbounded state growth in long-running loops
Replaces the current run with a fresh one, carrying over only the state you
specify. Old run history remains queryable and the continuation lineage is
preserved. Essential for daemon-style loops that would otherwise accumulate
gigabytes of event history.
<Signal> — Inject external data into a running workflow
Pauses execution until structured data arrives via the CLI or HTTP API. The
payload is validated against a Zod schema and passed type-safely to downstream
tasks.
CLI
smithers why — Understand why a run is stuck
A diagnostic engine that calculates exactly what’s blocking a run and tells you
how to fix it.
smithers events — Browse workflow event history
Filter by node, category, or time. Events stream incrementally so you never run
out of memory on large runs.
smithers node — Deep-dive into a single node
Aggregates task attempts, tool calls, schema validation errors, Zod-validated
outputs, and token usage with pricing.
--watch flag
Live-updating views for ps, inspect, and events.
Durability
-
Transactional state writes — Critical SQLite updates are now grouped into
atomic
BEGIN IMMEDIATEtransactions, preventing partial state if a process crashes mid-write. -
Task heartbeats with checkpoints — Long-running tasks can report progress.
If the task crashes, the retry execution receives the last checkpoint via
lastHeartbeatto resume where it left off. -
Auto-resume supervisor — Watches for orphaned runs with stale heartbeats
and resumes them automatically. Atomic DB claim lock prevents concurrent
supervisor races.
Engine & Storage
- Frame delta encoding — 95-99% reduction in
_smithers_framesstorage. Frames are now stored as compact XML structural diffs instead of full snapshots, shrinking multi-gigabyte databases to megabytes.
smithers init Improvements
- Tier-based agent groupings (
cheapFast,smart,smartTool) with automatic provider detection and fallback - Typed
inputSchemaobjects on all seeded workflows ValidationLoopwith feedback injection and convergence detection- New
ticket-kanbanworkflow for parallel ticket implementation in worktrees smithers workflow createscaffold uses the tier-based system- All seeded files use
zod/v4
New Run Statuses
waiting-timer— paused on a durable timercontinued— completed via continue-as-new; a successor run was started
New Metrics
timerDelayDuration, timersCancelled, timersCreated, timersFired,
timersPending, dbTransactionDuration, dbTransactionRetries,
dbTransactionRollbacks, sandboxActive, sandboxBundleSizeBytes,
sandboxCompletedTotal, sandboxCreatedTotal, sandboxDurationMs,
sandboxPatchCount, sandboxTransportDurationMs
Error Codes
- Added:
RUN_NOT_FOUND,NODE_NOT_FOUND,INVALID_EVENTS_OPTIONS,SANDBOX_BUNDLE_INVALID,SANDBOX_BUNDLE_TOO_LARGE,TASK_HEARTBEAT_TIMEOUT,HEARTBEAT_PAYLOAD_TOO_LARGE,HEARTBEAT_PAYLOAD_NOT_JSON_SERIALIZABLE - Removed:
PROMPT_EXISTS,PROMPT_MDX_INVALID,TICKET_EXISTS,TICKET_NOT_FOUND