Loading...
Loading...
Interactively onboard a project to OpenSpec by running a structured interview and generating a complete QRSPI-configured openspec/config.yaml. Use this skill whenever a user mentions "openspec config", "config.yaml for openspec", "set up openspec", "onboard to openspec", "generate openspec config", "QRSPI config", or asks how to configure OpenSpec for their project — even if they just say "help me set up openspec" or "I want to use openspec". Always prefer this skill over ad-hoc config generation.
npx skill4agent add gohypergiant/agent-skills accelint-onboard-openspecopenspec/config.yamlaccelint-onboard-agentsAGENTS.mdCLAUDE.mdaccelint-onboard-agentsconfig.yamlAGENTS.md / CLAUDE.md → accelint-onboard-agents skill → HOW the agent behaves
openspec/config.yaml → this skill → WHAT the project iscontext:rules:openspec/config.yamlDoes openspec/config.yaml exist?
│
├── No → MODE 1: Create
│ Full interview from scratch.
│
└── Yes → Read the file, then assess:
│
├── Empty or near-blank (schema: line only, no context/rules)?
│ → MODE 1: Create (with overwrite confirmation)
│ Ask: "config.yaml exists but appears empty — should I
│ populate it from scratch, or preserve any current content?"
│
├── Contains recognised fields?
│ (context: block present, rules: block with known artifact keys)
│ → MODE 3: Refresh
│ Abbreviated interview covering only detected drift and
│ unresolved # TODO: fill in markers.
│
└── Contains real content in an unrecognised shape?
→ MODE 2: Import
Present three options (A / B / C) before proceeding.context:rules:proposalspecsdesigntasks"Thishas existing content with a structure I don't recognise. How would you like to proceed?config.yaml(a) Restructure — I'll import your existing content, map it onto the/context:schema, flag any material that belongs inrules:instead (workflow steps, commit conventions, tool preferences), run a targeted interview to fill gaps, and produce a merged file ready to replace the current one.AGENTS.md(b) Append — I'll run the full interview and add the skill'sandcontext:sections alongside your existing content without modifying what's already there.rules:(c) Dry run — I'll run the full interview and show you exactly what I would have generated, with no changes to the filesystem. Use this to evaluate fit before committing."
context:rules:AGENTS.md# from existing file# newcontext:rules:# Sections below added by accelint-onboard-openspec skill| Signal | Where to look |
|---|---|
| Runtime / Node version changed | |
| New packages / frameworks added | |
| TypeScript config tightened | |
| New packages in monorepo | |
| Build tooling changed | |
| CI/CD workflows added | |
| New domain concepts | New top-level directories, new entity types in source |
| Anti-patterns deprecated | |
# TODO: fill in"I found [N] context sections that may have drifted and [M] unresolved TODOs. I'll only ask about those — the rest looks current."
exactOptionalPropertyTypes@/~/src/#lib/Result<T,E>describe/ittest/expect__tests__/Note: Commit message convention is a workflow procedure — it belongs in, not here. If the user raises it now, capture it mentally and surface it in theAGENTS.mdskill. Do not add it toaccelint-onboard-agents.config.yaml
[PKG:auth][MODULE:pipeline]"use client"app/api/pages/api/userEventfireEventscreenrenderDependslifespanstartupshutdownprisma.$transaction| Gap | Files / signals to inspect |
|---|---|
| Runtime / Node version | |
| TypeScript config | |
| Package manager | |
| Monorepo workspaces | |
| Build tools | |
| Test framework | |
| Linting / formatting | |
| CI/CD | |
| Versioning | |
| Path aliases | |
| Architecture organisation | Directory tree of |
| Design patterns | Sample source files — look for factory functions, repository objects, observer hooks |
| Export style | Sample 3–5 source files; tally named vs default exports |
| Naming conventions | Sample file names, exported identifiers; describe what you observe |
| Error handling | Grep for |
| Test structure | Sample test files — describe/it nesting depth, file location relative to source |
| Anti-patterns | |
- Runtime: Node.js 20 LTS # inferred from .nvmrc
- Language: TypeScript 5.4, strict, exactOptionalPropertyTypes # inferred from tsconfig.json# TODO: fill in# TODO: fill inopenspec/config.yaml# TODO[placeholder]# TODO: fill inschema: spec-driven
# Project Context
# Injected into every AI-generated artifact (proposal, design, spec, tasks).
# QRSPI principle: objective research layer — facts only, no opinions.
context: |
# ═══════════════════════════════════════════════════════════════════════════
# STACK FACTS
# ═══════════════════════════════════════════════════════════════════════════
## Project Identity
[project name and one-sentence purpose]
[repo structure: monorepo / single-package / workspaces list]
[build system and task orchestration]
[package manager + registries]
## Tech Stack
- Runtime: [e.g., Node.js 20 LTS]
- Language: [e.g., TypeScript 5.4, strict mode, exactOptionalPropertyTypes]
- Framework: [e.g., Next.js 14 App Router]
- Key Libraries: [domain-specific dependencies with versions]
- Data Layer: [databases, ORMs, data formats, query builders]
- Testing: [framework, utilities, coverage tooling]
- Linting/Formatting: [tools and config files in use]
- Build Tools: [bundlers, compilers, transpilers]
- CI/CD: [platform and key workflow names]
- Versioning: [release strategy and changelog tooling]
## Architecture Patterns
- Organisation: [feature-based / layer-based / domain-driven / other]
- Shared code: [path to shared utilities / packages]
- Path aliases: [list of aliases and their resolved paths]
- Key patterns: [design patterns in common use]
## Domain Concepts
- [Entity or concept]: [one-line definition]
- [Entity or concept]: [one-line definition]
- [Entity or concept]: [one-line definition]
## Performance Targets
- [metric]: [target value and context]
# ═══════════════════════════════════════════════════════════════════════════
# PATTERNS TO FOLLOW
# ═══════════════════════════════════════════════════════════════════════════
## Code Patterns
- Exports: [named / default / mixed — and when each applies]
- Naming: [files, variables, functions, constants, types]
- Error handling: [throw / Result<T,E> / boundaries / other]
- Validation: [approach and library]
- Constants: [enum pattern or constant object pattern]
## Architecture Patterns
- [pattern name]: [brief description of how it's used here]
## Testing Patterns
- Structure: [describe/it nesting convention]
- File location:[co-located / __tests__ / other]
- Fixtures: [factory functions / fixture files / inline data]
- Assertions: [preferred assertion style]
- Benchmarks: [approach if any]
# NOTE: Commit message convention, PR workflow, and tool preferences
# are behavioral — they belong in AGENTS.md, not here.
# ═══════════════════════════════════════════════════════════════════════════
# PATTERNS TO AVOID
# ═══════════════════════════════════════════════════════════════════════════
- [anti-pattern]: [why it's banned or deprecated]
- [anti-pattern]: [why it's banned or deprecated]
# ═══════════════════════════════════════════════════════════════════════════
# PER-ARTIFACT RULES
# ═══════════════════════════════════════════════════════════════════════════
rules:
proposal:
# QRSPI: Scope definition, not a plan.
- State the requirement or ticket driving this change
- Define scope boundaries — explicitly list what is OUT of scope
- Keep under 100 lines (tight and focused)
[user-specific proposal rules]
design:
# QRSPI: The "brain surgery" checkpoint — reviewed before any code is written.
# Target ~200 lines capturing current state, desired state, open questions.
# Required sections (in this order):
- Start with "Current State": what the code does today, key files, entry
points, relevant data flows
- "Desired End State": what changes after this work, what stays the same
- "Patterns to Follow": ONLY if specific files/functions to reference exist
for this change's domain
- "Patterns to Avoid": ONLY if specific anti-patterns apply to this change
- "Open Questions": genuine uncertainties requiring human input. If none,
state explicitly "No unresolved questions."
- "Resolved Decisions": numbered (Decision 1, Decision 2…) with Choice,
Rationale, Alternatives Considered
# Technical depth:
- Use ASCII diagrams for data flows, state machines, architecture
- Call out performance implications where relevant
[user-specific design rules]
# Constraints:
- Keep under 250 lines total
tasks:
# QRSPI: Vertical slicing for early failure detection.
# Vertical slicing (strong preference):
- Order as vertical slices — each task delivers a testable end-to-end path
- Do NOT group by architectural layer unless explicitly justified
- Horizontal (layer-by-layer) only for pure infrastructure; include
justification in the task description when used
- Each task MUST include an explicit "Test:" line describing what to verify
before proceeding to the next task
- Prefer 3–5 major slices; more than 5 suggests scope is too large
# Granularity:
- Max 2 hours per task; break larger work into subtasks
[user-specific task tagging, e.g., [PKG:name] or [MODULE:name]]
- Call out inter-task dependencies explicitly
[user-specific rollback requirements]
[user-specific deployment test gates]
spec:
- Use Given/When/Then for behaviour specifications
- Include concrete example data relevant to the domain
- Document edge cases explicitly
[user-specific spec rules]@testing-library/react# TODO