[{"data":1,"prerenderedAt":676},["ShallowReactive",2],{"blog-posts":3},[4,282,523],{"id":5,"title":6,"authors":7,"badge":14,"body":15,"date":272,"description":273,"extension":274,"image":275,"meta":276,"navigation":277,"path":278,"seo":279,"stem":280,"__hash__":281},"blog\u002Fblog\u002Fintroducing-pdd-kit.md","Introducing pdd-kit: PDD for coding agents",[8],{"name":9,"description":10,"to":11,"avatar":12},"Itai Gendler","@itai-gendler","https:\u002F\u002Fgithub.com\u002Fitai-gendler",{"src":13,"alt":9},"\u002Fteam\u002Fitai-gendler.png","Launch",{"type":16,"value":17,"toc":265},"minimark",[18,33,40,45,60,66,88,102,113,119,123,136,139,143,166,183,190,196,200,210,248,261],[19,20,21,22,27,28,32],"p",{},"Coding agents write code faster than anyone can explain to them what the product\nis. So they guess, and the guesses ship. That problem is laid out in\n",[23,24,26],"a",{"href":25},"\u002Fblog\u002Fyour-agent-is-guessing","AI is writing code for products it doesn’t understand",",\nand why spec-driven development does not solve it in\n",[23,29,31],{"href":30},"\u002Fblog\u002Fpdd-and-spec-driven-development","SDD describes the change, not the product",".",[19,34,35,39],{},[36,37,38],"strong",{},"Today we are releasing pdd-kit, an open-source implementation of\nProduct-Driven Development (PDD)."," It gives your agent, and your team, one\ndefinition of the product to build from and check against.",[41,42,44],"h2",{"id":43},"what-you-get","What you get",[19,46,47,50,51,55,56,59],{},[36,48,49],{},"A Product Model."," A ",[52,53,54],"code",{},"product-model\u002F"," folder of Markdown files that says what\nyour product does: who it serves, where they reach it, what it keeps, what it\ncan do, and which rules must stay true. ",[36,57,58],{},"It lives beside the code and changes in\nthe same pull requests."," It defines the product, not the implementation, so\ncolors, layout and frameworks stay yours to choose.",[19,61,62,65],{},[36,63,64],{},"Three agent skills"," for Claude Code, Codex, Gemini CLI and more:",[67,68,69,76,82],"ul",{},[70,71,72,75],"li",{},[52,73,74],{},"map"," reads an existing codebase and drafts the model from it.",[70,77,78,81],{},[52,79,80],{},"ideate"," decides the next change with you and writes only what you approve.",[70,83,84,87],{},[52,85,86],{},"verify"," checks the code against the model and works through the gaps with\nyou until the two agree, or until something blocks it.",[19,89,90,93,94,97,98,101],{},[36,91,92],{},"A CLI."," ",[52,95,96],{},"pdd-kit lint"," checks the model's files. ",[52,99,100],{},"pdd-kit view","\nopens the model as a local report that follows your edits.",[19,103,104,107,108,112],{},[36,105,106],{},"Blueprints."," Reviewed Product Models of common products in a\n",[23,109,111],{"href":110},"\u002Fblueprints","public catalog",". Pull one into an empty directory and hand it to\nyour agent.",[19,114,115,116],{},"Every Blueprint is tested the same way: ",[36,117,118],{},"a fresh agent gets the model and the\nwords \"build this\", and has to ship a working product.",[41,120,122],{"id":121},"one-loop-run-on-every-change","One loop, run on every change",[124,125,126],"development-loop",{},[127,128,134],"pre",{"className":129,"code":131,"language":132,"meta":133},[130],"language-text","ideate → implement ⇄ verify\n  ▲                     │\n  └──── next change ────┘\n\nimplement: your agent, your way, in phases\n","text","",[52,135,131],{"__ignoreMap":133},[19,137,138],{},"Ideate and verify with pdd-kit. Your own agent implements, your way.",[41,140,142],{"id":141},"get-started","Get started",[127,144,148],{"className":145,"code":146,"language":147,"meta":133,"style":133},"language-bash shiki shiki-themes pdd-kit-brand-warm pdd-kit-brand-warm material-theme-palenight","npx @itai-gendler\u002Fpdd-kit install\n","bash",[52,149,150],{"__ignoreMap":133},[151,152,155,159,163],"span",{"class":153,"line":154},"line",1,[151,156,158],{"class":157},"sC-r1","npx",[151,160,162],{"class":161},"sPU0x"," @itai-gendler\u002Fpdd-kit",[151,164,165],{"class":161}," install\n",[19,167,168,169,173,174,178,179,32],{},"Then start from where you are: ",[23,170,172],{"href":171},"\u002Fdocs\u002Ffrom-your-repo","existing code",",\n",[23,175,177],{"href":176},"\u002Fdocs\u002Ffrom-an-idea","an idea",", or ",[23,180,182],{"href":181},"\u002Fdocs\u002Ffrom-a-blueprint","a Blueprint",[19,184,185,186,189],{},"To see a real model first, run ",[52,187,188],{},"npx @itai-gendler\u002Fpdd-kit view itai-gendler\u002Fpdd-kit",".\npdd-kit is developed with pdd-kit, and that command opens its own\nProduct Model.",[19,191,192,195],{},[36,193,194],{},"It is MIT licensed and local-first",": no account, no hosted service, nothing to\nbuy. The skills read your code and never run it.",[41,197,199],{"id":198},"what-comes-next","What comes next",[19,201,202,203,209],{},"This is an early release, and the\n",[23,204,208],{"href":205,"rel":206},"https:\u002F\u002Fgithub.com\u002Fitai-gendler\u002Fpdd-kit\u002Fissues",[207],"nofollow","open issues"," are the roadmap:",[67,211,212,218,224,230,236,242],{},[70,213,214,217],{},[36,215,216],{},"More Blueprints"," across different kinds of product, such as a storefront,\na booking app, a project tracker and an API service.",[70,219,220,223],{},[36,221,222],{},"Review model changes as product changes."," A compare mode in the report\nthat shows what a branch changes in the product, not just in the Markdown.",[70,225,226,229],{},[36,227,228],{},"Products that don’t fit one repository."," One product spread across several\nrepositories, and several products in one repository.",[70,231,232,235],{},[36,233,234],{},"KPIs in the model",", so it can say how the product's value is measured.",[70,237,238,241],{},[36,239,240],{},"GitHub issues linked to the model",", so tracked work keeps its product\ncontext.",[70,243,244,247],{},[36,245,246],{},"Talk to your agent from the report",", without switching back to the\nterminal.",[19,249,250,251,255,256,32],{},"Try it on a repository you know well and compare the model it drafts with the\none in your head. Where they disagree, and where pdd-kit gets in your way,\n",[23,252,254],{"href":205,"rel":253},[207],"open an issue",". Contributions,\nBlueprints included, are welcome through pull requests on\n",[23,257,260],{"href":258,"rel":259},"https:\u002F\u002Fgithub.com\u002Fitai-gendler\u002Fpdd-kit",[207],"itai-gendler\u002Fpdd-kit",[262,263,264],"style",{},"html pre.shiki code .sC-r1, html code.shiki .sC-r1{--shiki-light:#972600;--shiki-default:#972600;--shiki-dark:#FFCB6B}html pre.shiki code .sPU0x, html code.shiki .sPU0x{--shiki-light:#1D5700;--shiki-default:#1D5700;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":133,"searchDepth":266,"depth":266,"links":267},2,[268,269,270,271],{"id":43,"depth":266,"text":44},{"id":121,"depth":266,"text":122},{"id":141,"depth":266,"text":142},{"id":198,"depth":266,"text":199},"2026-10-07","PDD gives agents and humans a shared product model that is git-tracked, reviewable, and verifiable. Open source and MIT licensed.","md","\u002Fbrand\u002Fheroes\u002Fproduct-model-wide.webp",{},true,"\u002Fblog\u002Fintroducing-pdd-kit",{"title":6,"description":273},"blog\u002Fintroducing-pdd-kit","hjHlt7b1DmF-M3DN6dkXyfEDNurfprG5uZiymKyRZPQ",{"id":283,"title":31,"authors":284,"badge":287,"body":288,"date":516,"description":517,"extension":274,"image":518,"meta":519,"navigation":277,"path":30,"seo":520,"stem":521,"__hash__":522},"blog\u002Fblog\u002Fpdd-and-spec-driven-development.md",[285],{"name":9,"description":10,"to":11,"avatar":286},{"src":13,"alt":9},"Engineering",{"type":16,"value":289,"toc":509},[290,310,314,317,378,381,385,391,394,397,401,411,414,421,425,428,488,491,495,501,504],[19,291,292,293,173,298,303,304,309],{},"Spec-driven development works. If you use ",[23,294,297],{"href":295,"rel":296},"https:\u002F\u002Fopenspec.dev",[207],"OpenSpec",[23,299,302],{"href":300,"rel":301},"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fspec-kit",[207],"spec-kit"," or ",[23,305,308],{"href":306,"rel":307},"https:\u002F\u002Fkiro.dev",[207],"Kiro",", you\nknow the shape: describe the change before you build it, plan it, break it into\ntasks, and let the agent work against a written target instead of one sentence\nin a chat. This post is not an argument against it. It is about where it falls\nshort, and what it does not cover properly: the product.",[41,311,313],{"id":312},"what-these-tools-keep","What these tools keep",[19,315,316],{},"None of them throws the work away when it ships.",[67,318,319,331,353],{},[70,320,321,323,324,327,328,32],{},[36,322,297],{}," keeps ",[52,325,326],{},"openspec\u002Fspecs\u002F"," as the source of truth for how the system\nbehaves today. Each change carries a proposal, a design, tasks, and delta\nspecs. Archiving merges the deltas into the main specs and files the rest\nunder ",[52,329,330],{},"changes\u002Farchive\u002F",[70,332,333,335,336,339,340,343,344,347,348,32],{},[36,334,302],{}," gives each feature its own directory with ",[52,337,338],{},"spec.md",", ",[52,341,342],{},"plan.md","\nand ",[52,345,346],{},"tasks.md",", plus a project constitution. Whether those files stay living\nor become history is\n",[23,349,352],{"href":350,"rel":351},"https:\u002F\u002Fgithub.github.io\u002Fspec-kit\u002Fconcepts\u002Fspec-persistence.html",[207],"left to each team",[70,354,355,357,358,339,361,364,365,367,368,339,371,364,374,377],{},[36,356,308],{}," writes ",[52,359,360],{},"requirements.md",[52,362,363],{},"design.md"," and ",[52,366,346],{}," for each\nfeature, and keeps ",[52,369,370],{},"product.md",[52,372,373],{},"tech.md",[52,375,376],{},"structure.md"," as steering\nfiles that every conversation reads.",[19,379,380],{},"So the files stay. The question is what they hold.",[41,382,384],{"id":383},"the-product-gets-mixed-with-the-build","The product gets mixed with the build",[19,386,387,390],{},[36,388,389],{},"What usually steers these frameworks is the technical side",": the design,\nthe plan and the tasks. The product requirements are rarely discussed in full, and\nwhat is covered ends up mixed into the technical artifacts the framework\nproduces.",[19,392,393],{},"And the product never sits in one place. It is spread across feature and change\nfolders, so nothing describes the whole of it.",[19,395,396],{},"That matters. When the two are mixed, you can no longer tell what the product\nmust do from how it happens to be built today.",[41,398,400],{"id":399},"the-specs-drift","The specs drift",[19,402,403,406,407,32],{},[36,404,405],{},"A spec is only as true as the last time someone updated it."," A hotfix, a\nrefactor, a change made outside the workflow, and it quietly stops matching the\ncode. spec-kit's own docs name the risk:\n",[23,408,410],{"href":350,"rel":409},[207],"silent divergence",[19,412,413],{},"Keeping them current is a chore nobody owns. Every change means touching the\nproposal, the design and the specs, and the more files pile up, the more work\neach change costs. So it gets skipped, and the next agent builds from a spec\nthat is no longer true.",[19,415,416,417,420],{},"Splitting the product from the implementation changes that. ",[36,418,419],{},"The product lives\nin one place",", so a product decision is written once, not restated in every spec\nit touches. A purely technical change, like a refactor or a new library, never\nhas to touch it. And that one record serves every change, every agent and every\nperson on the team.",[41,422,424],{"id":423},"draw-the-line","Draw the line",[19,426,427],{},"PDD draws the line between product and implementation, in one place. A Product\nModel holds what any rebuild of the product would have to keep, and nothing a\nrebuild is free to change:",[429,430,431,444],"table",{},[432,433,434],"thead",{},[435,436,437,441],"tr",{},[438,439,440],"th",{},"In the Product Model",[438,442,443],{},"Left to the spec and the code",[445,446,447,456,464,472,480],"tbody",{},[435,448,449,453],{},[450,451,452],"td",{},"Who can reach each place",[450,454,455],{},"Architecture and data flow",[435,457,458,461],{},[450,459,460],{},"What it shows and asks for",[450,462,463],{},"Components and layout",[435,465,466,469],{},[450,467,468],{},"What can be done there",[450,470,471],{},"API style, endpoints and tokens",[435,473,474,477],{},[450,475,476],{},"Which rules apply",[450,478,479],{},"Libraries and frameworks",[435,481,482,485],{},[450,483,484],{},"What happens next",[450,486,487],{},"Tasks and file changes",[19,489,490],{},"Because it is kept apart, the model can also be checked against the code on\nevery change, so drift shows up when it happens instead of a year later.",[41,492,494],{"id":493},"sdd-describes-the-change-pdd-describes-the-product","SDD describes the change. PDD describes the product.",[19,496,497,498],{},"Spec-driven development is good at what it was built for: planning and building\na change. It was never meant to hold the product. Give the product a home of its\nown, kept apart from the technical artifacts and checked against the code, and\n",[36,499,500],{},"your specs can go back to doing what they do best: describing the build.",[19,502,503],{},"Nothing else has to move. Keep the spec-driven framework you use, or use none at\nall. The product just gets a place of its own.",[19,505,506,507,32],{},"For the problem this comes from, read\n",[23,508,26],{"href":25},{"title":133,"searchDepth":266,"depth":266,"links":510},[511,512,513,514,515],{"id":312,"depth":266,"text":313},{"id":383,"depth":266,"text":384},{"id":399,"depth":266,"text":400},{"id":423,"depth":266,"text":424},{"id":493,"depth":266,"text":494},"2026-10-06","SDD tools mix product and implementation in one place. PDD draws the line and gives the product a model of its own.","\u002Fblog\u002Fpdd-and-spec-driven-development.webp",{},{"title":31,"description":517},"blog\u002Fpdd-and-spec-driven-development","E40EeIWq9QgVYf3ledTKBgY4tooV85Huhb2v8LC3LC4",{"id":524,"title":26,"authors":525,"badge":528,"body":529,"date":669,"description":670,"extension":274,"image":671,"meta":672,"navigation":277,"path":25,"seo":673,"stem":674,"__hash__":675},"blog\u002Fblog\u002Fyour-agent-is-guessing.md",[526],{"name":9,"description":10,"to":11,"avatar":527},{"src":13,"alt":9},"Perspective",{"type":16,"value":530,"toc":663},[531,534,539,542,545,549,552,555,561,567,571,574,580,584,587,590,596,603,607,610,642,648,654,657,660],[19,532,533],{},"Coding agents can read code, tests, and tickets. Without a reliable product\ndefinition, they still have to reconstruct what the product is supposed to be.",[19,535,536],{},[36,537,538],{},"We are giving AI control of the codebase without giving it a reliable\ndefinition of the product.",[19,540,541],{},"Ask a coding agent to change what happens when a free trial ends. Should the\nworkspace become read-only? Is there a grace period? Can users export their data?\nDo scheduled actions keep running? What happens to invited teammates?",[19,543,544],{},"The agent can find the relevant code and tests. What it cannot find is which of\nthose answers represent the product's current intent.",[41,546,548],{"id":547},"evidence-is-not-a-product-definition","Evidence is not a product definition",[19,550,551],{},"The answers are usually scattered across the pricing page, an old launch ticket,\nbilling and permission logic, tests, a support playbook, and somebody's memory.\nEvery source is useful. None defines the current product as a whole.",[19,553,554],{},"Trial expiration crosses billing, permissions, collaboration, data retention,\nexports, and automations. Each system can behave consistently while producing a\ncustomer experience nobody deliberately defined.",[19,556,557,560],{},[36,558,559],{},"The agent does not discover the product. It reconstructs one",", filling every gap\nwith a product decision nobody explicitly made—then writes code as if that\nreconstruction had been approved.",[19,562,563,564],{},"Code is the closest evidence of what shipped, but it cannot explain what the\nbehavior means. A temporary workaround looks much like a deliberate business\nrule. ",[36,565,566],{},"Tests confirm what happens, not why it must happen.",[41,568,570],{"id":569},"better-documentation-is-not-enough","Better documentation is not enough",[19,572,573],{},"Wikis, design documents, and decision logs are good at authoring. Their shared\nweakness is that they cannot tell us when they have become false. When behavior\nchanges underneath a document, nothing fails; it quietly stops being true.",[575,576,577],"blockquote",{},[19,578,579],{},"The problem is not that a product definition is hard to write. The problem is\nthat a written product definition has no way of knowing it is now wrong.",[41,581,583],{"id":582},"agents-turn-ambiguity-into-action","Agents turn ambiguity into action",[19,585,586],{},"People reconstruct the product from the same fragments. Coding agents simply do\nit faster—and then act on the reconstruction.",[19,588,589],{},"More context helps it see more evidence. It does not create the missing decision\nthat only lived in a conversation or distinguish an intentional constraint from\na historical accident.",[19,591,592,595],{},[36,593,594],{},"The result can be reasonable code for a subtly incorrect product."," Reviewers catch\nsome of it. The rest ships.",[19,597,598],{},[599,600],"img",{"alt":601,"src":602},"Tickets, documents, tests, code, chats, and memory flow through reconstruction and produce a plausible product interpretation, shown as different from verified product intent.","\u002Fblog\u002Fagent-product-reconstruction.webp",[41,604,606],{"id":605},"what-a-durable-product-definition-requires","What a durable product definition requires",[19,608,609],{},"Simply documenting the product more clearly is not enough. A durable product\ndefinition must be:",[67,611,612,618,624,630,636],{},[70,613,614,617],{},[36,615,616],{},"Current and centralized:"," one shared definition of how the product should\nwork, updated as the product changes.",[70,619,620,623],{},[36,621,622],{},"Versioned with the code:"," changing in the same history as implementation.",[70,625,626,629],{},[36,627,628],{},"Readable by people and agents:"," structured without becoming opaque.",[70,631,632,635],{},[36,633,634],{},"Organized around product definition:"," who it serves, where they reach it, what it keeps, what it can do, and which rules must stay true.",[70,637,638,641],{},[36,639,640],{},"Tied to evidence:"," making drift visible when implementation and intent\ndiverge.",[19,643,644],{},[599,645],{"alt":646,"src":647},"A current product definition connects to five requirements: versioned with code, readable by people, readable by agents, tied to evidence, and making drift visible.","\u002Fblog\u002Fproduct-definition-requirements.webp",[19,649,650,651],{},"Call it a Product Model or a product definition. The name matters less than the\nproperty: ",[36,652,653],{},"it cannot quietly become fiction.",[19,655,656],{},"With that definition, people can understand the current product without\narchaeology, and agents can build from explicit decisions instead of inventing\nthe missing ones.",[19,658,659],{},"Over the past few weeks, I have been working on an open standard for product\ndefinitions and an open-source implementation of it. I am planning to release\nthem soon.",[19,661,662],{},"Where does your product definition live today? Have you run into this problem?\nHow does your organization handle it?",{"title":133,"searchDepth":266,"depth":266,"links":664},[665,666,667,668],{"id":547,"depth":266,"text":548},{"id":569,"depth":266,"text":570},{"id":582,"depth":266,"text":583},{"id":605,"depth":266,"text":606},"2026-08-06","Coding agents can read code, tests, and tickets. Without a reliable product definition, they still have to reconstruct what the product is supposed to be.","\u002Fblog\u002Fai-writing-code-for-products.webp",{},{"title":26,"description":670},"blog\u002Fyour-agent-is-guessing","FOqePn4y9plNDNkUqru2Yss-H9scyWFhqnSJwUWIUks",1791840531132]