Issue Lifecycle logo

Issue Lifecycle

Organization
swamp-club
issue-lifecycle

Drive the @swamp/issue-lifecycle model for interactive issue triage and plan iteration against swamp-club lab issues. Use when the user wants to triage a swamp-club issue, generate an implementation plan, or iterate on a plan with feedback. Also handles retroactive lifecycle creation for ad-hoc work via "prepare to ship", carrying several issues through one lifecycle when the same work fixes them (link_issue), and shipping a duplicate of an already-shipped issue with its fix instead of closing it (mark_duplicate). Triggers on "triage issue", "triage #", "issue plan", "review plan", "iterate plan", "approve plan", "issue lifecycle", "prepare to ship", "ready to ship", "link issue", "link #", "also fixes #", "fixed by the same change", "mark duplicate", "duplicate of #", "same issue as #", "close as duplicate".

Overview

Publisherswamp-club
Repositoryswamp
Skill nameissue-lifecycle
Stars
647
Forks
46
Bundled files
7
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 7 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by swamp-club on GitHub. Read the source before you install it.

Installation

Install the Issue Lifecycle AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/swamp-club/swamp/tree/main/.claude/skills/issue-lifecycle
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/swamp-club/swamp.git /tmp/swamp
mkdir -p .claude/skills
cp -r /tmp/swamp/.claude/skills/issue-lifecycle .claude/skills/issue-lifecycle
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Issue Lifecycle in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Issue Lifecycle on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Issue Lifecycle is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Issue Lifecycle Skill

Interactive triage and implementation planning for swamp-club lab issues using the @swamp/issue-lifecycle extension model. This skill drives the model conversationally — the human steers, you execute.

The model operates on swamp-club lab issue numbers. Every step records a structured lifecycle entry against the issue in swamp-club and transitions its status as the work progresses. There is no GitHub integration — the issue must already exist in swamp-club before you start.

Core Principles

Always use the installed swamp binary. Every swamp command in this skill must invoke the installed binary from $PATH — never deno run dev or any other Deno-based invocation. Before running any swamp command, verify the binary exists:

which swamp

If which swamp fails (binary not found), stop immediately and tell the human: "The swamp binary is not installed or not on your PATH. Install it before continuing." Do not fall back to deno run dev.

Never auto-approve. Always stop and show the plan to the human. Always ask for feedback. Only call approve when the human explicitly says to proceed.

A failed method means the upstream record was not written. Lifecycle entries are the audit trail, so a method fails rather than reporting success over a dropped entry. The error names the step, the HTTP status, and swamp-club's own reason.

  • Most methods roll back. The local phase is unchanged, so fix the cause and re-run the same method. Re-running is safe: a status transition that already landed is recognised as a no-op.
  • notify does not roll back. If it fails after the ripple posted, the phase has already advanced — do not re-run it, or the contributor is thanked twice. Continue with summarize.
  • post_attestation warns instead of failing. The attestation itself is the durable record, and re-running would file a duplicate for the same commit. The warning names the attestation id.

The most common cause is payload text the server refuses: until swamp-club#2284 is fixed, it rejects any string value that begins with a dollar sign, and any prose containing a double-quote immediately followed by one — a quoted shell variable in a code snippet, for example. Rephrase the text (name the variable in words) and re-run.

Prepare to Ship (Ad-Hoc Work)

When the user says "prepare to ship" (or "ready to ship", "prepare to ship this work"), they have completed ad-hoc work that is not linked to an existing issue. The lifecycle still needs a tracking issue for verification and attestation to flow through.

This flow is fully automatic — do not ask for confirmation at each step.

Steps

  1. Summarize the work. Inspect the current branch: git log main..HEAD, git diff --stat main..HEAD. Build a title and summary from the commits and changed files.

  2. Create a tracking issue in swamp-club. There is no swamp issue create — pick the type-specific subcommand (feature, bug, or security). The CLI cannot file platform issues, so classify ad-hoc work as feature or bug:

    swamp issue feature --title "<title>" --body "<summary of work done>" --json

    Read number from the JSON output — that is <N> in every command below. --body requires --title; without both, the command opens an editor.

  3. Start the lifecycle:

    swamp model @swamp/issue-lifecycle method run start issue-<N> --input issueNumber=<N>
  4. Fast-forward to implementing:

    swamp model @swamp/issue-lifecycle method run fast_forward issue-<N> \
      --input summary="<summary>" \
      --input steps='<JSON array of plan steps>' \
      --input testingStrategy="<testing approach>"

    Build the plan steps retroactively from the actual work — each step should describe a logical unit of change with its files. The testing strategy should reflect how the changes were validated.

  5. Transition to verifying. fast_forward leaves the lifecycle at implementing, and post_attestation is only accepted from verifying — so this transition is required, not optional:

    swamp model @swamp/issue-lifecycle method run verify issue-<N> \
      --input commit=$(git rev-parse HEAD) \
      --input branch=$(git branch --show-current)
  6. Proceed with normal verification. Read references/verification.md and continue from its step 2 (Run Verification) through verification_passed → post_attestation → link_pr. Step 1 there is the verify call just made — do not repeat it.

  7. Drive the lifecycle to done. link_pr only reaches pr_open — it is not the end of the flow, and stopping there leaves the issue parked. Walk the rest: pr_merged (→ releasing), ship or complete (→ notify), notify or skip_notify (→ summarizing), then summarize (→ done). See "Closing Out a Shipped Issue" below for the exact commands.

Example

User: prepare to ship this work

Agent:
1. git log main..HEAD → "Add retry logic to HTTP client"
2. swamp issue feature --title "Add retry logic to HTTP client" --body "..." --json
   → {"number": 247, ...}
3. swamp model @swamp/issue-lifecycle method run start issue-247 --input issueNumber=247
4. swamp model @swamp/issue-lifecycle method run fast_forward issue-247 \
     --input summary="Add exponential backoff retry to HTTP client" \
     --input steps='[{"order":1,"description":"Add retry wrapper","files":["src/http/client.ts"]}]' \
     --input testingStrategy="Unit tests for retry logic added in client_test.ts"
5. swamp model @swamp/issue-lifecycle method run verify issue-247 \
     --input commit=$(git rev-parse HEAD) --input branch=$(git branch --show-current)
6. Proceed to verification (references/verification.md, from step 2)...

Several Issues, One Piece of Work

When the work for one issue also fixes another, or an issue duplicates one that is already fixed, never close the extra issue. Read references/linked-issues.md and use link_issue on the primary issue's lifecycle, or mark_duplicate on the duplicate's own lifecycle when the other issue has already shipped. Linked issues move through status with the primary issue and ship with it.

Repository Configuration

This skill reads repo-specific conventions from agent-constraints/ at the repository root. If these files exist, they customize how each phase works:

  • agent-constraints/adversarial-dimensions.md — review criteria and dimensions
  • agent-constraints/planning-conventions.md — analysis and documentation requirements
  • agent-constraints/triage-conventions.md — codebase exploration and bug reproduction
  • agent-constraints/code-conformance-dimensions.md — code vs plan review criteria
  • agent-constraints/implementation-conventions.md — build, verify, and PR conventions
  • agent-constraints/verification-conventions.md — verification workflow configuration

If these files do not exist, the skill uses generic defaults documented in each reference file.

Lifecycle Phases

Each phase has detailed instructions in a reference file. Read only the reference you need for the current phase.

Phase 1: Triage (steps 1–4)

Read references/triage.md when starting a new triage or resuming an issue in the triaging phase. Covers: starting the lifecycle (using direct type execution to auto-create the model and fetch issue context in one command), reading the codebase, classifying the issue, and reproducing bugs.

The first command to run is always the existence check:

swamp data query 'modelName == "issue-<N>" && name == "state-main"' --select content --json
  • If results has an entry, the model already exists — check results[0].phase and go to the "Resuming a Session" table below. Do NOT call start.
  • If results is empty (model or data not found), the issue is new — run:
swamp model @swamp/issue-lifecycle method run start issue-<N> --input issueNumber=<N>

This fetches the issue from swamp-club and writes context automatically — do NOT use gh issue view or any other mechanism to fetch issue data.

Phase 2: Planning (steps 5–7)

Read references/planning.md after triage is complete. Covers: generating the implementation plan, applying repo-specific planning conventions, and presenting to the human.

Phase 3: Adversarial Review & Iteration

Read references/adversarial-review.md immediately after every plan or iterate call — no exceptions. Planning and adversarial review are always paired: you never present a plan without running the review first. Covers: challenging the plan across repo-specific dimensions, verifying against the codebase, recording findings, presenting to the human, and the iteration loop until approval.

Phase 4: Implementation & Code Conformance Review

Read references/implementation.md after plan approval. Covers: signalling implementation start and doing the work.

After the code is written, read references/code-conformance-review.md before verification. This adversarially compares the implemented code against the approved plan. Deviations are expected — they just need a documented justification.

Phase 4a: Verification Loop

Read references/verification.md after code conformance review is complete. This runs the same checks as CI (lint, test, compile, agent reviews) as host workflows before the PR opens. The agent iterates — fixing failures and re-verifying — until all steps pass. Only then can a PR be created.

Phase 5: Contributor Notification

After ship or complete, run notify. It checks the author against the swamp-club team roster itself: team members are skipped, anyone else is thanked with a ripple. Never check membership with GitHub — swamp-club handles are not GitHub logins.

swamp model @swamp/issue-lifecycle method run notify issue-<N>

If the lookup fails, notify posts nothing and stays in notify. Ask the human, then re-run it, add --input force=true to thank the author anyway, or run skip_notify.

Phase 6: Session Summary

After notify or skip_notify, the lifecycle enters the summarizing phase. Read references/implementation.md — section 7 covers the summary step.

Restate the original problem and the delivered outcome in plain language, then close out the lifecycle. This final check ensures the work actually addressed the issue. All three inputs are required — summarize fails validation without them:

swamp model @swamp/issue-lifecycle method run summarize issue-<N> \
  --input originalProblem="<problem>" \
  --input deliveredOutcome="<outcome>" \
  --input outcomeMet=true

If the lifecycle carries linked issues, summarize also requires linkedOutcomes, with one entry per linked issue — see references/linked-issues.md.

Classification Types

The triage method classifies issues into one of four types (matching swamp-club):

  • bug — something is broken or behaving incorrectly
  • feature — a request for new functionality or enhancement
  • platform — admin-only platform infrastructure work
  • security — security vulnerability or hardening work

platform is accepted by the triage method, but the CLI can neither file nor switch an issue to it — swamp issue bug|feature|security and swamp issue edit --type accept only the other three. Classify an existing issue as platform if it fits; never try to create one.

Two additional classification details are captured in the classification record but do NOT map to separate swamp-club types:

  • isRegression — set to true when the bug previously worked. Implies type: bug. Look for signals like "this used to work", "stopped working after", or git history showing recent changes to the affected code.
  • Low-confidence classifications — if you cannot classify the issue confidently, use confidence: low and populate clarifyingQuestions. Do not guess the type — ask the human before calling triage.

Reviewing Plan History

To review a specific plan version:

swamp model @swamp/issue-lifecycle method run review issue-<N> --input version=<V>

To see all model data:

swamp model output search issue-<N> --json

Resuming a Session

If the human comes back to an in-progress issue, check the current phase:

swamp data query 'modelName == "issue-<N>" && name == "state-main"' --select content --json

Read results[0].phase from the response. Do NOT call start to resume — start unconditionally resets the phase to triaging, destroying progress.

Use this table to determine what to do next:

PhaseAction
triagingRead references/triage.md; duplicate of a shipped issue → mark_duplicate
classifiedRead references/planning.md
plan_generatedRead references/adversarial-review.md
approvedRead references/implementation.md
implementingRun code conformance review, then verify
verifyingRead references/verification.md
pr_openWait 3 min, then check PR: pr_merged if merged, pr_failed if failed
pr_failedFix the issue, then link_pr (new PR) or implement (major rework)
releasingCheck release build: ship when done, or complete as fallback
notifyRun notify — it thanks external authors and skips team members by itself
summarizingCall summarize — needs originalProblem, deliveredOutcome, outcomeMet
doneNothing to do — lifecycle is complete

The canonical phase list lives in the TRANSITIONS constant in extensions/models/_lib/schemas.ts.

Closing Out a Shipped Issue

When a PR has already merged and the lifecycle just needs to be marked done:

  1. Check the current phase:
    swamp data query 'modelName == "issue-<N>" && name == "state-main"' --select content --json
    The phase is results[0].phase.
  2. If the phase is implementing, link the PR first:
    swamp model @swamp/issue-lifecycle method run link_pr issue-<N> --input url=<PR URL>
  3. If the phase is pr_open, record the merge:
    swamp model @swamp/issue-lifecycle method run pr_merged issue-<N>
  4. If the phase is releasing, ship it:
    swamp model @swamp/issue-lifecycle method run ship issue-<N>
  5. If the phase is notify, run notify (see Phase 5).
  6. If the phase is summarizing, record the summary:
    swamp model @swamp/issue-lifecycle method run summarize issue-<N> \
      --input originalProblem="<problem>" --input deliveredOutcome="<outcome>" --input outcomeMet=true
  7. For quick close-out, complete still works from implementing, pr_open, or releasing (transitions to notify, then notify/skip_notify, then summarize).

Key Rules

  1. Never use gh to fetch issue data. All issue context comes from swamp-club via the start method — not from GitHub. Issue authors are swamp-club handles, so never compare them against GitHub logins.
  2. Never skip the feedback loop. Always show the plan. Always ask.
  3. Never call approve without explicit human approval.
  4. Persist everything through the model. Don't just have a conversation — call the model methods so state survives context compression and sessions.
  5. swamp-club is the source of truth. Every state transition posts a lifecycle entry and transitions the issue status in swamp-club automatically. You don't need to manually update the issue.
  6. Read the codebase thoroughly before generating the plan. The plan should reference specific files, functions, and test paths.
  7. Follow the planning conventions for this repository. Read agent-constraints/planning-conventions.md if it exists.
  8. Never open a PR without asking first. Present the changes summary and wait for the human to confirm before creating the pull request.
  9. File unrelated issues immediately. If you discover a bug, code smell, or problem during investigation that is NOT related to the current issue, file it as a new swamp-club issue. Do not try to fix it in the current work span — keep the scope focused. An issue the same work genuinely fixes is related: link it with link_issue rather than closing it.
  10. Never use deno run dev for swamp commands. All swamp invocations must use the installed binary. Run which swamp first — if it's missing, stop and tell the human.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Issue Lifecycle AI skill do?

Drive the @swamp/issue-lifecycle model for interactive issue triage and plan iteration against swamp-club lab issues. Use when the user wants to triage a swamp-club issue, generate an implementation plan, or iterate on a plan with feedback. Also handles retroactive lifecycle creation for ad-hoc work via "prepare to ship", carrying several issues through one lifecycle when the same work fixes them (link_issue), and shipping a duplicate of an already-shipped issue with its fix instead of closing it (mark_duplicate). Triggers on "triage issue", "triage #", "issue plan", "review plan", "iterate...

Why use Issue Lifecycle on TypingMind?

Because you install it once and use it with any model. Issue Lifecycle is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Issue Lifecycle in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/swamp-club/swamp/tree/main/.claude/skills/issue-lifecycle. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Issue Lifecycle?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Issue Lifecycle?

As many as you like. As long as a model supports skills, you can use Issue Lifecycle with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Issue Lifecycle AI skill free?

It is published on GitHub by swamp-club. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇