[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7CTJ5CVTYAFS70W4X4JDQJK":3,"skill-same:01M7CTJ5CVTYAFS70W4X4JDQJK":58},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":30,"commitSha":31,"skillDirectory":32,"forksCount":14,"repositoryHtmlUrl":33,"repositoryHomepageUrl":34,"ownerHtmlUrl":35,"ownerBlogUrl":36,"ownerDescription":6,"updatedAt":37,"install":38,"resources":51},"01M7CTJ5CVTYAFS70W4X4JDQJK","documents",null,"Lyngon conventions for a repository's steering documents (INTENT.md, .claude\u002FCLAUDE.md, the rule files under .claude\u002Frules\u002F, CONCEPTS.md) and for README.md, at the root and in packages. Invoke before writing or editing one of them.","lyngon\u002Fdevkit","lyngon","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F70928830?v=4","01M7CTHVD57GT6VR6Y5SES6GKR","Lyngon","01M7CTHVDSGGTXSY9S7M5MA8RA",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Flyngon\u002Fdevkit\u002Fblob\u002Fmain\u002Fplugins\u002Fconventions\u002Fskills\u002Fdocuments\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: documents\ndescription: Lyngon conventions for a repository's steering documents (INTENT.md, .claude\u002FCLAUDE.md, the rule files under .claude\u002Frules\u002F, CONCEPTS.md) and for README.md, at the root and in packages. Invoke before writing or editing one of them.\nuser-invocable: false\npaths:\n  - \"**\u002FINTENT.md\"\n  - \"**\u002FCONCEPTS.md\"\n  - \"**\u002FREADME.md\"\n  - \"**\u002F.claude\u002FCLAUDE.md\"\n  - \".claude\u002Frules\u002F*.md\"\n---\n\n# Steering documents\n\nA steering document states what the code cannot show, and an agent must follow it.\nOne test decides whether any text enters one:\n\n> Write it down only when a competent agent, seeing just the files it opened, would plausibly contradict it, wrongly, with nothing failing.\n> When a check can fail instead, write the check.\n\n| Path | Holds | Loaded |\n| --- | --- | --- |\n| `INTENT.md` | Product, audiences, done, failure, non-goals, priorities, horizon; in a package, only the sections that differ from the root's | Through the agent file beside it: at the root every session, in a package when an agent works on a file of the package |\n| `.claude\u002FCLAUDE.md`, the agent file | Only imports of the Markdown files directly in its directory, `@..\u002FINTENT.md` among them | At the root every session; in a package when an agent reads, writes or edits a file of the package |\n| `.claude\u002Frules\u002F\u003Cname>.md` | One repository principle, or one rule that has no check yet | At launch without `paths:`, otherwise when a matching file is read or edited |\n| `CONCEPTS.md` | Terms | On demand, unless the agent file of its directory imports it |\n| `docs\u002Fdecisions\u002F\u003Cname>.md` | One decision record | On demand, and through `discover:why` |\n\n## Rules\n\n- No `AGENTS.md` exists anywhere, and a `CLAUDE.md` exists only directly in a `.claude\u002F` directory, at the repository root or in a package.\n- An agent file holds only lines of the form `@..\u002F\u003Cname>.md`, each naming a tracked Markdown file directly in the directory that holds its `.claude\u002F`, such as `INTENT.md`, `CONCEPTS.md` or `README.md`.\n- Every agent file holds the line `@..\u002FINTENT.md`. Other imports are allowed, and nothing writes one by default.\n- An agent file holds no free text, at the root either. A principle goes into a rule file under `.claude\u002Frules\u002F`, with `paths:` when it concerns part of the tree.\n- The organization's principles are in no repository. They come from the `principles` plugin, which the agent reads through `principles:index`, and are never copied in.\n- `README.md` is not a steering document. It says how to use the repository and links to `INTENT.md` instead of repeating it.\n- A rule file is named after its principle in kebab-case. It holds that name as its heading, the statement in one or two sentences, then one sentence starting `Why:`. It carries a `paths:` field whenever the principle concerns part of the tree, such as one package.\n- A rule file with `paths:` imports nothing with `@`, because Claude Code loads an imported file at launch whatever `paths:` say.\n- `INTENT.md` has the sections Product, For whom, Done means, Failure means, Non-goals and Horizon, stays within 50 lines, and changes only when the purpose changes.\n- `INTENT.md` may have one more section, `## Priorities`, between `## Non-goals` and `## Horizon`, with each line of the form \"X over Y\". A line enters only after an owner answered a real question from an agent, so the section starts absent.\n- `CONCEPTS.md` follows [CONCEPTS-FORMAT.md](CONCEPTS-FORMAT.md), and a decision record follows the `decision-record` conventions.\n- A repository-specific convention too long for a rule file goes to `docs\u002Fconventions\u002F\u003Ctopic>.md`, and the message of its check or a rule file points there.\n\n## Package documents\n\nA package gets an `INTENT.md` only when it has its own audience, its own done or failure, or its own non-goals that the root does not state.\nThat file uses the root's section names and holds only the sections that differ, and the package's `README.md` links to it.\n\nA package with its own `INTENT.md` holds `.claude\u002FCLAUDE.md`, with the line `@..\u002FINTENT.md`, and no other package holds an agent file.\nClaude Code loads the agent file and the intent it imports when an agent reads, writes or edits a file of the package, and a session that works on no file of the package does not carry them.\nAn agent that changes the package only through the shell, or searches it only with Grep and Glob, does not load them.\nA package with a `CONCEPTS.md` and no `INTENT.md` gets no agent file, and its glossary stays on demand.\n\n## Checks\n\nChecked by the `validate-documents`, `markdownlint` and `prose-lint` hooks.\n\n## With the Lyngon structure\n\n`validate-structure` checks that every app and library has a `README.md`.\n","# Steering documents\n\nA steering document states what the code cannot show, and an agent must follow it.\nOne test decides whether any text enters one:\n\n> Write it down only when a competent agent, seeing just the files it opened, would plausibly contradict it, wrongly, with nothing failing.\n> When a check can fail instead, write the check.\n\n| Path | Holds | Loaded |\n| --- | --- | --- |\n| `INTENT.md` | Product, audiences, done, failure, non-goals, priorities, horizon; in a package, only the sections that differ from the root's | Through the agent file beside it: at the root every session, in a package when an agent works on a file of the package |\n| `.claude\u002FCLAUDE.md`, the agent file | Only imports of the Markdown files directly in its directory, `@..\u002FINTENT.md` among them | At the root every session; in a package when an agent reads, writes or edits a file of the package |\n| `.claude\u002Frules\u002F\u003Cname>.md` | One repository principle, or one rule that has no check yet | At launch without `paths:`, otherwise when a matching file is read or edited |\n| `CONCEPTS.md` | Terms | On demand, unless the agent file of its directory imports it |\n| `docs\u002Fdecisions\u002F\u003Cname>.md` | One decision record | On demand, and through `discover:why` |\n\n## Rules\n\n- No `AGENTS.md` exists anywhere, and a `CLAUDE.md` exists only directly in a `.claude\u002F` directory, at the repository root or in a package.\n- An agent file holds only lines of the form `@..\u002F\u003Cname>.md`, each naming a tracked Markdown file directly in the directory that holds its `.claude\u002F`, such as `INTENT.md`, `CONCEPTS.md` or `README.md`.\n- Every agent file holds the line `@..\u002FINTENT.md`. Other imports are allowed, and nothing writes one by default.\n- An agent file holds no free text, at the root either. A principle goes into a rule file under `.claude\u002Frules\u002F`, with `paths:` when it concerns part of the tree.\n- The organization's principles are in no repository. They come from the `principles` plugin, which the agent reads through `principles:index`, and are never copied in.\n- `README.md` is not a steering document. It says how to use the repository and links to `INTENT.md` instead of repeating it.\n- A rule file is named after its principle in kebab-case. It holds that name as its heading, the statement in one or two sentences, then one sentence starting `Why:`. It carries a `paths:` field whenever the principle concerns part of the tree, such as one package.\n- A rule file with `paths:` imports nothing with `@`, because Claude Code loads an imported file at launch whatever `paths:` say.\n- `INTENT.md` has the sections Product, For whom, Done means, Failure means, Non-goals and Horizon, stays within 50 lines, and changes only when the purpose changes.\n- `INTENT.md` may have one more section, `## Priorities`, between `## Non-goals` and `## Horizon`, with each line of the form \"X over Y\". A line enters only after an owner answered a real question from an agent, so the section starts absent.\n- `CONCEPTS.md` follows [CONCEPTS-FORMAT.md](CONCEPTS-FORMAT.md), and a decision record follows the `decision-record` conventions.\n- A repository-specific convention too long for a rule file goes to `docs\u002Fconventions\u002F\u003Ctopic>.md`, and the message of its check or a rule file points there.\n\n## Package documents\n\nA package gets an `INTENT.md` only when it has its own audience, its own done or failure, or its own non-goals that the root does not state.\nThat file uses the root's section names and holds only the sections that differ, and the package's `README.md` links to it.\n\nA package with its own `INTENT.md` holds `.claude\u002FCLAUDE.md`, with the line `@..\u002FINTENT.md`, and no other package holds an agent file.\nClaude Code loads the agent file and the intent it imports when an agent reads, writes or edits a file of the package, and a session that works on no file of the package does not carry them.\nAn agent that changes the package only through the shell, or searches it only with Grep and Glob, does not load them.\nA package with a `CONCEPTS.md` and no `INTENT.md` gets no agent file, and its glossary stays on demand.\n\n## Checks\n\nChecked by the `validate-documents`, `markdownlint` and `prose-lint` hooks.\n\n## With the Lyngon structure\n\n`validate-structure` checks that every app and library has a `README.md`.\n",{"name":5,"paths":24,"description":7,"user-invocable":20},[25,26,27,28,29],"**\u002FINTENT.md","**\u002FCONCEPTS.md","**\u002FREADME.md","**\u002F.claude\u002FCLAUDE.md",".claude\u002Frules\u002F*.md","main","7d4c29d5ef25e4bff96b8ed951739cd04811984b","plugins\u002Fconventions\u002Fskills\u002Fdocuments","https:\u002F\u002Fgithub.com\u002Flyngon\u002Fdevkit","https:\u002F\u002Fwww.lyngon.com","https:\u002F\u002Fgithub.com\u002Flyngon","www.lyngon.com","2026-11-14 19:00:56",{"source":8,"skillName":5,"commands":39,"prompt":49,"zipAvailable":50},[40,43,46],{"tool":41,"command":42},"npx","npx skills add lyngon\u002Fdevkit --skill documents",{"tool":44,"command":45},"bunx","bunx skills add lyngon\u002Fdevkit --skill documents",{"tool":47,"command":48},"pnpm","pnpm dlx skills add lyngon\u002Fdevkit --skill documents","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flyngon\u002Fdevkit\u002Fblob\u002Fmain\u002Fplugins\u002Fconventions\u002Fskills\u002Fdocuments\u002FSKILL.md",true,[52],{"path":53,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":56,"sourceHtmlUrl":57},"CONCEPTS-FORMAT.md","REFERENCE","参考文档",37,"https:\u002F\u002Fgithub.com\u002Flyngon\u002Fdevkit\u002Fblob\u002Fmain\u002Fplugins\u002Fconventions\u002Fskills\u002Fdocuments\u002FCONCEPTS-FORMAT.md",[59,66,73,80,87,94],{"skillNo":60,"name":61,"nameZh":6,"description":62,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":65,"publishedAt":19},"01M7CTNRE8KXX2CG9Q2XYYBTDE","unslop","Remove AI writing patterns from prose and give it a voice. Use whenever writing or editing non-code text (docs, READMEs, decision records, posts, commit messages, PR descriptions), before handing it over, and on request: \"unslop\", \"humanize\", \"make this sound human\", \"clean up this writing\", \"edit for voice\", \"de-AI this text\".","https:\u002F\u002Fgithub.com\u002Flyngon\u002Fdevkit\u002Fblob\u002Fmain\u002Fplugins\u002Fwriting\u002Fskills\u002Funslop\u002FSKILL.md",[],[],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":72,"publishedAt":19},"01M7CTNHG9ENS5D6GCA9283V08","technical","Layered technical-writing standard: Diátaxis structure, Google developer style sentences, STE instruction rules, Global English syntax. Use before writing or reviewing docs, RFCs, readmes, PR descriptions, or commit messages, every time, however small the document.","https:\u002F\u002Fgithub.com\u002Flyngon\u002Fdevkit\u002Fblob\u002Fmain\u002Fplugins\u002Fwriting\u002Fskills\u002Ftechnical\u002FSKILL.md",[],[],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":19},"01M7CTND9T9J9P1TR6RRDVAXF4","simpler","Restate the last message in plain human language, with no jargon. Use when the reader did not follow the last message and says so: \"bro\", \"say that simpler\", \"in plain words\", \"no jargon\".","https:\u002F\u002Fgithub.com\u002Flyngon\u002Fdevkit\u002Fblob\u002Fmain\u002Fplugins\u002Fwriting\u002Fskills\u002Fsimpler\u002FSKILL.md",[],[],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":19},"01M7CTN8H1N39FCQ67AM7WD4S2","init","Set up a fresh repository, or adopt an existing one, to Lyngon conventions. Interviews the owner relentlessly about purpose, failure modes, audiences, stack and constraints, then writes INTENT.md, .claude\u002FCLAUDE.md, README.md, CONCEPTS.md, decision records, devenv, git hooks, CI and every package in the kind-first Lyngon layout. User-invoked only.","https:\u002F\u002Fgithub.com\u002Flyngon\u002Fdevkit\u002Fblob\u002Fmain\u002Fplugins\u002Frepo\u002Fskills\u002Finit\u002FSKILL.md",[],[],{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":19},"01M7CTN36H4AR1GATK3KE5E85X","add-package","Create a package in a Lyngon repository in the directory its kind decides (apps\u002F, libs\u002F, contracts\u002F, tools\u002F, infra\u002F), with README.md, devenv.nix and the layer lint, and register it in its workspace and devenv. Use whenever a new app, service, CLI, library, adapter, contract, schema, tool, infra module or environment is needed, including when one feature needs several packages. Never create a package by hand.","https:\u002F\u002Fgithub.com\u002Flyngon\u002Fdevkit\u002Fblob\u002Fmain\u002Fplugins\u002Frepo\u002Fskills\u002Fadd-package\u002FSKILL.md",[],[],{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":19},"01M7CTMZE95Q1FJWKJRB8WCX4E","index","The index of Lyngon's principles, one line per principle saying when it applies and what it demands, each with a file under references\u002F. Invoke before work that takes judgment, such as a design choice, a refactor, a bug fix, a test, a measurement, a script, a document or a question to the owner; then read the file of each principle that applies.","https:\u002F\u002Fgithub.com\u002Flyngon\u002Fdevkit\u002Fblob\u002Fmain\u002Fplugins\u002Fprinciples\u002Fskills\u002Findex\u002FSKILL.md",[],[]]