Workflows as code, not config
A workflow is a TypeScript graph of steps, each owned by an agent, versioned in your repo. No database, no brittle JSON editor.
task manager + workflow engine for coding agents
Local-first task tracking and code-defined workflows that drive your coding agents — Claude Code, pi, or your own — through a real pipeline you can watch, steer, and trust.
macOS · Linux · iOS — open source, MIT

$ autosk create "Wire up the auth flow"
ask-3f9b2c
$ autosk enroll ask-3f9b2c --workflow feature-dev
# the daemon runs the agent pipeline and returns when done or parkedthe problem
Coding agents are powerful but unmanaged. One context, no memory of what's next, no handoff from a coder to a reviewer, no record of why work parked. So you re-prompt, copy-paste context between tabs, and hope the agent transitions cleanly.
The coder and the reviewer are the same forgetful chat. Nothing carries from one role to the next.
Nothing stops an agent looping on the same failing step until it runs out of tokens — or your patience.
Context dies when the tab closes. Why work parked, what came next — none of it lands anywhere.
the model
autosk gives agent work structure (tasks with dependencies), process (workflows written in TypeScript, versioned in your repo), and observability (live transcripts) — while everything stays local and file-based under .autosk/.
Tasks with ids, statuses, blockers, and a free-form metadata bag — a real backlog the engine can pull a ready set from.
A workflow is a TypeScript graph of steps, each owned by an agent. It lives in your repo and evolves in code review.
Every run streams a live transcript — text, thinking, tool calls — to disk and to any attached front end.
30 seconds
Almost no ceremony. Three commands take a one-line task from your head to a running agent pipeline you can observe.
autosk createA task is a small local file with an id, a title, and a status. No project to set up — the first write creates .autosk/.
autosk enrollHand the task to feature-dev (or your own workflow). The daemon picks it up and starts driving it through the graph.
autosk lazyOpen the lazy TUI or the GUI and the agent's transcript streams live into the detail pane — text, thinking, tool calls. Steer or abort mid-turn.
# 1. create a task
$ autosk create "Wire up the auth flow"
ask-3f9b2c
# 2. enroll it into a workflow
$ autosk enroll ask-3f9b2c --workflow feature-dev
# 3. watch the agents run, live
$ autosk lazyPrefer the desktop app? The GUI shows the same live transcript.
why autosk
The selling points lead with what is genuinely new: process as code, agents that hand off with guardrails, and a local file model with nothing to migrate.
A workflow is a TypeScript graph of steps, each owned by an agent, versioned in your repo. No database, no brittle JSON editor.
Agents pass work through comments; every prior comment is injected at the top of the next step's prompt, so context carries between roles.
step_visits caps how many times a task can bounce through a step. After N failed reviews it parks for a human — not forever.
Any run that can't transition cleanly is parked to human. Crash recovery seals interrupted sessions so work always lands somewhere a person can pick it up.
Run each task in its own git worktree (autosk/<task-id>) or a per-task Docker container, so parallel agents never clobber each other's files.
Tasks, comments, and transcripts are plain files under .autosk/. Hand-editable, git-diffable, no migrator, no engine.
A lazygit-style TUI, a native Tauri desktop GUI (+ iPhone/iPad), and the CLI — all pure JSON-RPC clients of one daemon, all streaming the same live transcript.
Ships an agent that drives pi and one that drives Claude Code headless. Swap them inline in a workflow, or write your own.
Drop a .ts file in .autosk/extensions/ or run autosk ext add npm:@scope/pkg. A broken extension shows up in diagnostics instead of crashing the daemon.
up close
workflows as code
A workflow is a TypeScript graph of steps. Each step is owned by an agent and declares its transitions. It lives in your repo, evolves in code review, and carries no hidden state.
export const featureDev = defineWorkflow({
name: "feature-dev",
steps: {
dev: devAgent,
review: reviewAgent, // → dev | docs
docs: docsAgent,
validator: validatorAgent, // → dev | accept
accept: acceptAgent,
cleanup: cleanupAgent,
human: statusStep("human"), // escape hatch
},
});handoffs + guardrails
Agents collaborate by leaving comments; every prior comment is injected at the top of the next step's prompt, so context carries from coder to reviewer. step_visits caps the loop — after N bounces a task parks for a person.
Implemented the auth flow; tests pass locally. Handing to review.
Token refresh isn't covered. Bouncing back to dev for a test.
agent-owned sandboxes
Each task runs in its own git worktree (autosk/<task-id>) or a per-task Docker container. Parallel agents never clobber each other's files — and the engine knows nothing about sandboxes. Agents own them.
$ git worktree list
/repo [main]
/repo/.autosk/wt/... [autosk/ask-3f9b2c]
/repo/.autosk/wt/... [autosk/ask-77c1a0]
# two agents, two branches, zero collisionslive observability
The agent's pi-format transcript streams live into the detail pane of the TUI and the GUI — text, thinking, and tool calls — and persists to disk. Steer it mid-turn, or abort. It's observability you don't get from a headless one-shot.
dev reading src/auth/flow.ts
› thinking: the refresh path needs a guard…
tool edit src/auth/flow.ts +18 −2
tool bash go test ./... ok
Implemented. Transitioning → review.
why not just…
yours to run
Everything is files in your repo — hand-editable and git-diffable.
Interrupted work always lands in human, ready for a person to resume.
Yours to read, fork, and run. No telemetry, no lock-in.
macOS cask; Linux binaries + AppImage/.deb; iOS via TestFlight.
install
One command installs the CLI, the TUI, and the daemon. Then point it at any repo and go.
$ brew install --cask wierdbytes/autosk/autoskSigned + notarized. Bundles the CLI/TUI/GUI and the daemon.
Requires the TestFlight app. Companion to the daemon — watch and steer sessions on the go.
$ make installAny platform. Builds and installs both binaries.
$ autosk lazy