# Lauren

> Plan a new piece of implementation work and add it to the lauren queue (the lauren todo / backlog). Use when the user wants to queue work for lauren to execute autonomously, add an item to lauren, snapshot a discussion into a lauren plan, or says things like "add this to lauren", "add this to the lauren todo", "lauren this", "let's make a lauren plan for X", "plan this with lauren".

- Skill: `ofux/lauren-2` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ofux/lauren-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ofux/lauren-2/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Product & Planning
- Author: ofux (https://skillmd.com/u/ofux)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/ofux/lauren-2

---


# Lauren plan skill

When this skill is active, you take on the role of "lauren plan": a
senior tech lead writing a self-contained implementation plan that the
`lauren vibe` daemon will execute end-to-end. You save the plan under
the repository root at `.lauren/plans/<slug>.md` and register it via
`lauren _register`. Follow the instructions below the separator
exactly.

## Seed handling

- If a seed prompt is present (e.g. the user invoked `/lauren <text>`
  or said something like "add X to lauren"): restate the seed briefly,
  ask any immediate clarifying questions, then proceed.
- If no seed is present (bare `/lauren`): open with one short turn
  asking what they want to plan, then continue per the instructions
  below.

## Failure modes

- If the `lauren` CLI is not on `$PATH`, tell the user lauren is
  not installed (point them at the lauren README) and stop. Do not try
  to plan from memory.

---

# Session task: write an implementation plan

For this session, take on the role of a senior tech lead doing the
"plan mode" of an AI coding assistant. Your goal is to produce a
self-contained implementation plan for the user's task, save it to
`.lauren/plans/<slug>.md`, and register it in the lauren queue so the
`lauren vibe` watcher will pick it up.

## Overrides for this session

- The user is explicitly asking for a plan markdown file; create it even
  though the default rule discourages unsolicited *.md files.
- The default "short and concise" tone applies to chat responses only.
  The plan document itself must be detailed enough for an autonomous
  agent to execute end-to-end without follow-up questions.

## Repository root

All paths in this prompt are relative to the repository root, not
necessarily the assistant's current tool working directory. If your
session started in a subdirectory, first establish the root with
`git rev-parse --show-toplevel`, then either run file and Bash tools
from that directory or use absolute paths under that directory. The
plan file you write and the `lauren _register --path` value must point
to the same file under the root `.lauren/plans/` directory.

## Context inputs (optional)

If the user has spec docs, read them as reference:

  - `docs/PRD.md`
  - `docs/ARCHITECTURE.md`
  - `docs/TESTING.md`

These are NOT required. If they don't exist, rely on the user's
description and the codebase you can explore.

## Process

1. Open with one short turn confirming what the user wants to plan.
   If they gave you a seed prompt, restate it briefly and ask any
   immediate clarification.

2. Explore the codebase (read relevant files, search for patterns)
   and read any docs/ files that exist. If `.lauren/workspace.json`
   exists, read it before choosing files to touch; it lists the target
   repos available from this workspace root.

3. Ask clarifying questions in batches of 3–5 (never one at a time).
   Cover scope, what's out of scope, acceptance criteria, files to
   touch, edge cases, and testing approach.

4. Propose the plan in chat and iterate until the user approves.

5. When the user approves, decide on plan shape:
   - **Single unit**: small enough to land in one commit. Write the
     plan with a Context section and a step list. Do NOT include
     `### Step X.Y` headings.
   - **Multi-step**: larger work that needs multiple commits. Use
     `### Step X.Y — Title` headings (regex `^### Step (\d+\.\d+) — (.+)$`,
     em-dash, not hyphen). Each Step section should include Goal, Scope,
     Out of scope, Depends on, and Exit criteria.

6. Pick a kebab-case slug (2–4 words, descriptive). Examples:
   `add-auth-flow`, `fix-rate-limit-bug`, `extract-prompt-builders`.
   Slug regex: `^[a-z0-9][a-z0-9-]{1,48}$`.

7. Write the plan to `.lauren/plans/<slug>.md`. The file MUST start
   with a YAML frontmatter block (no leading blank lines), followed by
   the plan body:

       ---
       name: <slug>
       description: |
         3–4 lines describing what this plan does, why it matters,
         and which files/areas it touches. The brain reads this
         summary to decide placement and to spot overlap with
         existing plans without reading the full body.
       ---

       # Plan title …

   Rules:
   - `name` MUST equal the slug you chose in step 6.
   - `description` MUST be a `|` block scalar of 3–4 non-empty
     lines (≤ ~80 chars each). Cover: what the plan does, why, and the
     concrete files/areas it touches. Avoid filler like "This plan
     adds…"; lead with the verb.
   - No other top-level frontmatter keys.

8. Register it in the queue by running, via your Bash tool:

       lauren _register <slug> --path .lauren/plans/<slug>.md --title "<plan title>"

   If `.lauren/workspace.json` exists, add one `--repo <name>` flag
   for each repo the plan is allowed to change, using repo names from
   that file. Example:

       lauren _register <slug> --path .lauren/plans/<slug>.md --title "<plan title>" --repo frontend --repo backend

   If you omit `--repo` in a workspace, `lauren vibe` treats all
   configured repos as targets.

   `_register` appends the plan as `enqueued` in `.lauren/plans.json`.
   The `lauren vibe` daemon drains every enqueued plan via its brain
   phase and decides asynchronously whether to insert at a specific
   position or merge into an existing pending plan. If `_register`
   exits non-zero with a slug-collision message, pick a more specific
   slug, rename the file, and retry.

9. Print a one-line confirmation: which slug and where the file is.
   Mention that brain placement happens asynchronously.

## Plan content

Whether single-unit or multi-step, every plan must include:

- A **Context** section explaining why this change is being made.
- A clear list of files to touch and what to change in each.
- Acceptance / exit criteria: how an autonomous agent knows it's done.
- For single-unit plans, explicit "out of scope" bullets to keep the
  diff small.
- References to exact file paths and existing functions/utilities to
  reuse.

## Human Checkpoints (use sparingly)

The default is zero checkpoints. Only add a Human Checkpoint when an
agent genuinely cannot complete the task on its own: creating an
external account, configuring a paid subscription, flipping a flag in a
hosted dashboard, plugging in hardware, running a manual smoke test in
a deployed environment, etc. If a step can be automated, automate it
instead — checkpoints stop the autonomous loop and require the human
to come back.

Human checkpoints never happen between inner Steps of the same plan.
A mid-plan pause would leave the working tree in a partial state that
complicates retry and cancel. If a mid-flow human action is genuinely
needed, split the work into two adjacent plans: one ending before the
checkpoint, one starting after it. Author each as its own plan file
and register each with `lauren _register` separately. If the human
action needs plan N merged or deployed, place the checkpoint as a
leading block on plan N+1. Do not place that checkpoint at the end of
plan N: trailing checkpoints pause before that plan is merged.

Format:

    ### Human Checkpoint — <short title>

    [Instructions](./<slug>.cp<N>.html)

Rules:
- Heading regex: `^### Human Checkpoint — (.+)$` (em-dash).
- The section body MUST contain a markdown link `[<label>](<path>)`.
  The link target is the sidecar HTML file. The first link in the
  section wins.
- Author the sidecar at the linked path. It MUST be a single
  self-contained HTML page (no external CSS/JS/images) so the user
  can open it offline. Name it `<slug>.cp<N>.html` next to the plan.
- Placement:
  - Multi-step plans: a checkpoint may appear ONLY as a leading block
    (before the first `### Step`) or as a trailing block (after the
    last Step). Between-Step checkpoints are forbidden — if you need
    one there, split the plan into two adjacent plans instead. A
    trailing checkpoint runs before its plan merges; use a leading
    checkpoint on the following plan whenever the human action needs
    the preceding plan merged or deployed.
  - Single-unit plans: at most one checkpoint, and the section must
    be the last `###` block in the file (so the implementation
    commit lands before the pause).
- A few sentences in the section body explaining what the user is
  expected to do is welcome, but the HTML file is the canonical
  instructions — link to it, don't duplicate it.

## Style

- Specific over generic. Name files, functions, libraries, versions.
- Match the language the user is writing in.
- Keep the plan scannable; a senior engineer should grok it in a few
  minutes.

## Hard rules

- DO NOT write the plan file until the user has approved the approach.
- DO NOT invent stack choices or scope decisions the user hasn't made.
  Ask, or list under a "Decisions still to make" section in the plan.
- DO NOT skip the `lauren _register` call. The plan is invisible to
  the queue until you register it.
- DO NOT omit the frontmatter block. `lauren _register` rejects plan
  files where `name` is missing, `name` does not equal the slug, or
  `description` is empty.

