Convex component adoption planner
Skill BjornMelin/dev-skills/skills/convex-component-adoption-planner
Researches a Convex component against a private app's live backend graph, asks scored one-at-a-time design questions, and produces a reusable adoption or rejection package with `PLAN.md` and `CODEX_FULL_PROMPT.md`.From its SKILL.md
npx -y skills add BjornMelin/dev-skills --skill convex-component-adoption-plannerAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
8.5 KB, ~1.9k tokens by cl100k_base, as published. Nobody here has run it
Convex Component Adoption Planner
Use this skill when a private Convex app needs a serious answer to any of these:
- Should we adopt a specific Convex component?
- Which Convex component best fits a planned feature?
- How should a component integrate without creating duplicate ownership?
- Generate a fresh-session execution package for adopting or explicitly rejecting a component.
Core stance
- Always inspect the app's current durable owner before recommending a component.
- Prefer one canonical owner. If a component would create a second source of truth, recommend against it unless the plan is a full hard-cut replacement.
- Keep deterministic prep in the helper CLI. Keep architecture, ownership, and recommendation judgment in the model.
- Use live Convex docs first. If the user asks for the latest or current component state, fetch it.
- Ask remaining design questions one at a time with
request_user_input, and include weighted scores from0.0to10.0for each option.
Start here
- If the component is not already fixed, fetch the live components index:
curl -s https://www.convex.dev/components/components.md
- Run the helper first when available:
cargo run --manifest-path .agents/skills/convex-component-adoption-planner/scripts/convex-component-adoption-prep/Cargo.toml -- doctor --json
cargo run --manifest-path .agents/skills/convex-component-adoption-planner/scripts/convex-component-adoption-prep/Cargo.toml -- component @convex-dev/aggregate --feature bookmarks-intent-signals --json
cargo run --manifest-path .agents/skills/convex-component-adoption-planner/scripts/convex-component-adoption-prep/Cargo.toml -- scaffold @convex-dev/aggregate --feature bookmarks-intent-signals --json
cargo run --manifest-path .agents/skills/convex-component-adoption-planner/scripts/convex-component-adoption-prep/Cargo.toml -- scaffold @convex-dev/aggregate --feature bookmarks-intent-signals --stdout
Helper command contract
Use the Rust helper in this order:
doctor- checks whether the useful local tools are available
- reports posture for
curl,rg,opensrc,ctx7,gh,bunx, andcargo - use
--jsonwhen you want machine-readable output
component <package>- normalizes the package into a docs slug
- emits the live Convex docs URLs
- emits the default plan output paths
- emits suggested
curl,opensrc,ctx7, andrgcommands - pass
--feature <slug>whenever the workstream is already known - pass
--docs-slug <slug>if the Convex docs page does not match the inferred slug - pass
--date YYYY-MM-DDor--plan-root <path>when you need a non-default output location
scaffold <package>- uses the same normalization rules as
component - creates the target plan folder and writes stub
PLAN.mdplusCODEX_FULL_PROMPT.md - use
--jsonto get created and skipped file paths back as structured output - use
--stdoutto preview the exact file contents without writing - use
--forceonly when you intentionally want to overwrite existing stubs
- uses the same normalization rules as
Do not treat the helper output as the recommendation. It only prepares deterministic inputs and starter files.
- Read the helper output, then gather exact repo context:
packages/backend/package.jsonpackages/backend/convex/convex.config.tspackages/backend/convex/schema.ts- feature-specific backend modules and specs
- if the feature is already planned, the matching repo-local planning or prompt files under
.agents/
- Fetch the live component markdown page and inspect the package source:
curl -s https://www.convex.dev/components/<slug>/<slug>.md
opensrc path <package-name>
- Optionally use extra tooling when it improves evidence quality:
ctx7: useful for library documentation lookup and secondary cross-checksopensrc: preferred when internal implementation details matterbunx convex: optional for local CLI help or version-aligned Convex contextgh: only if a GitHub issue or PR is part of the adoption decision
Do not hard-depend on any of these tools. Degrade cleanly when absent.
Workflow
- Normalize the target component, feature scope, and intended output folder.
- Prefer
doctorthencomponent. - Use
scaffold --stdoutwhen you want to inspect the starter package before writing it. - Use
scaffoldwithout--stdoutwhen you are ready to create the package files.
- Prefer
- Map the current durable owner in the target app before recommending anything.
- Read only the exact repo files that govern the feature boundary.
- Fetch live docs for the components index and the specific component page.
- Inspect dependency source with
opensrcwhen package behavior, tables, or APIs matter. - Check whether repo-local planning or prompt docs already define the feature. If they do, include alignment in the plan.
- Ask one design question at a time with
request_user_inputonly when local context cannot close the branch safely. - Produce the package described in
references/package-spec.md.
Decision framework
Use this weighted scoring model for major choices:
| Criterion | Weight |
|---|---|
| Solution leverage | 35% |
| Application value | 30% |
| Maintenance and cognitive load | 25% |
| Architectural adaptability | 10% |
Rules:
- Recommended options should usually land at
9.0+only when the tradeoff is genuinely strong. - If every option is weak, say so and score them honestly.
- If a component conflicts with an existing durable owner, that conflict is usually a decisive penalty.
Required outputs
Read references/package-spec.md before writing final package files.
Default output location:
.agents/plans/YYYY-MM/MM-DD/convex-components/<component-slug>/
Required files:
PLAN.mdCODEX_FULL_PROMPT.md
For a rejection decision, still emit the same package, but make PLAN.md a definitive non-adoption memo and make CODEX_FULL_PROMPT.md an execution prompt for future re-evaluation or confirmed rejection.
Question style
When a user wants to work interactively or says grill me:
- Ask one question at a time.
- Provide exactly 2-3 mutually exclusive options.
- Put the recommended option first.
- Include a short weighted score summary in each option description.
- Resolve packaging, ownership, migration, and prompt-alignment branches before writing the package.
What not to automate
- Final recommendation
- Duplicate-ownership analysis
- Hard-cut migration judgment
- Whether a planned feature should stay app-owned or move to a component
- Prompt-package alignment decisions
Those stay in the model.
The helper can scaffold stub PLAN.md and CODEX_FULL_PROMPT.md files, but it must not decide the recommendation or architecture.
Examples
Evaluate one candidate:
curl -s https://www.convex.dev/components/components.md
cargo run --manifest-path .agents/skills/convex-component-adoption-planner/scripts/convex-component-adoption-prep/Cargo.toml -- component @convex-dev/aggregate --feature bookmarks-intent-signals --json
cargo run --manifest-path .agents/skills/convex-component-adoption-planner/scripts/convex-component-adoption-prep/Cargo.toml -- scaffold @convex-dev/aggregate --feature bookmarks-intent-signals --json
cargo run --manifest-path .agents/skills/convex-component-adoption-planner/scripts/convex-component-adoption-prep/Cargo.toml -- scaffold @convex-dev/aggregate --feature bookmarks-intent-signals --stdout
Overwrite an existing starter package intentionally:
cargo run --manifest-path .agents/skills/convex-component-adoption-planner/scripts/convex-component-adoption-prep/Cargo.toml -- scaffold @convex-dev/aggregate --feature bookmarks-intent-signals --force --json
Use optional Context7 support:
ctx7 library convex "components aggregate"
ctx7 docs /convex-dev/convex "aggregate component patterns"
Install the helper locally for repeated use:
make -C .agents/skills/convex-component-adoption-planner/scripts/convex-component-adoption-prep install-local
convex-component-adoption-prep doctor --json
convex-component-adoption-prep component @convex-dev/aggregate --feature bookmarks-intent-signals --json
convex-component-adoption-prep scaffold @convex-dev/aggregate --feature bookmarks-intent-signals --json
convex-component-adoption-prep scaffold @convex-dev/aggregate --feature bookmarks-intent-signals --stdout
What ships with it: 6 files
28.2 KB alongside SKILL.md
agents/
- openai.yaml361 B
references/
- package-spec.md3.5 KB