# imp.so — Put our imps to work.

> Ephemeral agents. Durable workflows.

imp is an ephemeral agent framework for the software lifecycle. Each task summons a short-lived agent, an imp, inside a durable workflow. The imp does one job and exits. The workflow remembers everything, survives crashes and retries, and hands off to the next imp.

## Life of an imp

1. **Summon**: A workflow step spawns an imp with only the context and tools that step needs. _(Persists: inputs)_
2. **Work**: The imp plans, edits and runs tests. Every tool call is recorded as a workflow event. _(Persists: event log)_
3. **Checkpoint**: State is committed after each step. A crash or redeploy resumes from the last checkpoint. _(Persists: checkpoint)_
4. **Dismiss**: The imp exits. No idle process, no drifting memory. The workflow keeps the history. _(Persists: outputs)_

## Across the SDLC

- **Plan**: Triage issues, draft specs and break work into steps a single imp can finish.
- **Build**: Write code on a branch, run the suite and iterate until it is green.
- **Review**: Read diffs against the spec and leave line-level comments, or wait on a human.
- **Ship**: Cut the release, watch the rollout and open a rollback when signals turn.

## The imp is temporary. The work is not.

Write the lifecycle as ordinary code. Each step is checkpointed, so a failed test, a crashed worker or a human review that takes three days picks up exactly where it stopped. Imps never hold state between steps, so there is nothing to drift and nothing to clean up.

```ts
// fix-issue.ts (early prototype)
import { workflow, imp } from "@impso/sdk";

export const fixIssue = workflow("fix-issue",
  async (ctx, issue) => {
    const plan  = await imp("planner").run(ctx, { issue });
    const patch = await imp("coder", { tools: ["git", "test"] })
      .run(ctx, { plan });

    await ctx.waitFor("review.approved");

    return imp("shipper").run(ctx, { patch });
  });
```

## Summon your first imp

We are onboarding teams in small batches. Drop us a line and we will send the SDK and a workflow to start from.

- Request early access: [access@imp.so](mailto:access@imp.so)
- General contact: [hello@imp.so](mailto:hello@imp.so)
