dld-kit 1.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Jimmy Utterström
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,420 @@
1
+ # DLD Kit — Decision-Linked Development
2
+
3
+ Stop AI agents from breaking code they don't understand.
4
+
5
+ > [!NOTE]
6
+ > Early development — APIs, file formats, and skill interfaces may change.
7
+
8
+ ---
9
+
10
+ AI agents write code confidently. They just don't know *why* your code looks the way it does. That retry logic tuned for a specific API's rate limiting? That validation step catching a production-only edge case? Those decisions live in Jira tickets, Slack threads, and departed engineers' heads. DLD aims to fix this with an **append-only decision log** and `@decision(DL-XXX)` annotations that link code directly to the reasoning behind it. When an agent encounters an annotation, it reads the decision *before* modifying anything. DLDs primary focus is to connect context to code in a highly visible and directly accessible way, avoiding guesswork & git or JIRA archeology to retrieve core business context. Ensuring absolute, immediate, correctness of the produced software is however *not* within the core scope of DLD; for that you will need to combine it with sound general test & validation practices.
11
+
12
+ ## Install
13
+
14
+ Requirements: Node.js 20+ and git. `gh` is optional; `/dld-reindex` uses it to check open PRs.
15
+
16
+ Each channel below installs the same skills. They differ in which agents they reach, how the always-on rule gets into the agent's context, and how you update.
17
+
18
+ | Channel | Agents | Installs into | Always-on rule | Update with |
19
+ |---|---|---|---|---|
20
+ | [`npx dld-kit init`](#npx-dld-kit-init) | Claude Code, Antigravity, Codex, Cursor, OpenCode, Pi | The project, committed | Written by `init` | `npx dld-kit@latest update` |
21
+ | [Claude Code plugin](#claude-code-plugin) | Claude Code | Your user profile | SessionStart hook | `claude plugin marketplace update dld-kit`, then `claude plugin update dld@dld-kit` |
22
+ | [Codex and Copilot CLI plugins](#codex-and-copilot-cli-plugins) | Codex, Copilot CLI | Your user profile | dld-init skill | Codex's plugin manager; `copilot plugin update` |
23
+ | [Pi package](#pi-package) | Pi | Your user profile, or the project with `-l` | dld-init skill | `pi update npm:dld-kit` |
24
+ | [`npx skills` / `gh skill`](#npx-skills-or-gh-skill) | Any agent those tools support | The project, or your user profile with `-g` | dld-init skill | `npx skills update` / `gh skill update` |
25
+ | [Manual copy](#manual-copy) | Any Agent Skills harness | Wherever you copy them | dld-init skill | Copy again |
26
+
27
+ ### `npx dld-kit init`
28
+
29
+ Run in the root of a git repository:
30
+
31
+ ```bash
32
+ npx dld-kit init
33
+ ```
34
+
35
+ This writes:
36
+
37
+ - `dld.config.yaml`, `decisions/records/` and `decisions/INDEX.md`
38
+ - the `dld-*` skills for each selected agent: `.claude/skills/` for Claude Code, `.agents/skills/` for the others
39
+ - the always-on rule: `.claude/rules/dld-workflow.md` for Claude Code, `.agents/rules/dld-workflow.md` for Antigravity, and a block between `<!-- dld-kit:start -->` and `<!-- dld-kit:end -->` in `AGENTS.md` (or `CLAUDE.md`) for Codex, Cursor, OpenCode and Pi
40
+
41
+ `init` detects the agents from files in the project (`.claude/`, `.codex/`, `.cursor/`, `opencode.json`, `.pi/`, `AGENTS.md` and so on) and asks you to confirm the list. Options:
42
+
43
+ - `--agent claude,codex`: add agents to the detected ones
44
+ - `--namespaces billing,auth`: one decision directory per namespace (for monorepos)
45
+ - `--yes`: skip the question and use the detected agents plus `--agent`
46
+
47
+ Commit the files. Teammates then need nothing installed.
48
+
49
+ To upgrade, run `npx dld-kit@latest update`. It rewrites the `dld-*` skills and the rule for the agents already installed, and never touches decision records or `dld.config.yaml`. Add `--agent <name>` to install for another agent.
50
+
51
+ ### Claude Code plugin
52
+
53
+ In Claude Code:
54
+
55
+ ```
56
+ /plugin marketplace add jimutt/dld-kit
57
+ /plugin install dld@dld-kit
58
+ ```
59
+
60
+ Then run `/dld-init` in each project. The plugin's SessionStart hook adds the always-on rule to each session in projects that have `dld.config.yaml` and do not already load the rule. `/dld-init` also installs `.claude/rules/dld-workflow.md`, so teammates without the plugin get the rule too.
61
+
62
+ Skills run as `/dld-plan`, or as `/dld:dld-plan` if another skill has the same name. Third-party marketplaces do not auto-update by default. To update:
63
+
64
+ ```bash
65
+ claude plugin marketplace update dld-kit
66
+ claude plugin update dld@dld-kit
67
+ ```
68
+
69
+ ### Codex and Copilot CLI plugins
70
+
71
+ Both install the portable skills from the repository root, with no hook.
72
+
73
+ ```bash
74
+ codex plugin marketplace add jimutt/dld-kit # then install dld from /plugins in Codex
75
+ copilot plugin marketplace add jimutt/dld-kit
76
+ copilot plugin install dld@dld-kit
77
+ ```
78
+
79
+ Then run the dld-init skill in each project for the config and the rule. For Copilot CLI it installs the rule as for Codex.
80
+
81
+ ### Pi package
82
+
83
+ ```bash
84
+ pi install npm:dld-kit # for your user
85
+ pi install -l npm:dld-kit # for this project (.pi/settings.json)
86
+ ```
87
+
88
+ Run `/skill:dld-init` in each project for the config and the rule. Update with `pi update npm:dld-kit`.
89
+
90
+ ### `npx skills` or `gh skill`
91
+
92
+ ```bash
93
+ npx skills add jimutt/dld-kit
94
+ gh skill install jimutt/dld-kit --all
95
+ ```
96
+
97
+ Install all the skills. If you pick some with `--skill`, include `dld-common`: it holds the `dld` CLI the other skills run. Then run the dld-init skill in each project for the config and the rule. Update with `npx skills update` or `gh skill update`.
98
+
99
+ `npx skills` puts the files in `.agents/skills/` and links them from `.claude/skills/` for Claude Code. `dld update` refuses to write through those links; keep updating with `npx skills update`.
100
+
101
+ ### Manual copy
102
+
103
+ Copy the `dld-*` directories from [`skills/`](skills/) into your agent's skills directory, or from [`.claude/skills/`](.claude/skills/) into a project's `.claude/skills/` for Claude Code. Include `dld-common`. Then run the dld-init skill for the config and the rule.
104
+
105
+ ### Combining channels
106
+
107
+ Channels can be combined. These combinations need care:
108
+
109
+ - **A user-level plugin or package, plus skills committed in the project for the same agent.** The agent sees each skill twice, possibly at different versions. In Claude Code, run the plugin's copy as `/dld:dld-plan`.
110
+ - **Skills for Claude Code and for an `.agents/skills/` agent in one project.** OpenCode and Cursor read both `.claude/skills/` and `.agents/skills/`. OpenCode 2.x loads the `.agents/skills/` copy; OpenCode 1.x and Cursor may load either. Both copies work.
111
+ - **`dld update` and `npx skills` on the same skills.** `dld update` refuses symlinked skills and warns when `skills-lock.json` lists `dld-*` skills. Update those skills with one tool.
112
+
113
+ ### Agents
114
+
115
+ | Agent | Skills (`dld init`) | Always-on rule (`dld init`, `/dld-init`) | Run a skill |
116
+ |---|---|---|---|
117
+ | Claude Code | `.claude/skills/` | `.claude/rules/dld-workflow.md` | `/dld-plan` |
118
+ | Antigravity | `.agents/skills/` | `.agents/rules/dld-workflow.md` | Ask for the dld-plan skill |
119
+ | Codex | `.agents/skills/` | Block in `AGENTS.md` | Ask for the dld-plan skill |
120
+ | Cursor | `.agents/skills/` | Block in `AGENTS.md` | Ask for the dld-plan skill |
121
+ | OpenCode | `.agents/skills/` | Block in `AGENTS.md`, or `CLAUDE.md` if there is no `AGENTS.md` | Ask for the dld-plan skill |
122
+ | Pi | `.agents/skills/` | Block in `AGENTS.md`, or `CLAUDE.md` if there is no `AGENTS.md` | `/skill:dld-plan` |
123
+ | Copilot CLI | Plugin only | Block in `AGENTS.md` (installed as for Codex) | Ask for the dld-plan skill |
124
+
125
+ A new block goes into `AGENTS.md` if it exists, else into `CLAUDE.md` if that exists, else into a new `AGENTS.md`. Codex and Cursor read only `AGENTS.md`: when the block ends up in `CLAUDE.md`, `dld install-rule` warns and says how to move it.
126
+
127
+ The examples below use Claude Code's `/dld-plan` form. In other agents, name the skill instead, e.g. "use the dld-plan skill to plan the retry feature".
128
+
129
+ ## Get started
130
+
131
+ ### New feature or change
132
+
133
+ Use `/dld-plan` to break it down into decisions, then implement:
134
+
135
+ ```
136
+ /dld-init # Bootstrap DLD in your repo (run once)
137
+ /dld-plan # Break it down into decisions interactively
138
+ /dld-adjust DL-001 # Refine decisions if details change before implementing
139
+ /dld-implement DL-001 # Implement each decision (or batch related ones)
140
+ /dld-snapshot # Generate overview docs from the decision log
141
+ ```
142
+
143
+ For a small, isolated change (a bug fix, a single design choice), `/dld-decide` records one decision directly without the planning step.
144
+
145
+ ### Existing codebase
146
+
147
+ Use `/dld-retrofit` to generate decisions from code that already exists:
148
+
149
+ ```
150
+ /dld-init # Bootstrap DLD in your repo (run once)
151
+ /dld-retrofit # Analyze code, generate decisions and annotations
152
+ /dld-snapshot # Generate overview docs from the decision log
153
+ ```
154
+
155
+ This works as a standalone "document this codebase" action. You get structured decision records, code annotations, and a generated system overview. From there you can adopt the full workflow, or just re-run `/dld-audit-auto` and `/dld-snapshot` on a schedule to keep documentation in sync.
156
+
157
+ ### Working in a team
158
+
159
+ When multiple developers draft decisions in parallel, two of them can end up picking the same `DL-NNN` ID. Once one of those PRs lands on the base branch, the other can't rebase cleanly — the colliding decision file path appears in both histories.
160
+
161
+ ```
162
+ /dld-reindex # Renames the local draft(s) to the next free ID,
163
+ # rewrites @decision annotations and cross-references,
164
+ # squashes the branch into a single rebase-clean commit
165
+ ```
166
+
167
+ Run this before rebasing onto an updated base. The skill resolves the ID against the base branch and, when `gh` is installed and authenticated, also against open PRs so the new IDs don't collide with someone else's in-flight work.
168
+
169
+ ## How it works
170
+
171
+ DLD is implemented as a set of AI agent skills following the [Agent Skills](https://agentskills.io) open standard.
172
+
173
+ ### The decision record
174
+
175
+ Each decision is a markdown file with YAML frontmatter:
176
+
177
+ ```markdown
178
+ ---
179
+ id: DL-008
180
+ title: "Use exponential backoff for payment gateway retries"
181
+ timestamp: 2026-02-15T09:20:00Z
182
+ status: accepted
183
+ supersedes: [DL-002]
184
+ amends: []
185
+ tags: [payments, resilience]
186
+ references:
187
+ - path: src/payments/gateway.ts
188
+ symbol: retryWithBackoff
189
+ ---
190
+
191
+ ## Context
192
+ The payment gateway occasionally returns 503s under load. Our initial
193
+ fixed-interval retry (DL-002) caused retry storms that made things worse.
194
+
195
+ ## Decision
196
+ Use exponential backoff with jitter, capped at 30 seconds, max 5 attempts.
197
+
198
+ ## Rationale
199
+ Exponential backoff prevents retry storms. Jitter avoids thundering herd
200
+ when multiple requests fail simultaneously...
201
+
202
+ ## Consequences
203
+ Failed payments take longer to resolve (up to ~60s worst case)...
204
+ ```
205
+
206
+ ### The code annotation
207
+
208
+ ```typescript
209
+ // @decision(DL-008)
210
+ function retryWithBackoff(fn: () => Promise<Response>): Promise<Response> {
211
+ // ...
212
+ }
213
+ ```
214
+
215
+ When an AI agent encounters this annotation, it reads the decision before modifying the code. If the planned change conflicts with the decision, it tells you and suggests recording a new decision.
216
+
217
+ ## How DLD compares to spec-driven development
218
+
219
+ There are great spec-driven tools out there ([Spec Kit](https://github.blog/ai-and-ml/generative-ai/spec-driven-development-with-ai-get-started-with-a-new-open-source-toolkit/), [OpenSpec](https://openspec.dev/), [Kiro](https://kiro.dev/)) and they work well for many teams, especially for structured greenfield development. If they fit your workflow, use them.
220
+
221
+ DLD is a different approach for teams that find spec documents hard to maintain over time, or that want decision context embedded closer to the code. It borrows from **event sourcing**:
222
+
223
+ - **Decisions are append-only events** — once accepted, a decision's content is immutable. Metadata (`status`, `references`) can be updated mechanically (e.g., after refactors), but the reasoning is never rewritten. Decisions can be superseded but never edited or deleted. This creates a complete timeline of how the system evolved.
224
+ - **The spec is a derived projection** — generated from the decision log, never manually maintained. Like a read model built from an event stream.
225
+ - **Tight code coupling** — `@decision` annotations in code act as mechanical triggers for AI agents. The decision context lives *where the code is* rather than in a separate document.
226
+
227
+ DLD is designed for long-lived codebases where decisions accumulate, original authors move on, and AI agents need to safely modify code they didn't write. If that sounds like your situation, give it a try.
228
+
229
+ ## Skills
230
+
231
+ The table uses Claude Code's slash form; in Pi use `/skill:<name>`, and in other agents ask for the skill by name.
232
+
233
+ | Skill | Purpose |
234
+ |-------|---------|
235
+ | `/dld-init` | Bootstrap DLD in a repository (run once) |
236
+ | `/dld-decide` | Record a single decision interactively |
237
+ | `/dld-plan` | Break down a feature into multiple grouped decisions |
238
+ | `/dld-implement` | Implement proposed decisions — writes code, adds annotations, updates status |
239
+ | `/dld-adjust` | Adjust or update existing decisions — handles permission gating and correct intent interpretation |
240
+ | `/dld-lookup` | Query decisions by ID, tag, code path, or keyword |
241
+ | `/dld-status` | Overview of the decision log — counts, recent decisions, run tracking |
242
+ | `/dld-audit` | Scan for drift between decisions and code |
243
+ | `/dld-audit-auto` | Autonomous audit — detects drift, fixes issues, opens a PR (for scheduled/CI use) |
244
+ | `/dld-snapshot` | Generate SNAPSHOT.md (detailed reference) and OVERVIEW.md (narrative synthesis with diagrams) |
245
+ | `/dld-retrofit` | Bootstrap decisions from an existing codebase (broad or detailed mode) |
246
+ | `/dld-reindex` | Resolve decision ID collisions with the base branch (and open PRs) before rebasing — renames colliding local drafts, rewrites annotations and cross-references, squashes branch commits into a rebase-clean reindex commit |
247
+
248
+ ### Active workflow
249
+
250
+ The core DLD loop: record decisions via `/dld-decide` or `/dld-plan`, implement them with `/dld-implement`, and the framework maintains tight coupling between the decision log and code through `@decision` annotations. `/dld-audit` periodically checks for drift, and `/dld-snapshot` regenerates the derived specification.
251
+
252
+ <img width="3180" height="2100" alt="DLD high-level workflow overview showing the decision log, code annotations, generated specification, and drift detection" src="https://github.com/user-attachments/assets/fc8b7804-10ce-439b-ba0c-1f431a26a46e" />
253
+
254
+ ### Passive mode
255
+
256
+ For teams that want living documentation without changing how they work. Run `/dld-init` and `/dld-retrofit` once to bootstrap, then schedule `/dld-audit-auto` and `/dld-snapshot` to run automatically (e.g. nightly via CI). The audit detects unreferenced code changes, infers new decisions, and back-annotates the code — all without developers invoking any DLD commands during their normal workflow.
257
+
258
+ <img width="2880" height="2760" alt="DLD passive mode showing scheduled automation that keeps decisions and docs in sync without workflow changes" src="https://github.com/user-attachments/assets/36bba4e1-e8eb-4390-a484-f18f54638fa1" />
259
+
260
+ > [!NOTE]
261
+ > DLD doesn't include a scheduler. How you trigger the automated runs is up to you — [Claude Code's built-in cron support](https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md#2171), a CI pipeline step, or any other external scheduler all work.
262
+
263
+ ## Project structure
264
+
265
+ ### Flat mode (default)
266
+
267
+ ```
268
+ dld.config.yaml
269
+ decisions/
270
+ INDEX.md # Auto-generated decision index
271
+ SNAPSHOT.md # Detailed per-decision reference
272
+ OVERVIEW.md # Narrative synthesis with Mermaid diagrams
273
+ PRACTICES.md # Development practices manifest (optional)
274
+ .dld-state.yaml # Last audit and snapshot runs
275
+ records/
276
+ DL-001.md
277
+ DL-002.md
278
+ ```
279
+
280
+ ### Namespaced mode (monorepos)
281
+
282
+ ```
283
+ dld.config.yaml
284
+ decisions/
285
+ INDEX.md
286
+ SNAPSHOT.md
287
+ OVERVIEW.md
288
+ PRACTICES.md
289
+ records/
290
+ billing/
291
+ DL-001.md
292
+ DL-004.md
293
+ PRACTICES.md # Namespace-specific practices (optional)
294
+ auth/
295
+ DL-002.md
296
+ DL-005.md
297
+ ```
298
+
299
+ IDs are globally sequential across namespaces, so `@decision(DL-012)` is unambiguous regardless of which namespace it belongs to.
300
+
301
+ ## Status lifecycle
302
+
303
+ ```
304
+ proposed --> accepted --> deprecated
305
+ --> superseded (by a newer decision)
306
+ ```
307
+
308
+ - **proposed** — recorded but not yet implemented (mutable — can be refined during implementation)
309
+ - **accepted** — implemented, code references this decision via annotations (content immutable, metadata like `status` and `references` can be updated)
310
+ - **deprecated** — no longer relevant, no replacement
311
+ - **superseded** — replaced by a newer decision
312
+
313
+ ## Concepts
314
+
315
+ ### Practices manifest
316
+
317
+ An optional `decisions/PRACTICES.md` captures project development conventions (testing approach, code style, architecture patterns). The AI agent reads this when making and implementing decisions — it's most useful during `/dld-implement` where it directly influences how code is written.
318
+
319
+ ### Spec as projection
320
+
321
+ The snapshot and overview documents are **generated, not maintained**. Like event sourcing read models, they're derived from the decision log and can be regenerated at any time. You maintain individual decisions; the framework derives the consolidated view.
322
+
323
+ ### Drift detection
324
+
325
+ `/dld-audit` detects when code and decisions have drifted apart — orphaned annotations, stale references, modified annotated files that may need decision updates.
326
+
327
+ ## Advanced configuration
328
+
329
+ ### Custom snapshot artifacts
330
+
331
+ By default, `/dld-snapshot` generates `SNAPSHOT.md` and `OVERVIEW.md`. You can define additional documentation artifacts in `dld.config.yaml` — each one synthesized from the decision log using a prompt you provide:
332
+
333
+ ```yaml
334
+ snapshot_artifacts:
335
+ - title: ONBOARDING.md
336
+ prompt: >
337
+ Generate a developer onboarding guide that explains the system
338
+ from scratch, assuming no prior context. Focus on what a new
339
+ contributor needs to know to start working.
340
+ - title: API-CONTRACTS.md
341
+ prompt: >
342
+ Summarize all API-related decisions into a single API contract
343
+ reference. Include endpoints, payload shapes, and auth requirements.
344
+ ```
345
+
346
+ Custom artifacts are written to `decisions/` alongside the built-in files and regenerated every time `/dld-snapshot` runs. The `title` serves as both the filename and the document heading. See [project configuration](docs/framework/project-configuration.md#snapshot-artifacts) for details.
347
+
348
+ ### Implementation review
349
+
350
+ `/dld-implement` includes a built-in review step that launches a subagent to check all code changes before finalizing. The reviewer scans for correctness, security issues, type safety problems, and consistency with existing patterns — then reports findings grouped by severity (critical, moderate, minor).
351
+
352
+ This is enabled by default. To disable it, set `implement_review` to `false` in `dld.config.yaml`:
353
+
354
+ ```yaml
355
+ implement_review: false
356
+ ```
357
+
358
+ The review subagent operates with limited context and may flag false positives. The implementing agent uses its own judgment and asks for user input when uncertain about a finding.
359
+
360
+ ## CLI
361
+
362
+ The `dld` command comes with the npm package (`npx dld-kit <command>`, or `npm install --global dld-kit`). The skills carry their own copy in `dld-common/scripts/dld.mjs`, so they never need a global install.
363
+
364
+ | Command | What it does |
365
+ |---|---|
366
+ | `dld init` | Creates `dld.config.yaml`, `decisions/` and `INDEX.md`, then installs the skills and the rule (see [above](#npx-dld-kit-init)) |
367
+ | `dld update` | Rewrites the installed skills and rule with this version; `--agent` adds agents |
368
+ | `dld install-rule --agent <names>` | Installs or refreshes only the always-on rule |
369
+ | `dld session-context --agent <name>` | Prints the rule for a session hook, unless the agent loads it already (used by the Claude Code plugin) |
370
+ | `dld --help` | Lists every command; the rest are the operations the skills run |
371
+
372
+ `init` and `update` refuse to overwrite files from a newer dld-kit unless given `--force`.
373
+
374
+ ## Development
375
+
376
+ ```bash
377
+ bun install # dev dependencies (Bun is a dev tool; the CLI runs on Node 20+)
378
+ npm run lint && npm run typecheck && npm test
379
+ ```
380
+
381
+ Skills and plugin manifests are generated: edit `templates/`, then run `npm run generate` to rebuild `skills/`, `.claude/skills/`, `claude-plugin/` and the manifests. See `CLAUDE.md` for the full set of commands, `docs/releasing.md` for releases, and `docs/plan/v1.md` for the 1.0 plan.
382
+
383
+ ## Further reading
384
+
385
+ - [Concept paper](docs/concept/dld-concept.md) — full rationale and design philosophy
386
+ - [TL;DR](docs/concept/dld-tldr.md) — one-page summary
387
+ - [FAQ](docs/concept/dld-faq.md) — anticipated questions
388
+ - [Decision record format](docs/framework/decision-record-format.md) — schema and field reference
389
+ - [Project configuration](docs/framework/project-configuration.md) — config file and directory layout
390
+ - [Skill design plan](docs/plan/skill-design.md) — detailed skill specifications
391
+
392
+ ## Acknowledgements
393
+
394
+ DLD builds on ideas from several projects and people:
395
+
396
+ - **[Architecture Decision Records (ADRs)](https://www.cognitect.com/blog/2011/11/15/documenting-architecture-decisions)** — Michael Nygard's foundational concept (2011) of recording architectural decisions as structured documents. DLD extends ADRs to cover all decision types and adds code-level coupling.
397
+ - **[Embedded ADRs (e-adr)](https://github.com/adr/e-adr)** — Pioneered `@ADR` annotations in Java code, linking decisions to classes and methods. DLD generalizes this to be language-agnostic and AI-agent-aware.
398
+ - **[Vibe ADR](https://medium.com/devops-ai/vibe-adr-building-with-intention-in-the-age-of-ai-d01e93f36696)** — Owen Zanzal's concept of decision records as "living nodes of intent" for both humans and AI.
399
+ - **[OpenSpec](https://openspec.dev/)** — A change-based specification framework with a delta model and archive workflow. Its brownfield-first philosophy and incremental approach validated key assumptions behind DLD.
400
+ - **[Spec Kit](https://github.blog/ai-and-ml/generative-ai/spec-driven-development-with-ai-get-started-with-a-new-open-source-toolkit/)** — GitHub's spec-driven development toolkit. DLD shares the goal of giving AI agents better context but inverts the relationship — the spec is derived from decisions rather than being the primary artifact.
401
+ - **[IIC Kit (Intent Integrity Kit)](https://github.com/docsforadobe/intent-integrity-for-claude-code)** — A constitution-driven framework for Claude Code that influenced DLD's skill organization and practices manifest approach.
402
+ - **[Kiro](https://kiro.dev/)** — AWS's spec-driven development IDE, part of the broader SDD movement that motivated DLD's alternative approach.
403
+ - **Event Sourcing / CQRS** — The architectural pattern behind DLD's core model: decisions as an append-only event stream, specs as derived projections.
404
+ - **[ADR community resources](https://adr.github.io)** — The comprehensive collection of ADR tools, templates, and guidance that provided a foundation for DLD's record format.
405
+
406
+ See the [concept paper](docs/concept/dld-concept.md) for a detailed discussion of how DLD relates to these approaches.
407
+
408
+ ## Roadmap
409
+
410
+ DLD is under active development. Feature requests and ideas are welcome — [open an issue](https://github.com/jimutt/dld-kit/issues).
411
+
412
+ ## Manual rule setup
413
+
414
+ The always-on rule tells the agent to read a decision before changing code annotated with it. `/dld-init` installs it with `dld install-rule --agent <harness>`, which picks the file the harness loads: `.claude/rules/dld-workflow.md` for Claude Code, `.agents/rules/dld-workflow.md` for Antigravity, or a marked block in `AGENTS.md` (or `CLAUDE.md`) for Codex, Cursor, OpenCode and Pi.
415
+
416
+ To add it by hand instead, copy [`templates/rules/dld-workflow.md`](templates/rules/dld-workflow.md) into one of those files.
417
+
418
+ ## License
419
+
420
+ [MIT](LICENSE)