.claude/skills/new-openspec-proposal-from-roadmap/SKILL.md
Scaffold a new OpenSpec change proposal by extracting scope, prereqs, and canonical references from an existing docs/operations/roadmap.md entry. Use when promoting a [Ready] or [Deferred] roadmap item into an active OpenSpec change. Delegates to /opsx:propose after pre-populating the proposal content, which saves ~5 min of manual scope-copying per proposal and eliminates "I forgot to capture the effort estimate" drift.
npx skillsauth add jrmatherly/1dev new-openspec-proposal-from-roadmapInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A user-invocable skill for promoting a roadmap item into an active OpenSpec change. This skill is user-only (disable-model-invocation: true) because it initiates multi-file artifact creation (proposal.md, design.md, tasks.md, specs/) via openspec new change — a side-effecting operation the operator should explicitly trigger, not Claude.
The docs/operations/roadmap.md file is the canonical ledger of deferred work. Each entry contains: scope, effort estimate, prereqs, and canonical references (e.g., design-doc decisions, prior change artifacts). When an operator decides to promote an entry into an active OpenSpec change, the manual process is:
/opsx:propose <description> and re-type the scope into the description fieldproposal.md to copy the prereqs + canonical references[Ready] to [In progress] or remove itSteps 2-3 are error-prone. Last session this manifested as an OpenSpec proposal whose proposal.md didn't cite the design.md §Decision 4 link from the original roadmap entry, which surfaced during archive as "where did we decide this?"
This skill automates the extract-and-populate step so the operator only does the interactive /opsx:propose answers.
grep -nE "^### \[Ready\]|^### \[Deferred\]" docs/operations/roadmap.md
The operator picks a target entry by its ### [<status>] <title> heading. The skill accepts the heading as its argument:
/new-openspec-proposal-from-roadmap 1code-api LiteLLM virtual-key auto-provisioning
Parse the target entry for the four fields:
# Find the line range for the entry
start_line=$(grep -n "^### \[Ready\] <title>" docs/operations/roadmap.md | head -1 | cut -d: -f1)
end_line=$(grep -nE "^### |^---|^## " docs/operations/roadmap.md | awk -F: -v start="$start_line" '$1 > start {print $1; exit}')
sed -n "${start_line},${end_line}p" docs/operations/roadmap.md
Fields to extract:
**Added:** — date the entry was filed**Scope:** — body text**Effort:** — sizing label (Small / Medium / Medium-Large / Large)**Prereqs:** — comma-separated dependencies**Canonical reference:** — links to design.md sections, prior change artifacts, or cluster docsSlugify the entry title to snake-case-with-dashes, matching OpenSpec's naming convention:
"1code-api LiteLLM virtual-key auto-provisioning"
→ "add-1code-api-litellm-virtual-key-provisioning"
Prefix with a verb (add-, upgrade-, remediate-, wire-) per the OpenSpec naming norm in .claude/rules/openspec.md.
Pre-populate a proposal header block that the operator can paste when /opsx:propose prompts for the description:
## Why
<Scope field body, verbatim from roadmap>
This change was queued on <Added date> in `docs/operations/roadmap.md` (effort: <Effort>).
## Prereqs
<Prereqs field body, as a bullet list>
## Canonical references
<Canonical reference field, formatted as a bullet list of markdown links>
## Roadmap entry
The originating roadmap entry will be removed from `docs/operations/roadmap.md` upon successful archive of this change (via the Recently Completed table update).
Emit a suggested /opsx:propose invocation with the derived change name + pre-populated description:
/opsx:propose <derived-name>
When the propose skill prompts for `## Why` content, paste:
<the pre-built proposal-md header block>
Remind the operator to flip the roadmap entry to [In progress] (or remove it entirely if it's being fully absorbed into the new change) once the change directory exists under openspec/changes/<name>/:
# Flip the roadmap header marker
sed -i '' 's/^### \[Ready\] <title>/### [In progress] <title>/' docs/operations/roadmap.md
The In progress marker tells future sessions not to re-promote the same entry.
disable-model-invocation: true). Never invoked automatically./opsx:propose, which knows the artifact-generation conventions.## Why. The roadmap entry has been reviewed and agreed upon; rewording it during promotion creates reviewer-vs-roadmap drift.design.md §Decision N references with precise anchors. OpenSpec's archive step validates that proposal.md cross-references resolve; broken links cause archive-time warnings.[Deferred], prompt the operator to confirm the blocker is now resolved before promoting — deferred items often have explicit prereqs like "requires cluster deploy" or "blocked on upstream release.".claude/skills/openspec-propose/SKILL.md — the underlying proposal scaffold skill this one wraps.claude/skills/roadmap-tracker/SKILL.md — for adding/listing roadmap items; this skill assumes an entry already exists.claude/rules/openspec.md — OpenSpec 1.2.0 workflow rules (naming conventions, MODIFIED Requirements baseline rule)docs/operations/roadmap.md — canonical roadmap source-of-truthdevelopment
Background knowledge for AI agents before editing any file that handles authentication tokens or spawn environment variables in the 1Code enterprise fork. Triggers when touching src/main/lib/trpc/routers/claude.ts, claude-code.ts, claude/env.ts, feature-flags.ts, or claude-token.ts. Reminds the agent to consult the frozen Envoy Gateway strategy doc (auth-strategy-envoy-gateway.md v2.1) sections that impose hard rules on credential handling.
tools
Background knowledge for safely bumping the pinned versions of Claude CLI binary, Codex CLI binary, Electron, Vite, Tailwind, or Shiki in this repo. Each pin is load-bearing for a different reason — this skill encodes the per-pin rationale and the regression test that must pass before the bump can land. Use proactively whenever editing package.json, scripts/download-claude-binary.mjs, scripts/download-codex-binary.mjs, or any file that mentions these versions. Claude-only (background knowledge, not user-invocable).
development
Use when reading or writing any file under src/renderer/ that calls remoteTrpc.* or fetch(${apiUrl}/...). Verifies the call site is documented in docs/enterprise/upstream-features.md and warns if a new upstream-backend dependency is being introduced without a corresponding F-entry. This skill enforces the enterprise-fork posture documented in CLAUDE.md.
development
End-of-task sync — update CLAUDE.md, rebuild code graph, sync Serena memories, check roadmap drift, and commit. Run after completing any significant work to ensure all drift surfaces are current.