/update-lid
Configure or reconcile a project for linked-intent development (LID). Dispatches on project state — fresh bootstrap, append directives to an existing agent-instructions file (AGENTS.md or CLAUDE.md), add missing mode marker, reconcile convention drift, or run mode transitions.
Claude Code
$ npx -y skills add jszmajda/lid --skill update-lid --agent claude-code
Codex
$ npx skills add jszmajda/lid --skill update-lid -a codex -y
Cursor
$ npx skills add jszmajda/lid --skill update-lid -a cursor -y
Gemini CLI
$ npx skills add jszmajda/lid --skill update-lid -a gemini-cli -y
GitHub Copilot
$ npx skills add jszmajda/lid --skill update-lid -a github-copilot -y
OpenCode
$ npx skills add jszmajda/lid --skill update-lid -a opencode -y
Windsurf
$ npx skills add jszmajda/lid --skill update-lid -a windsurf -y
SKILL.md
update-lid.SKILL.mdname: update-lid
description: "Configure or reconcile a project for linked-intent development (LID). Dispatches on project state — fresh bootstrap, append directives to an existing agent-instructions file (AGENTS.md or CLAUDE.md), add missing mode marker, reconcile convention drift, or run mode transitions. Invoked as /update-lid. For fresh projects with no LID artifacts, users typically invoke /linked-intent-dev (the workflow skill) instead and the workflow's Phase 1 calls this skill's bootstrap branch."
update-lid
Configure or reconcile a project for linked-intent development. Dispatches on project state — do not re-run unconditionally.
Invoked as `/update-lid`. The skill handles both initial bootstrap and ongoing reconciliation; the user's mental model differs ("set me up" vs. "update what we have") but the behavior dispatches on what's detected in the project, not on the user's framing.
Instruction-file anchor
LID's directives, the `## LID` block, and the navigation table live in the project's **agent-instructions file**. Canonically that is **`AGENTS.md`** (the cross-tool convention Cursor and most agents read), with **`CLAUDE.md` a symlink alias** so Claude Code sees the same content. Never branch on which host you are running under.
- **Read** (detect directives, mode, version, drift): use `AGENTS.md` if it exists, otherwise `CLAUDE.md`. With the symlink the two are one file.
- **Fresh bootstrap (write)**: create `AGENTS.md` and a `CLAUDE.md` symlink pointing at it (`ln -s AGENTS.md CLAUDE.md`). Where symlinks are unavailable (e.g. Windows without Developer Mode), instead write a `CLAUDE.md` whose only content is `@AGENTS.md`.
- **Existing project (write)**: update the file that already exists, in place. A project that already uses `CLAUDE.md` keeps it — do not migrate it to `AGENTS.md`.
Below, *the instruction file* means the file chosen by these rules.
Detection signals
Use these exact detection rules — do not guess or use fuzzy matching.
- **LID directives present**: `grep` for the literal strings `"linked-intent-dev"` or `"Linked-Intent Development"` in the instruction file. Either match indicates LID directives are already installed.
- **LID metadata block present**: `grep` for a `## LID` heading in the instruction file. The block carries two bullets:
- `- Mode: {Full|Scoped}` — the project's LID mode. Case-insensitive on the mode name; whitespace tolerated.
- `- Version: {X.Y.Z}` — the `linked-intent-dev` plugin version the project's docs conform to. A project with a `## LID` block but no `- Version:` bullet is treated as **predating versioned conventions (no `- Version:` bullet)** (walk from the start).
- **Project version vs. installed version**: read `- Version:` from the `## LID` block and compare its major.minor with the major.minor of the installed `linked-intent-dev` plugin version (the `version` field in `plugins/linked-intent-dev/.claude-plugin/plugin.json`; the three LID plugins share it, and it is the LID conventions version). When the project's major.minor is lower, the project lags and version-walk applies. A difference in the patch number alone is **not** lag: a patch release asks nothing of a project, so do not walk. When the project's version is **newer** than the installed one — patch included — a newer LID plugin has already worked on this project; stop and suggest the user update their LID plugins (see the dispatch table). If `- Version:` does not read as `X.Y.Z`, read what parses — drop a leading `v`, take a missing patch as `0` (`v1.3` is 1.3.0) — and walk from that version; if nothing parses, treat the project as predating versioned conventions and walk from the start. Never write the installed version over a malformed one without walking: that would silently skip every migration in between.
- **Arrow-maintenance overlay present**: `docs/arrows/` directory exists at the project root.
- **Convention drift**: any of the required directories missing (`docs/intent/`, `docs/high-level-design.md`); the instruction-file directive sections diverge from the current template, including a **malformed `## LID` block** (heading other than a bare `## LID`, mode merged into the heading as `## LID Mode: Full`, a missing `- Mode:` or `- Version:` bullet, a `- Version:` not written as `X.Y.Z`, or stray non-template bullets); a design doc whose `prefix:` frontmatter is an **array** (an unresolved multi-prefix marker — see Version-walk); or a node folder holding **more than its `<node>-design.md` + optional `<node>-specs.md` pair** (an un-promoted sub-LLD left as extra files). The last two are detected independently of version lag — a project already at the installed major.minor still has them re-surfaced by reconcile-conventions, and handled the same way (surfaced with a recommended resolution, never silently left or auto-resolved).
Re-check all detection signals on every invocation. Installing `arrow-maintenance` after initial setup, for example, should trigger an arrow-navigation-row update on the next `/update-lid` run.
State dispatch
Inspect the project and take exactly one of these actions:
| Detected state | Action | |---|---| | No instruction file, no `docs/` | **Full bootstrap** — create required directories, create the instruction file (`AGENTS.md` + `CLAUDE.md` symlink, per *Instruction-file anchor*) with LID directives + `## LID` block (`- Mode:` + `- Version:` set to the installed `linked-intent-dev` version). No workflow-doc offer (see *Workflow-doc vendoring*). | | Instruction file exists, no LID directives | **Append directives** — append the LID directives block to the existing instruction file without overwriting existing content. Create `docs/` if missing. | | LID directives present, no `## LID` block (or no `- Mode:` bullet) | **Add or normalize the LID block** — default mode Full. Keep any `- Version:` the block already records (read it as the version rules above say) and let the version rows below decide whether to
Read more
name: update-lid description: "Configure or reconcile a project for linked-intent development (LID). Dispatches on project state — fresh bootstrap, append directives to an existing agent-instructions file (AGENTS.md or CLAUDE.md), add missing mode marker, reconcile convention drift, or run mode transitions. Invoked as /update-lid. For fresh projects with no LID artifacts, users typically invoke /linked-intent-dev (the workflow skill) instead and the workflow's Phase 1 calls this skill's bootstrap branch."
update-lid
Configure or reconcile a project for linked-intent development. Dispatches on project state — do not re-run unconditionally.
Invoked as `/update-lid`. The skill handles both initial bootstrap and ongoing reconciliation; the user's mental model differs ("set me up" vs. "update what we have") but the behavior dispatches on what's detected in the project, not on the user's framing.
Instruction-file anchor
LID's directives, the `## LID` block, and the navigation table live in the project's **agent-instructions file**. Canonically that is **`AGENTS.md`** (the cross-tool convention Cursor and most agents read), with **`CLAUDE.md` a symlink alias** so Claude Code sees the same content. Never branch on which host you are running under.
- **Read** (detect directives, mode, version, drift): use `AGENTS.md` if it exists, otherwise `CLAUDE.md`. With the symlink the two are one file.
- **Fresh bootstrap (write)**: create `AGENTS.md` and a `CLAUDE.md` symlink pointing at it (`ln -s AGENTS.md CLAUDE.md`). Where symlinks are unavailable (e.g. Windows without Developer Mode), instead write a `CLAUDE.md` whose only content is `@AGENTS.md`.
- **Existing project (write)**: update the file that already exists, in place. A project that already uses `CLAUDE.md` keeps it — do not migrate it to `AGENTS.md`.
Below, *the instruction file* means the file chosen by these rules.
Detection signals
Use these exact detection rules — do not guess or use fuzzy matching.
- **LID directives present**: `grep` for the literal strings `"linked-intent-dev"` or `"Linked-Intent Development"` in the instruction file. Either match indicates LID directives are already installed.
- **LID metadata block present**: `grep` for a `## LID` heading in the instruction file. The block carries two bullets:
- `- Mode: {Full|Scoped}` — the project's LID mode. Case-insensitive on the mode name; whitespace tolerated.
- `- Version: {X.Y.Z}` — the `linked-intent-dev` plugin version the project's docs conform to. A project with a `## LID` block but no `- Version:` bullet is treated as **predating versioned conventions (no `- Version:` bullet)** (walk from the start).
- **Project version vs. installed version**: read `- Version:` from the `## LID` block and compare its major.minor with the major.minor of the installed `linked-intent-dev` plugin version (the `version` field in `plugins/linked-intent-dev/.claude-plugin/plugin.json`; the three LID plugins share it, and it is the LID conventions version). When the project's major.minor is lower, the project lags and version-walk applies. A difference in the patch number alone is **not** lag: a patch release asks nothing of a project, so do not walk. When the project's version is **newer** than the installed one — patch included — a newer LID plugin has already worked on this project; stop and suggest the user update their LID plugins (see the dispatch table). If `- Version:` does not read as `X.Y.Z`, read what parses — drop a leading `v`, take a missing patch as `0` (`v1.3` is 1.3.0) — and walk from that version; if nothing parses, treat the project as predating versioned conventions and walk from the start. Never write the installed version over a malformed one without walking: that would silently skip every migration in between.
- **Arrow-maintenance overlay present**: `docs/arrows/` directory exists at the project root.
- **Convention drift**: any of the required directories missing (`docs/intent/`, `docs/high-level-design.md`); the instruction-file directive sections diverge from the current template, including a **malformed `## LID` block** (heading other than a bare `## LID`, mode merged into the heading as `## LID Mode: Full`, a missing `- Mode:` or `- Version:` bullet, a `- Version:` not written as `X.Y.Z`, or stray non-template bullets); a design doc whose `prefix:` frontmatter is an **array** (an unresolved multi-prefix marker — see Version-walk); or a node folder holding **more than its `<node>-design.md` + optional `<node>-specs.md` pair** (an un-promoted sub-LLD left as extra files). The last two are detected independently of version lag — a project already at the installed major.minor still has them re-surfaced by reconcile-conventions, and handled the same way (surfaced with a recommended resolution, never silently left or auto-resolved).
Re-check all detection signals on every invocation. Installing `arrow-maintenance` after initial setup, for example, should trigger an arrow-navigation-row update on the next `/update-lid` run.
State dispatch
Inspect the project and take exactly one of these actions:
| Detected state | Action | |---|---| | No instruction file, no `docs/` | **Full bootstrap** — create required directories, create the instruction file (`AGENTS.md` + `CLAUDE.md` symlink, per *Instruction-file anchor*) with LID directives + `## LID` block (`- Mode:` + `- Version:` set to the installed `linked-intent-dev` version). No workflow-doc offer (see *Workflow-doc vendoring*). | | Instruction file exists, no LID directives | **Append directives** — append the LID directives block to the existing instruction file without overwriting existing content. Create `docs/` if missing. | | LID directives present, no `## LID` block (or no `- Mode:` bullet) | **Add or normalize the LID block** — default mode Full. Keep any `- Version:` the block already records (read it as the version rules above say) and let the version rows below decide whether to
A structured design-before-code methodology for agentic coding. Stop building the wrong thing — get alignment on what before writing how. Works with any coding agent that reads per-project instructions.
Other skills on lid.
More skills from other plugins.
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
ask-matt
Ask which skill or flow fits your situation. A router over the skills in this repo.
Questions about update-lid.
- Which coding agents can use update-lid?
- update-lid installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

