Spec Kitty Charter Doctrine
spec-kitty/spec-kitty
Run charter interview, generation, context, and sync workflows for project governance in Spec Kitty 3.x.
Audit coherence across an arrow of intent by running two parallel fresh Claude sessions — one reconstructs code from a single EARS, the other reconstructs the EARS from stripped code — then…
$ npx skills add jszmajda/lid --skill bidirectional-differential -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jszmajda/lid bidirectional-differential --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/jszmajda/lid.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/lid-experimental/skills/bidirectional-differential .claude/skills/bidirectional-differential && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "bidirectional-differential" agent skill from https://github.com/jszmajda/lid/tree/main/plugins/lid-experimental/skills/bidirectional-differential into .claude/skills/bidirectional-differential/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bidirectional-differential", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/jszmajda/lid/tree/main/plugins/lid-experimental/skills/bidirectional-differentialType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add jszmajda/lid --skill bidirectional-differential -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jszmajda/lid bidirectional-differential --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jszmajda/lid.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/lid-experimental/skills/bidirectional-differential .agents/skills/bidirectional-differential && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "bidirectional-differential" agent skill from https://github.com/jszmajda/lid/tree/main/plugins/lid-experimental/skills/bidirectional-differential into .agents/skills/bidirectional-differential/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bidirectional-differential", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jszmajda/lid --skill bidirectional-differential -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jszmajda/lid bidirectional-differential --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jszmajda/lid.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/lid-experimental/skills/bidirectional-differential .cursor/skills/bidirectional-differential && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "bidirectional-differential" agent skill from https://github.com/jszmajda/lid/tree/main/plugins/lid-experimental/skills/bidirectional-differential into .cursor/skills/bidirectional-differential/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bidirectional-differential", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/jszmajda/lid.git --path plugins/lid-experimental/skills/bidirectional-differential--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add jszmajda/lid --skill bidirectional-differential -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jszmajda/lid bidirectional-differential --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jszmajda/lid.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/lid-experimental/skills/bidirectional-differential .gemini/skills/bidirectional-differential && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "bidirectional-differential" agent skill from https://github.com/jszmajda/lid/tree/main/plugins/lid-experimental/skills/bidirectional-differential into .gemini/skills/bidirectional-differential/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bidirectional-differential", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install jszmajda/lid bidirectional-differentialInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add jszmajda/lid --skill bidirectional-differential -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jszmajda/lid.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/lid-experimental/skills/bidirectional-differential .github/skills/bidirectional-differential && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "bidirectional-differential" agent skill from https://github.com/jszmajda/lid/tree/main/plugins/lid-experimental/skills/bidirectional-differential into .github/skills/bidirectional-differential/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bidirectional-differential", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jszmajda/lid --skill bidirectional-differential -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jszmajda/lid bidirectional-differential --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jszmajda/lid.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/lid-experimental/skills/bidirectional-differential .opencode/skills/bidirectional-differential && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "bidirectional-differential" agent skill from https://github.com/jszmajda/lid/tree/main/plugins/lid-experimental/skills/bidirectional-differential into .opencode/skills/bidirectional-differential/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bidirectional-differential", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
bidirectional-differentialAudit coherence across an arrow of intent by running two parallel fresh Claude sessions — one reconstructs code from a single EARS, the other reconstructs the EARS from stripped code — then…
Bidirectional Differential is an agent skill from jszmajda/lid. Audit coherence across an arrow of intent by running two parallel fresh Claude sessions — one reconstructs code from a single EARS, the other reconstructs the EARS from stripped code — then classifies the drift between them. Use when the user invokes /differential-audit, asks to audit EARS-to-code drift for a feature or segment, wants a differential round-trip on a specific spec, or reaches Phase 6 code-complete in linked-intent-dev with arrow-maintenance overlay present and a touched-EARS set to consider…
Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files, including reference files (for example `evals/evals.json`, `references/audit-protocol.md` and `references/audit-report-template.md`).
It sits in AI & LLM Engineering. It works with Anthropic API. The repository describes itself as: Linked-Intent Development - a SDD methodology for agentic coding. The licence is MIT.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 831c195. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
claudeFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Bidirectional Differential loads about 2.9k tokens when it runs, and up to ~11k if it reads all its reference files. Until then it costs about 203 tokens; SKILL.md has 1,384 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from jszmajda/lid at commit 831c195, republished under its MIT licence (© jszmajda). 1,384 words, ~2,873 tokens.
.claude/skills/bidirectional-differential/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.This skill runs a bidirectional differential audit on EARS↔code pairs. The audit is advisory — findings concentrate human review on specific cases, and acting on findings is always user-judged. When the audit surfaces drift, the recommended repair path walks the whole arrow: validate intent with the user, then cascade EARS → Tests → Code.
Command mode — user invokes /differential-audit:
Ambient mode — at linked-intent-dev's Phase 6 boundary (code is complete for a change) in a project where arrow-maintenance's overlay exists and ambient triggering is not disabled. Emit one batched prompt listing every EARS the change touched, offering all, none, a comma-separated subset, or skip-arrow. If ambient is disabled in the project's CLAUDE.md (see §Configuration), do not fire.
Ambient mode is advisory: declining, skipping, or any classification outcome MUST NOT block Phase 6 completion.
Before spawning any blind sessions in either mode, verify the arrow-maintenance overlay exists:
docs/arrows/index.yaml present, anddocs/arrows/.If absent, abort with:
Bidirectional differential audits attach to the arrow-maintenance overlay. Run /update-lid and then /arrow-maintenance first to establish the arrow surface this skill extends.
Do not spawn any claude -p sessions and do not write any files when the overlay is absent. This skill is heavier maintenance than arrow-maintenance; a project without the lighter layer in place will not act on this skill's findings either.
The scoping conversation is the first user-facing moment. The audit itself runs without further input once scope is fixed. Full script in references/scoping-conversation.md.
Users describe what they want audited in natural terms — "the login flow", "the billing pipeline", "the scoring rules" — more often than in arrow or LLD names. The scoping conversation interprets those descriptions, maps them to arrows/LLDs in the overlay, and confirms the mapping with the user before moving to EARS-level scope. Then it captures the final EARS set and the runs-per-direction (default 3) and shows a cost estimate before spawning anything.
Do not auto-select EARS. The skill does not have a reliable heuristic for picking which EARS to audit within a chosen arrow — that choice is the user's, and the scoping conversation exists precisely to surface it.
For each scoped EARS, execute the six-step protocol in references/audit-protocol.md. Summary:
*-specs.md files; implementing code from regions annotated with @spec {EARS-ID}. If no @spec points at the EARS, surface a coverage-gap entry and skip this EARS.@spec annotations, EARS ID mentions, vocabulary-echoing identifiers, comments paraphrasing the EARS, test describe/it strings that echo EARS phrasing. See references/audit-protocol.md §Stripping rules. The B-direction session must not be able to reconstruct the EARS by reading it back out of the code.claude -p. Each gets only the EARS text + a one-line codebase description. Task: produce naive implementation.claude -p, concurrent with A-direction. Each gets only the stripped code + a one-line EARS-syntax reminder. Task: reconstruct the EARS.BD-COHERENT, A-ONLY-DRIFT, B-ONLY-DRIFT, BIDIRECTIONAL-DRIFT, INCONSISTENT-BLIND — see references/classification-codes.md for decision rules and worked examples.UNANNOTATABLE — signpost for negative requirements with no production sink (see §Unwanted below).docs/arrows/_experiments/bidirectional-differential/{segment-name}/{EARS-ID}.md using the template in references/audit-report-template.md. Re-running replaces the file (mutation, not accumulation — commit the old audit before re-running if before/after comparison matters).Default N=3. If within-direction runs split 2-vs-1 on the classification-relevant dimension, re-run the affected direction at N=5 and classify on the majority. If the 5-run result still splits or the split shape changes between runs, classify INCONSISTENT-BLIND — don't force a code.
After per-EARS records are written, produce a user summary with per-arrow classification counts, top-priority drift findings across the audited scope, and recommended next steps per §Repair path.
Audit records live in a reserved sibling subtree under arrow-maintenance's root:
docs/arrows/_experiments/bidirectional-differential/{segment-name}/{EARS-ID}.mdDo not mutate existing per-arrow overlay files (docs/arrows/{segment}.md, docs/arrows/index.yaml). Experiment artifacts stay in the reserved subtree so arrow-maintenance's audit loop can ignore them. Retirement of this experiment is rm -rf docs/arrows/_experiments/bidirectional-differential/; promotion is a single move to a core namespace.
LID's arrow is HLD → LLD → EARS → Tests → Code. When the audit surfaces drift, the recommended repair path walks the arrow in order. Every reconciliation recommendation in the audit record (and every finding in the user summary) takes this shape:
The default Action in the audit record (reconcile-EARS, reconcile-code, etc.) names which layer the cascade starts with — but the cascade always walks LLD → EARS → Tests → Code in order, not just the named layer.
@spec annotation for a scoped EARS → emit a coverage-gap entry in the summary; do not spawn blind sessions for that EARS.shall NOT mutate the input) → emit UNANNOTATABLE with a signpost recommending either (a) pair with an unwanted-behavior EARS and a test that asserts the negation — the test carries the @spec, and future audits target the test file — or (b) defer to a sibling absence-audit skill if one exists. Do not force a coherence classification code for such EARS.BD-COHERENT. A false coherent from leaked identifiers is this skill's most dangerous failure mode; the spot-check is the mitigation.Project-level overrides live in CLAUDE.md:
## LID Experimental
bidirectional-differential:
ambient: false # disable the Phase-6 ambient hook for this project
default-runs: 5 # override N=3Absent keys use skill defaults. --runs=N on the command line overrides both per-run.
| Concern | Owner |
|---|---|
Arrow overlay presence, per-segment arrow docs, index.yaml | arrow-maintenance |
EARS authoring, @spec annotation placement, phase cascade | linked-intent-dev |
| Phase 6 ambient trigger surface (this skill emits the prompt; linked-intent-dev sets the phase boundary) | bidirectional-differential (this skill) |
Audit record files under docs/arrows/_experiments/bidirectional-differential/ | bidirectional-differential (this skill) |
| Reconciliation cascade (validate → LLD → EARS → Tests → Code) | linked-intent-dev's phase workflow, triggered by the user after reviewing audit records |
Blind sessions run via claude -p. The Bash tool invocation pattern:
claude -p --output-format json "<prompt-with-only-EARS-or-only-stripped-code>" < /dev/null< /dev/null prevents inherited stdin hangs when spawning in parallel. Parse the JSON output for the assistant message body. Run A-direction and B-direction sessions concurrently via multiple background invocations.
Each session is fresh context. Do not pass additional tools, MCP servers, or project files into the subprocess — the audit depends on the session seeing only what was given.
references/audit-protocol.md — full six-step protocol, stripping rule categories, split-result rule with examples.references/classification-codes.md — decision rules and worked examples for each code; Classification → Action mapping.references/scoping-conversation.md — conversation script: interpreting user descriptions, mapping to arrows, capturing scope and N.references/audit-report-template.md — per-EARS audit-record output template.Test fixtures (3 baseline, more pending) live in evals/evals.json.
© jszmajda, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files (references) in plugins/lid-experimental/skills/bidirectional-differential of jszmajda/lid.
Open the folder on GitHubat commit 831c195
Bidirectional Differential next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Bidirectional Differential this skilljszmajda/lid | 105 | — | ~2.9k | Automated safety check: Pass | MIT | |
| Spec Kitty Charter Doctrinespec-kitty/spec-kitty | 1.7k | — | ~8.5k | Automated safety check: Pass | MIT | |
| Provider Healthnyldn/claude-octopus | 4.2k | 1 repos | ~491 | Automated safety check: Pass | MIT | |
| Claude APIterrense/LilBot-agent | 121 | — | ~155 | Automated safety check: Pass | None | |
| Darwinian EvolverLuciole-Studio/Misaka-Agent | 139 | 2 repos | ~2.1k | Automated safety check: Warn | MIT | |
| Reference SDKparcadei/Continuous-Claude-v3 | 3.9k | 2 repos | ~376 | Automated safety check: Pass | MIT |
spec-kitty/spec-kitty
Run charter interview, generation, context, and sync workflows for project governance in Spec Kitty 3.x.
nyldn/claude-octopus
Starter: one-screen provider health summary — availability, auth method, version drift, and cost posture for every seatable provider
terrense/LilBot-agent
Help with Claude/LLM API usage, models, and integration patterns.
Luciole-Studio/Misaka-Agent
Evolve prompts/regex/SQL/code with Imbue's evolution loop. An agent skill from Luciole-Studio/Misaka-Agent.
parcadei/Continuous-Claude-v3
Check reference SDK implementations using btca ask. An agent skill from parcadei/Continuous-Claude-v3.
cwinvestments/memstack
A skill your agent uses when the user says 'token optimization', 'save tokens', 'context window', 'reduce tokens', 'token stack', or 'TokenStack', or asks about extending context window capacity.
jszmajda/lid
Navigation and audit overlay for linked-intent development. An agent skill from jszmajda/lid.
jszmajda/lid
Bootstrap LID in an existing (brownfield) codebase. An agent skill from jszmajda/lid.
jszmajda/lid
Configure or reconcile a project for linked-intent development (LID).
jszmajda/lid
Review a project's current linked-intent-development (LID) usage against LID's own principles and produce a prioritized report of recommendations for getting more out of the methodology.
jszmajda/lid
Guide for linked-intent development (LID). An agent skill from jszmajda/lid.
Works with
Categories
Audit coherence across an arrow of intent by running two parallel fresh Claude sessions — one reconstructs code from a single EARS, the other reconstructs the EARS from stripped code — then…. Bidirectional Differential is an agent skill from jszmajda/lid. Audit coherence across an arrow of intent by running two parallel fresh Claude sessions — one reconstructs code from a single EARS, the other reconstructs the EARS from stripped code — then classifies the drift between them.
Bidirectional Differential fits situations like: the user invokes /differential-audit; asks to audit EARS-to-code drift for a feature; wants a differential round-trip on a specific spec; reaches Phase 6 code-complete in linked-intent-dev with arrow-maintenance overlay present and a touched-EARS set to consider.
Run `npx skills add jszmajda/lid --skill bidirectional-differential -a claude-code`. Or copy the skill folder (plugins/lid-experimental/skills/bidirectional-differential in jszmajda/lid) into .claude/skills/bidirectional-differential in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jszmajda/lid --skill bidirectional-differential -a codex`. Or copy the skill folder (plugins/lid-experimental/skills/bidirectional-differential in jszmajda/lid) into .agents/skills/bidirectional-differential in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jszmajda/lid --skill bidirectional-differential -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/bidirectional-differential, .gemini/skills/bidirectional-differential, .github/skills/bidirectional-differential and .opencode/skills/bidirectional-differential in your project.
Going by SKILL.md and its folder, Bidirectional Differential needs the command-line tools its instructions call (claude).
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Bidirectional Differential is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.9k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 7.8k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Bidirectional Differential: Spec Kitty Charter Doctrine (spec-kitty/spec-kitty, 1.7k stars), Provider Health (nyldn/claude-octopus, 4.2k stars), Claude API (terrense/LilBot-agent, 121 stars) and Darwinian Evolver (Luciole-Studio/Misaka-Agent, 139 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jszmajda (a GitHub user) maintains it in jszmajda/lid, which has 105 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on October 6, 2026.
Source: jszmajda/lid on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.