-
Notifications
You must be signed in to change notification settings - Fork 0
docs(adr): design the Vibe Coding plugin (shape, skill family, stack guardrail, voice) #58
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,186 @@ | ||
| # ADR 0003 β The Vibe Coding plugin (a fourth, non-engineering audience) | ||
|
|
||
| - **Status:** Proposed | ||
| - **Date:** 2026-07-11 | ||
| - **Deciders:** devantler-tech maintainers | ||
| - **Issue:** [#57](https://github.com/devantler-tech/agent-plugins/issues/57) (Part of [#49](https://github.com/devantler-tech/agent-plugins/issues/49), child 1; twin skill-family roadmap: [agent-skills#56](https://github.com/devantler-tech/agent-skills/issues/56); relates to roadmap epic [#38](https://github.com/devantler-tech/agent-plugins/issues/38)) | ||
|
|
||
| > π€ Generated by the Daily AI Engineer | ||
|
|
||
| ## Context | ||
|
|
||
| [#49](https://github.com/devantler-tech/agent-plugins/issues/49) asks for a plugin that lets a | ||
| **vibe coder** β a user with *no technical prerequisite* β build apps that run on the devantler-tech | ||
| stack from conversation alone. The maintainer's framing on that issue is load-bearing: | ||
|
|
||
| > *"Remember Vibe Coding != Agentic Engineering. Vibe coding is a rapid, conversational approach where | ||
| > humans prompt AI to generate code and accept it by feel. In contrast, agentic engineering is a | ||
| > professional discipline where humans design structured AI systems with defined workflows, context | ||
| > management, and automated testing to ensure reliability in production environments."* | ||
|
|
||
| Everything this marketplace currently offers serves an **engineering** audience: `agentic-engineering` | ||
| (tools for *building* agentic applications), `engineering-practices` (practice skills β review, testing, | ||
| design), and the `automated-ai-engineer` role defined by ADR-0002 (the autonomous engineer *actor*). | ||
| The vibe coder is a **fourth, non-engineering audience**: they do not read diffs, do not know what a | ||
| cluster or a pipeline is, and must never need to. #49's acceptance criteria pin that down β popular- | ||
| assistant support (AC1), needs mapped to technical specifications behind the scenes (AC2), common | ||
| language not jargon (AC3), devantler-tech conventions followed but abstracted away (AC4), and a hard | ||
| stay-inside-the-stack boundary with a friendly redirect to filing an issue when a need falls outside it | ||
| (AC5). | ||
|
|
||
| This is epic-shaped, so it follows the decomposition-first precedent (ADR-0001 for bundling mechanics, | ||
| ADR-0002 for the role/config boundary): this ADR is **child 1**, documentation-only, and settles the | ||
| load-bearing decisions β the plugin's shape, where its skills canonically live, where the stack | ||
| boundary is defined, and the voice contract β so the implementation children have a contract to build | ||
| against. The twin roadmap item on the skills side is | ||
| [agent-skills#56](https://github.com/devantler-tech/agent-skills/issues/56), which decomposes after | ||
| this ADR settles shape (its stated sequencing). | ||
|
|
||
| ## Decision | ||
|
|
||
| ### D1 β Shape: a new `plugins/vibe-coding` agents+skills bundle, a distinct fourth audience | ||
|
|
||
| The plugin is a **new top-level bundle `plugins/vibe-coding`** β one custom **agent** (the vibe-coding | ||
| companion persona) plus the **skill family** in D2 β not an extension of any existing plugin. The three | ||
| existing engineering-facing audiences and this one must stay unblurred (the maintainer's vibe-coding β | ||
| agentic-engineering steer): `agentic-engineering` is for people *building* AI systems, | ||
| `engineering-practices` for engineers practicing the craft, `automated-ai-engineer` for the autonomous | ||
| role itself, and `vibe-coding` for a **non-technical human building a product conversationally**. The | ||
| persona needs an agent definition (a system prompt is where voice and elicitation behaviour live β see | ||
| D4), so this is an agents+skills unit in the ADR-0001 sense, consumable from Claude Code and Copilot | ||
| CLI alike (AC1 falls out of the plugin standard, not bespoke work). Its `plugin.json` carries only | ||
| `name` / `description` / `version` / `author` / `keywords`, component paths omitted and auto-discovered | ||
| (ADR-0001 D1). | ||
|
|
||
| ### D2 β The skill family and its canonical home (agent-skills, bundled β never hand-copied) | ||
|
|
||
| Three skills, mapping directly onto #49's acceptance criteria, with their **canonical home in | ||
| [agent-skills](https://github.com/devantler-tech/agent-skills)** per this marketplace's | ||
| single-source-of-skills rule; the plugin bundles them via `gh skill install`: | ||
|
|
||
| | Skill | What it does | ACs | | ||
| |---|---|---| | ||
| | **`needs-stack-mapping`** | Translate plain-language product needs (an outcome, an audience, a workflow) into the deployment's building blocks behind the scenes; the conversation stays in the user's vocabulary | AC2, AC4 | | ||
| | **`allowed-stack-guardrail`** | Before agreeing to build anything, check the need against the consumer-supplied **Stack map** (D3); in-stack β proceed; out-of-stack β friendly decline + offer to file an issue on the owning repo | AC5 | | ||
| | **`jargon-free-voice`** | The conversational register: common language, glossary indirection, outcome-first reporting (D4) | AC3 | | ||
|
|
||
| The Skill column values are the **installable slugs** (the `SKILL.md` `name` and directory), already | ||
| constrained to the [Agent Skills spec](https://agentskills.io/specification)'s lowercase-letters/ | ||
| numbers/hyphens charset so this repo's spec-validation gate accepts them as-is in child 2. | ||
|
|
||
| [agent-skills#56](https://github.com/devantler-tech/agent-skills/issues/56) already frames exactly this | ||
| family and defers its decomposition to this ADR; child 2 executes it there. | ||
|
|
||
| ### D3 β The stack boundary is *configuration*, not plugin content (ADR-0002's split, reapplied) | ||
|
|
||
| The guardrail's *procedure* (check, decline, redirect) is generic role logic and lives in the skill. | ||
| The **concrete allowed stack is a deployment-owned fact** β it names *this* org's products and changes | ||
| whenever the portfolio does β so per ADR-0002's genericity/volatility rule it does **not** ship inside | ||
| the plugin. Instead the skills are authored against a named, consumer-supplied contract section, the | ||
| **Stack map**: a plain-language catalogue of the allowed building blocks (what each is *for*, in the | ||
| user's vocabulary β "a place your app runs", "a template a new service starts from"), each with its | ||
| owning repo so an out-of-stack need can be redirected into a well-formed issue there (AC5's second | ||
| half). devantler-tech's own Stack map (ksail for clusters/GitOps, the platform's application | ||
| archetypes, the templates, the site) ships **with the deployment** (the monorepo), not with the plugin | ||
| β the stack can evolve weekly without a plugin release, exactly the volatility argument that made | ||
| ADR-0002's trade acceptable. | ||
|
|
||
| **The contract, pinned** (so child 2 can implement deterministically): the Stack map is a Markdown | ||
| section titled **`## Stack map`** in the consumer deployment's canonical instructions file | ||
| (`AGENTS.md`, reaching each assistant through its native shim β the same channel ADR-0002 chose for | ||
| deployment-owned configuration). It contains a table whose rows each carry three **required** fields: | ||
| **Building block** (the plain-language name), **Good for** (what needs it serves, in the user's | ||
| vocabulary β the matching surface), and **Owning repo** (`owner/repo`, where a suggested issue for | ||
| that block is filed). One additional field is **required once per map**: a **default intake repo** β | ||
| the catch-all `owner/repo` that receives the suggested issue for any need that matches *no* row, so | ||
| AC5's redirect is resolvable even for unmapped needs. Matching is semantic but **conservative**: the | ||
| `allowed-stack-guardrail` skill maps the user's stated need against the rows' *Good for* purposes, | ||
| and anything it cannot confidently match falls through to the catch-all decline-and-suggest path. | ||
| **Fail-closed covers the map itself:** when the `## Stack map` section is absent or malformed (no | ||
| table, or a row missing a required field), the guardrail treats **every** need as out-of-stack β it | ||
| declines plainly, explains that its allowed-stack catalogue is unavailable, and suggests an issue on | ||
| the default intake repo when one is parseable (otherwise it directs the user to whoever operates the | ||
| deployment). It never builds best-effort out of stack, and the decline itself stays jargon-free. | ||
|
|
||
| ### D4 β Voice: plain-language-first, glossary indirection, outcomes not artifacts | ||
|
|
||
| The persona's conversational contract (agent definition + the voice skill): | ||
|
|
||
| - **Needs-first elicitation** β ask about outcomes, audiences, and workflows, never about technologies; | ||
| the user should be able to answer every question without technical vocabulary. | ||
| - **Glossary indirection** β technical terms surface only when the user asks "how does it work?", and | ||
| always with a plain-words explanation; the default register contains no stack nouns (AC3). | ||
| - **Outcomes, not artifacts** β progress is reported as product outcomes ("your app is live at β¦", | ||
| "sign-ups now get a confirmation email"), never as engineering artifacts (PRs, pipelines, manifests). | ||
| The machinery still follows devantler-tech conventions underneath (AC4) β conventions are *applied*, | ||
| not *discussed*. | ||
| - **The human gate is conversational, not review-shaped** β unlike the `automated-ai-engineer` role | ||
| (draft-PR checkpoint, a maintainer who reads diffs), the vibe coder approves *described behaviour* in | ||
| plain language before it is built and after it ships. The underlying engineering discipline (tests, | ||
| validation, drafts) is unchanged β it is simply not the user's interface. | ||
|
|
||
| ### D5 β Sequencing (the follow-up children) | ||
|
|
||
| - **Child 2 β skills:** decompose [agent-skills#56](https://github.com/devantler-tech/agent-skills/issues/56) | ||
| into the three skills of D2, authored against the **Stack map** contract section (no devantler-tech | ||
| specifics in skill bodies). | ||
| - **Child 3 β assemble:** `plugins/vibe-coding/` β the companion agent under `agents/`, the three | ||
| skills bundled from agent-skills, both manifests + README updated in parity, validated by the | ||
| standard gate (`scripts/validate-manifests.sh`, skill spec-validation). Bundled `agents/` auto-load | ||
| only in Claude Code and Copilot CLI (ADR-0001; repo README), so the plugin README must carry the | ||
| documented **VS Code delivery step** β copy the companion agent to `.github/agents/<name>.agent.md` | ||
| β for AC1's coverage of the marketplace's supported VS Code surface. | ||
| - **Child 4 β consume & E2E:** author devantler-tech's Stack map in the consuming deployment and | ||
| validate the plugin end-to-end per the verify-it-works-behaviourally rule β voice and guardrail | ||
| quality cannot be proven by manifest validation alone. The scenario set covers **both sides of the | ||
| guardrail and its failure mode**: an in-stack build (a small app built purely conversationally), an | ||
| out-of-stack request (asserting the plain-language decline *and* the suggested-issue payload lands | ||
| on the owning repo), an unmapped need (asserting the catch-all default-intake redirect), and a | ||
| missing/malformed Stack map (asserting the fail-closed decline of D3). | ||
|
|
||
| This ADR itself changes no manifest, skill, or workflow (documentation-only). | ||
|
|
||
| ## Considered alternatives | ||
|
|
||
| - **Fold vibe coding into `agentic-engineering` (or `engineering-practices`).** Rejected: the | ||
| maintainer's framing makes the audience split load-bearing; those plugins presume an engineering | ||
| reader, and co-bundling would leak jargon-heavy skills into a persona whose defining constraint is | ||
| *no technical prerequisite*. | ||
| - **Hard-code the devantler-tech stack inside the plugin.** Rejected: the allowed stack is the | ||
| fastest-churning fact in play; baking it in forces a plugin release per portfolio change and breaks | ||
| reuse by any other deployment β the exact anti-pattern ADR-0002 rejected for the engineer role. | ||
| - **Author the skills directly in the plugin directory.** Rejected: violates the marketplace's | ||
| single-source-of-skills rule; agent-skills is the canonical home and plugins bundle, never hand-copy. | ||
| - **Skills-only (no agent persona).** Rejected: voice and elicitation behaviour are exactly what agent | ||
| definitions are for; skills alone cannot own the conversational register, and #38 T1's direction is | ||
| agents+skills bundles. | ||
| - **A standalone product (site/app) instead of a plugin.** Rejected as out of scope for this | ||
| marketplace: AC1 asks for popular-assistant support, which the tool-neutral plugin standard already | ||
| delivers; a bespoke app would re-invent the runtime this repo exists to avoid. | ||
|
|
||
| ## Consequences | ||
|
|
||
| **Positive** | ||
|
|
||
| - Unlocks a genuinely new, non-engineering audience for the marketplace β the first plugin whose user | ||
| never reads code β while AC1 (popular assistants) falls out of the existing plugin standard for free. | ||
| - The Stack map contract keeps the portfolio's churn out of the plugin (no release per stack change) | ||
| and makes the plugin reusable by any org that supplies its own map. | ||
| - The vibe-coding β agentic-engineering boundary is now written down where future curation can hold | ||
| the line (naming, non-goals, audience table). | ||
|
|
||
| **Negative / risks** | ||
|
|
||
| - **A consumer must author a Stack map before the plugin is useful** β one-time setup friction; | ||
| mitigated by devantler-tech's own map landing as the reference implementation in child 4. | ||
| - **Voice quality is hard to validate mechanically** β manifest validation proves nothing about AC3; | ||
| mitigated by child 4's conversational E2E scenario being part of the definition of done. | ||
| - **Boundary pressure over time** β engineering-flavoured skills will be tempting to bundle here; | ||
| the audience table in D1 is the curation rule that resists it. | ||
|
|
||
| ## Follow-up | ||
|
|
||
| - **Child 2 (skills)**, **child 3 (assemble)**, **child 4 (consume & E2E)** per D5 β filed when this | ||
| ADR is accepted. | ||
| - [agent-skills#56](https://github.com/devantler-tech/agent-skills/issues/56) decomposition unblocks | ||
| once this ADR lands (its stated dependency). | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Under the pinned Stack map contract, a need that matches a row's
Good forpurpose is treated as in-stack, while anything that cannot confidently match falls through to the default-intake repo. That leaves this E2E scenario with no deterministic way to make an out-of-stack request land on a row's owning repo rather than the catch-all, so child 4 will either test behavior the skill contract does not permit or reintroduce ad-hoc routing outside the ADR.Useful? React with πΒ / π.