One plan for every agent, on every machine.

Skift holds your work as a graph of nodes and what each one waits on, so "what can be worked on right now?" always has an exact answer. Agents and people add, split, claim, and finish work through the same interface: a command line, an API, or an MCP server.

Paste this into your agent
Read https://skift.stead.ing/llms.txt and help me figure out if skift is a good fit for my work.

Running daily. Open source. ISC. Built in Go.Watch the demoRead the docs

A small plan in skift, with one node spelled out at a time
#10#11#15#12#13#16#14#17

#10taskp1

Done

Pick the limit for the public API

For
a person
Waits on
nothing
Unblocks
#12

A question only a person could answer, so it was assigned to one and no agent could claim it. The answer is its result, and the nodes that wait on it receive it.

#11taskp1

Done

Add the limiter middleware

For
any agent
Waits on
nothing
Unblocks
#12, #13

Completed with a result. Skift stores only that a node is open, done, or dropped; everything else here is worked out from the graph when you ask.

#15chorep2

Needs a person

Mint a token for the status page

For
a person
Waits on
nothing
Unblocks
#16

An agent needed a credential, so it filed this for a person and carried on with other work. It stays open, and holds up #16, until someone does it.

#12taskp1

Claimed

Rate-limit the webhook handler

For
an agent, in Claude Code on a laptop
Waits on
#10 (done), #11 (done)
Unblocks
#14

Held under a lease that the agent renews while it works. If the agent dies, the lease runs out and the node goes back to being ready.

#13taskp1

Ready

Rate-limit the export endpoint

For
any agent
Waits on
#11 (done)
Unblocks
#14, #17

Open, nothing it waits on is open, and nobody holds it. skift ready lists it, and the next agent to call skift claim gets it.

#16taskp2

Blocked

Show the limits on the status page

For
any agent
Waits on
#15 (needs a person)
Unblocks
nothing

It waits on #15, which waits on a person. skift explain says so, which is how work stops getting lost behind something nobody is looking at.

#14taskp2

Blocked

Document the limits

For
any agent
Waits on
#12 (claimed), #13 (ready)
Unblocks
nothing

Not ready until both nodes it waits on are done. Nobody marks it blocked or unblocks it: the day #12 and #13 finish, it is ready.

#17spikep3

Held

Load-test the limits

For
any agent
Waits on
#13 (ready)
Unblocks
nothing

Parked by a person, with a reason: the staging database is down. A hold keeps a node out of the ready set until a person releases it, so "not now" doesn't have to pretend to be "low priority".

Watch the demo

Two agents on two machines working one plan, from the first node filed to the last one merged.

What skift holds

Projects
Free to start, for an afternoon's experiment or a year's work, with nothing to configure. Abandoned ones are kept, because a failed spike is often the most useful record you have.
Nodes
One piece of work each. A node's body is the prompt an agent receives, so it is written to be picked up cold.
Dependencies
What has to finish before what. From these skift works out what is ready, so nobody keeps a board up to date.
Leases
A claim that expires unless the agent keeps renewing it. A crashed agent can't hold work hostage.
Work for a person
A password, a purchase, a decision. Assign a node to a person and no agent can claim it. Agents help by researching in nodes of their own, so you arrive with their recommendation waiting.
Holds
Park a node, a branch of the plan, or a whole project, with a reason, and release it when you're ready.
Results
What each finished node produced, handed to the nodes that wait on it.
History
Every change, kept. Nothing is deleted, and search covers all of it.

How skift thinks about work

  • The graph is the truth

    Skift stores only what can't be worked out: whether a node is open, done, or dropped, what it waits on, who holds a lease, and what is parked. Ready, blocked, and claimed are answers it computes each time you ask, so they can't drift from the facts.

    Read more about the graph is the truth

  • A small model

    Nodes, the lines between them, leases, and holds. There is no "epic" type and no "gate" type: an epic is a node with children, and a gate is a node assigned to a person.

    Read more about a small model

  • One door

    One binary is the service, the command line, and the MCP server, and one API is the only way in. Agents and people are held to the same rules, and an agent can't grant another agent permission.

    Read more about one door

Run your first node

  1. Set it up

    Paste this into your agent. It reads how skift is installed and walks you through it: one binary, a PostgreSQL database, and a first project.

    Paste this into your agent
    Read https://skift.stead.ing/llms.txt and help me figure out if skift is a good fit for my work.

  2. Install the plugin

    For Claude Code, from a clone of skift's repository. The plugin registers skift's MCP server and teaches your agent to use it. The plugin's README covers what it needs and how to check it worked.

    claude plugin marketplace add ./plugin
    claude plugin install skift@skift
  3. Use the skill

    Ask your agent what is ready in skift. The skill takes it from there: it finds ready work, claims a node under a lease, and completes it with a result.

  4. Use the command line yourself

    The same things, by hand. Every command prints JSON when it isn't writing to a terminal.

    skift ready
    skift claim
    skift explain '#14'

What skift is not

skift is notWhy notUse instead
Not an orchestrator.It doesn't decide which agent runs what, and it never starts, watches, or messages one.mill
Not a workflow engine.No event ingestion.almanac
Not a chat tool.Agents talk to each other, and to you, somewhere else. Skift holds the work.thicket

Built for distributed agents first. Use it together with your agent of choice or coordinate your fleet.

Works better with

  • mill turns ready nodes into merged changes.

  • almanac turns outside events (CVEs, exceptions, customer feedback, etc.) into ready tasks.

  • thicket lets you talk an idea through with an agent and have it file the nodes.

Don't build it all on your own!

Everyone is building their own version of this and hitting the same walls. Build it with a community instead. Come hang out on Discord, pick up an open task, ask questions, or show us what you've made!

Get startedJoin the Discordskift on GitHub