An engineering-focused SDLC skill pack for developers and technical teams using AI coding agents. Works in Claude Code, GitHub Copilot, Codex, and Cursor.
Requests flow through:
brainstorming -> spec -> architecture when required -> plan -> execute-plan -> executor -> convergence -> branch-ready -> git
The pack is documentation-driven: markdown skills plus _refs/ knowledge. There is no runtime server.
| Track | Executor |
|---|---|
| Angular Portal | sdcorejs-angular |
| NestJS | sdcorejs-nestjs |
| Next.js | sdcorejs-nextjs |
| AI-agent | sdcorejs-ai-agent |
| Product | sdcorejs-product |
| Design | sdcorejs-design |
| Test | sdcorejs-test |
| Generic harness | sdcorejs-execute-plan fallback |
Request
-> sdcorejs-brainstorming
Explore if needed, then confirm blockers.
-> sdcorejs-spec
Write spec, ask for approval, and persist approved spec.
-> sdcorejs-architecture (conditional)
Approve architecture only for architecture-significant scope.
-> sdcorejs-plan
Write numbered plan, ask for approval, and persist approved plan.
-> sdcorejs-execute-plan
Detect track; compile execution opportunities from the approved plan.
-> sdcorejs-subagent-driven-development (when delegation is available)
Run fresh workers in dependency waves with bounded concurrency.
-> executor
ai-agent | angular | nestjs | nextjs | product | design | test | generic harness
-> finish gate and tail chain
sdcorejs-test -> optional sdcorejs-simplify -> affected focused tests
-> sdcorejs-review / repair-loop, including verified external feedback
write-producing docs/task/memory artifacts first
-> sdcorejs-ship (validation-map and convergence verification)
-> sdcorejs-ship (branch-ready mode as the final read-only gate)
The two approval gates and approved snapshot writes live inside sdcorejs-spec
and sdcorejs-plan. sdcorejs-execute-plan owns track detection,
AI-agent/product/design/test routing, generic fallback, and execution-policy
resolution. sdcorejs-subagent-driven-development owns the delegated lifecycle;
sdcorejs-parallel-dispatch remains its low-level scheduler. The runtime first
attests delegation, concurrency, cancellation, result-reference, and workspace
isolation capabilities, then selects parallel fresh workers, sequential fresh
workers, or parent execution without treating static adapter metadata as proof.
No write-producing step may run after final branch-ready unless branch-ready is
run again before Git artifacts.
- Decision coverage preserves current assumptions, decisions, requirements,
acceptance criteria, and invariants as stable
A-*,D-*,R-*,AC-*, andINV-*identities. Goal-backward checking rejects plans that omit the task, path, or evidence needed to prove an approved outcome. sdcorejs-architectureremains a conditional gate, not mandatory ceremony. Cross-repository ownership, public contracts, security boundaries, and other architecture-significant work require an approved architecture artifact; a small cohesive change records a concrete not-applicable reason.sdcorejs-subagent-driven-developmentis the twenty-third public skill. It turns an approved plan into dependency-aware worker waves, while preservingsdcorejs-parallel-dispatchas the reusable low-level scheduling contract.plan_context.validation_mapis the planning authority. Test preserves its exact coverage projection, appends actual runs/cases, and emits only current approved evidence IDs. A green but unrelated command cannot satisfy an AC.- The convergence evaluator joins approved intent/artifacts to executed task-path-symbol trace, current test/review evidence, architecture and convention conformance, required ledgers, source/module identity, and artifact closure. Verify-before-done evaluates it; branch-ready and Git recheck the compact result plus its hash-verified receipt against approved change/mode and current state. Git derives identity from repositories and approved plans.
- Conventions remain an
sdcorejs-exploreaction lifecycle, not a publicsdcorejs-conventionsskill. Observed patterns are advisory; only a separately authorized conventions-sync action persists accepted rules. - External review feedback is handled inside
sdcorejs-repair-loop: it is re-read, technically verified, classified, and either repaired within explicit tiered authority or answered with revision/path/hash-bound pushback. Writes stay inside intersected scopes and carry pre/post hashes plus test-integrity proof. Unclear/conflicting feedback and unapproved API migrations do not write. - Internal
sdcorejs-skill-authoringlives underauthoring/**and is excluded from public inventories, mirrors, manifests, and the site. The public ceiling remains 23 skills. Its gate derives inventory/routing hashes from the repo and validates linked RED/GREEN/REFACTOR records and complete live-matrix schemas. - Deterministic contract tests, prepared-environment Full E2E, and authorized
live-agent evidence are separate layers. A deterministic pass never implies a
Full E2E or live-agent pass, and unavailable live validation is
NOT RUN.
Pure Q&A answers directly. Small, explicit, low-risk fixes use targeted context, the smallest edit, focused verification, and concise review; they escalate to the full workflow if scope, risk, ownership, or behavior grows.
Canonical skills declare provider-neutral required-actions.
_refs/harness/capability-contract.json maps those actions and tri-state
capabilities for Codex, Claude Code, Cursor, and Copilot. Unsupported or unknown
capabilities retain numbered Markdown, static visual, and sequential parent
fallbacks.
The Communication Economy Policy improves visible-output and portable-handoff efficiency through just-in-time context and fewer repeated blocks. Current evidence does not establish broad token or cost reduction. The policy does not optimize output length in isolation or turn responses into fragments. Compact output remains localized, grammatical, and written in complete professional sentences.
Runtime communication has three distinct layers:
- Authoritative runtime context retains the typed fields required by the next consumer for routing, approval, security, verification, and artifact closure.
- User projection reports only the outcome, material evidence, risk, blocker, and next decision that the user needs.
- Portable handoff carries required IDs, paths, hashes, state deltas, evidence references, and the exact next consumer when a structured runtime context channel is unsupported or unknown. Its shape-aware matrix also preserves independent test lifecycle/evidence and parallel ownership/fan-in state, and rejects missing approval identity or embedded spec/plan/diff/log bodies.
The default profile is compact; normal technical explanation and review
findings use standard; approval, security, destructive action, ambiguity,
order-sensitive work, public-contract decisions, failed verification, and
unresolved blockers automatically use detailed. A user may request compact,
standard, detailed, or full context, but a shorter request cannot obscure
an approval scope or safety consequence. Code, commands, paths, identifiers,
hashes, errors, numbers, and verification results remain exact.
Detailed policy is loaded just in time from
_refs/harness/communication-economy.md. This is a communication contract, not
a workflow gate or a new sdcorejs-caveman skill.
Before an open choice is settled, Brainstorming and Design (including direct entry) assess whether seeing alternatives will help the user choose. They proactively offer a short comparison at the first useful visual decision, such as sidebar navigation, mobile selection/actions, wizard flow or dashboard hierarchy. A direct preview request proceeds without another invitation. Typos, fixed spacing, approved layouts and delegated choices need no offer.
For example, ask: "Improve the three-level sidebar; I am unsure how to arrange navigation." Once real alternatives are clear, the agent offers to show their mockups side by side. To try it directly, ask: "Show me two mobile card mockups with different selection and action placement." Invitations and screen labels follow the user's language. A refusal carries across skills/phases in its visual thread (or whole session if requested); an explicit narrow re-enable changes only the requested scope.
Visual surfaces, best first: supported live companion with scoped runtime consent, native visual, static HTML, then numbered Markdown. Text decisions and approvals use native structured choice, then numbered Markdown. A text picker can collect preview preference but cannot replace the requested preview. Unknown browser auto-open means manual opening, not loss of visual capability. Failures fall through the same ladder with the original decision/options intact.
The live runtime is _refs/sdlc/visual-companion/: a zero-dependency Node
server on a loopback origin with an RFC 6455 event channel, a browser client
pinned by CSP hash, server-owned screen revisions that make stale-click
rejection possible, and a bounded event log. Drive it through
_refs/sdlc/visual-companion/cli.mjs, which prints one JSON object per command
and exits non-zero on failure.
The Node.js 18.20.8 compatibility exception is limited to the standalone Visual Companion built-ins-only tests. Run the evidence command directly
without npm ci or a root dependency install:
node --test test/e2e/visual-companion-runtime.test.mjs test/e2e/static-visual-composer.test.mjsThis exception does not extend the supported root toolchain.
Two independent gates: live_visual_companion plus persistent_local_process
must be supported, and the user must consent to local runtime writes.
Auto-opening a browser needs its own separate consent. Reuse grants only within
the same conversation session, scope and purpose. Session state lives under
the execution host's .sdcorejs/tmp/visual-companion/, which is local_only:
never staged, never committed, never read back as project context. Every
browser event is stamped authority: supporting-feedback by the server and
asserted on read, so a click can never carry workflow approval.
Recognition: _refs/sdlc/visual-offer-policy.md. Runtime contract:
_refs/sdlc/visual-companion.md. Natural-language/multi-turn eval commands and
honest live-evidence limitations: visual offer evals. Security model and attribution:
_refs/sdlc/visual-companion/README.md.
Project documentation below .sdcorejs/documentation/ uses one directory per
document:
user-guides/<module>/<module>.md
user-guides/<module>/images/<screen>.png
requirements/<TASKID>/<TASKID>.md
technical-docs/<doc-key>/<doc-key>.md
Unit-local links stay concise, for example images/list.png. _shared is used
only when at least two exact documentation units are proven owners. New writes
always use v2; canonical-first discovery can read transitional flat entries,
but migration requires an authorized, collision-free, idempotent preflight.
Canonical/legacy conflicts block migration, aggregate build, and export.
The aggregate remains .sdcorejs/documentation/sdcorejs-user-guide.md. Its
builder discovers exact entry shapes, rewrites unit-local links relative to the
documentation root, and validates emitted links. DOCX and PDF are separate
approved capabilities; neither is reported as passing without a non-empty
parseable output and embedded-image verification. The full contract and pure
deterministic helper are loaded just in time from
_refs/shared/documentation-layout.md and
_refs/shared/documentation-layout.mjs, so unrelated Q&A bootstrap does not
grow.
In a multi-repository system, each module repository owns its module guides, requirements, technical docs, and assets. The portal owns only portal/integration docs and generated aggregates. An aggregate links pinned module sources or consumes versioned exports with repository/revision/hash provenance; it is not a second editable source of module documentation.
Shared UI/UX knowledge is available through
_refs/design/uiux/index.md. Design, Angular,
Next.js and independent review select only the relevant surface and topic.
Existing components, tokens, icons and approved behavior remain the starting
point; bounded fixes do not require a complete design system. The optional Node
selector works offline, and the Markdown index is the fallback.
Examples (runtime output follows the user's language):
sdcorejs-design: Improve this existing three-level Core UI sidebar. Preserve routes, permissions, tokens and icon family; focus on expansion, active state and keyboard behavior.sdcorejs-design: Design mobile cards for this data table. Preserve item identity, selection scope, row actions and opening behavior; show the desktop/mobile parity decisions.sdcorejs-design: Design a new landing page from these approved requirements. Use the existing brand and explain content hierarchy, responsive behavior and states.sdcorejs-review: Review this UI from source only. Separate functional/accessibility defects, accepted-convention drift and aesthetic suggestions; give evidence, severity and verification without editing code.
Implementation still uses the approved track workflow. Core UI documentation
lookup supports --exact-version for either installed package name; unavailable
exact documentation requires local API evidence or an explicit limitation.
Baseline references and feature exceptions use the existing design decisions,
handoff and ledger; no new public skill or root-level artifact directory.
Product and Design artifacts live under the target repository's .sdcorejs/
directory:
.sdcorejs/product/prds/<feature>.md
.sdcorejs/product/user-stories/<feature>.md
.sdcorejs/product/acceptance-criteria/<feature>.md
.sdcorejs/product/uat-checklists/<feature>.md
.sdcorejs/product/decisions/<feature>.md
.sdcorejs/docs/product/<feature>.md
.sdcorejs/design/flows/<feature>.md
.sdcorejs/design/specs/<feature>.md
.sdcorejs/design/decisions/<feature>.md
.sdcorejs/design/wireframes/<feature>/<screen>.html
.sdcorejs/design/wireframes/<feature>/<screen>.svg
.sdcorejs/design/exports/png/<feature>/<screen>.png
.sdcorejs/design/references/<feature>/<screen>.png
.sdcorejs/docs/design/<feature>.md
Canonical roots are declared once as artifact_roots in
_refs/shared/system-registry.json and resolved through
_refs/shared/artifact-paths.mjs. Root-level product/** and design/** are
legacy read-only compatibility inputs for older target projects: canonical
locations always win on read, a legacy path is read only when no canonical
equivalent exists, updating a legacy-only artifact migrates that feature bundle
to the canonical location in the same approved change, and a conflicting
canonical/legacy pair blocks instead of merging. No skill creates or updates a
root-level Product or Design path.
Durable Design PNG exports and screenshot references participate in Git artifact closure as binary artifacts. Discovery hashes them, never parses them as Markdown, never text-scans them for secrets, and never prints their bytes.
The AI-agent track is an approved-plan-only authoring surface, not a bundled
agent runtime. It selects one lifecycle engine (openai-responses or
openai-agents-sdk) independently from one of twelve business capability
profiles. Its contracts default provider storage off, prohibit generic raw
tools, require trusted server identity and tenant scope, bind approvals to exact
inputs/versions, separate application state, require evidence and redacted
tracing/audit/usage data, and run offline deterministic evals. Live engine/model
verification is always reported separately.
sdcorejs-simplify is a daily workflow utility, not an implementation track.
It analyzes or applies bounded refinements to recently changed executable
source or an explicit source scope while preserving observable behavior.
Apply mode requires a green focused baseline and reruns the same verification;
analyze mode is read-only. Prompts, docs, configuration, strings, tests,
fixtures, snapshots, public contracts, dependencies, and framework/AI-agent
contracts are protected. The finish gate presents simplification as a visible
opt-in step; it never auto-runs, and current tests are evidence rather than a
general semantic-equivalence proof.
This repository is public source, while the root repository tooling manifest
describes a private root Node workspace with private: true. The root project
is not distributed through npm. Use GitHub/plugin installation, submodules, or
generated native skill mirrors as the distribution paths.
The root name and version are synchronized repository/plugin release
metadata, not an npm package identity. The canonical package manager for
repository validation remains npm. Use the committed package-lock.json with:
- Root repository tooling requires Node.js
^22.22.3 || ^24.15.0 || >=26.0.0. - The Astro showcase under
site/requires Node.js>=22.12.0.
npm ci
npm run check:text-hygiene
npm run check:skills
npm run test:e2ePick one install path, start a fresh agent session, then use the smoke prompt to confirm dispatch behavior before adopting the pack for real work.
| Tool path | Install or attach | Smoke prompt | Expected observation |
|---|---|---|---|
| Claude Code plugin | Install from the plugin marketplace. | Use sdcorejs-explore to summarize this repo's validation posture. |
The explore skill loads in read-only summary mode, creates a tasklist for non-trivial work, and reports verification status. |
| Codex attached repo | Add this repo as a submodule or keep AGENTS.md at the target root. |
Use the SDCoreJS flow to plan a small docs update. |
AGENTS.md routes to brainstorming/spec/plan discipline instead of writing immediately. |
| Codex native skills | Copy codex/skills/** plus codex/skills/_refs/** into $CODEX_HOME/skills. |
Use sdcorejs-documentation to write a short technical doc. |
The skill resolves ../_refs/... and follows tasklist/verification rules. |
| Cursor | Use AGENTS.md plus .cursor/rules/**. |
Create acceptance criteria for a small feature using SDCoreJS. |
Product/design/test/doc routing selects the matching workflow. |
| GitHub Copilot | Use .github/copilot-instructions.md or .github/chatmodes/**. |
Create acceptance criteria for a small feature using SDCoreJS. |
Product/design/test/doc routing selects the matching workflow. |
For release adoption, pin a Git tag or GitHub Release rather than a floating branch, then record the exact tool versions and transcript evidence.
/plugin marketplace add sdcorejs/sdcorejs-agent
/plugin install sdcorejs-agent@sdcorejs
npm run sync:skills
$dest = if ($env:CODEX_HOME) { Join-Path $env:CODEX_HOME "skills" } else { Join-Path $HOME ".codex\skills" }
New-Item -ItemType Directory -Force $dest | Out-Null
Copy-Item .\codex\skills\* $dest -Recurse -ForceRestart Codex after copying. Keep codex/skills/_refs with the skills.
cd <your-project>
git submodule add <repo-url> .sdcorejs-agent
ln -s .sdcorejs-agent/CLAUDE.md CLAUDE.md
ln -s .sdcorejs-agent/AGENTS.md AGENTS.md
ln -s .sdcorejs-agent/skills skills
ln -s .sdcorejs-agent/_refs _refs| Tool | Reads | Verification |
|---|---|---|
| Claude Code plugin | plugin/skills/**, plugin/_refs/**, plugin/sdcorejs-harness.json |
Mirror/action/capability drift checks |
| Claude Code direct | CLAUDE.md, .claude/skills/**, .claude/sdcorejs-harness.json |
Mirror and behavioral sentinel checks |
| Codex attached repo | AGENTS.md |
Entrypoint and behavioral sentinel checks |
| Codex native | codex/skills/**, codex/sdcorejs-harness.json |
Codex mirror/action/ref checks |
| Cursor | AGENTS.md, .cursor/rules/sdcorejs-agent.mdc, .cursor/sdcorejs-harness.json |
Generated rule/manifest drift checks |
| GitHub Copilot | .github/copilot-instructions.md, .github/chatmodes/sdcorejs.chatmode.md, .github/sdcorejs-harness.json |
Entrypoint and manifest checks |
For adoption guidance, compatibility evidence, and expected live-tool transcripts, see:
docs/ADOPTION.md- when to use this pack, when not to use it, fast-fix rules, compatibility matrix, and adoption checklist.docs/WORKED_EXAMPLE.md- example full workflow from request through evidence summary.docs/TROUBLESHOOTING.md- mirror drift, Codex refs, text hygiene, plugin, and Full E2E troubleshooting.docs/REAL_AGENT_VALIDATION.md- sanitized transcript evidence template.docs/RELEASE_PROCESS.md- tag/release checklist.
skills/ source skills, 23 dispatchable skill files
_refs/ source reference docs
_refs/harness/ actions, capabilities, model roles, runtime envelopes
.claude/skills/ generated Claude mirror
plugin/skills/ generated Claude plugin mirror
codex/skills/ generated Codex-native mirror
.cursor/rules/ generated Cursor rule
scripts/sync-skills.mjs cross-platform mirror generator
*/sdcorejs-harness.json generated adapter capability/action metadata
Run after editing source skills, refs, or AGENTS.md:
npm run sync:skills
npm run check:skillsSee MIRROR_POLICY.md for canonical source ownership and generated mirror
review rules.
- Keep
CHANGELOG.mdupdated for user-visible skill, ref, workflow, or validation changes. - Create GitHub releases and tags for adopted versions; follow
docs/RELEASE_PROCESS.mdand include validation commands, CI run links, Full E2E evidence, and real-agent transcript evidence for Claude Code, Codex, Cursor, and GitHub Copilot in release notes. - Treat generated mirrors as supported distribution artifacts. Any source
change to
skills/,_refs/, orAGENTS.mdmust be followed bynpm run sync:skillsandnpm run check:skills. - For upgrades, compare the previous tag to the new tag and review
CHANGELOG.md,VALIDATION.md, anddocs/ADOPTION.md. - Keep repository metadata aligned with this positioning: this is a portable SDLC skill pack, not a standalone runtime coding agent.
- Runtime-localized output: respond in the user's language and preserve locale-specific marks.
- Non-trivial skills apply the read-only
_refs/shared/project-context.md. Valid summary sections help orientation; missing or stale summary falls back to targeted reads or a scoped code map and never blocks work. - Non-trivial execution tasks use
_refs/shared/tasklist.md: create visible outcome-based progress when work starts, then update only for a meaningful outcome, scope change, blocker, verification event, required decision, or explicit status request. Disclose skipped verification, blockers, and risks without duplicating the final response. - Live progress remains in the current thread/harness. Durable handoffs are explicit and change-scoped; repository files never mirror live checkbox state.
.sdcorejs/**producers emit runtimeartifact_context. Git artifact closure automatically includes required same-change specs/plans/docs while excluding unrelated and local-only artifacts.- Requirements before code: use
sdcorejs-brainstorminguntil blockers are confirmed. - Pure Q&A answers directly without entering the SDLC.
- For explicitly small low-risk edits, use the fast-fix path in
docs/ADOPTION.md; escalate to the full workflow if scope grows. - Explicit approval required for spec and plan.
- Approved plans execute through
sdcorejs-execute-plan. sdcorejs-execute-planasks sequential versus parallel only for two or more independent units when both modes are actually feasible.- Supported native structured interaction may be used for real decisions; static visual and numbered Markdown fallbacks keep the workflow portable.
- Product/PO docs, user stories, acceptance criteria, UAT, and traceability use the
sdcorejs-producttrack. - UI/UX design, FE handoff specs, wireframes, and PNG previews use the
sdcorejs-designtrack. - Test-only plans use the
sdcorejs-testtrack. - Confirmed AI-agent implementations use
sdcorejs-ai-agent; under-specified AI-agent ideas return to brainstorming, while test, review, and debug requests keep their dedicated owners. - Codebase understanding, summaries, flow tracing, and local setup discovery use
sdcorejs-explore. - Bounded behavior-preserving refinement of recently changed or explicitly
scoped executable source uses
sdcorejs-simplify; broad refactors return to planning. - Final gate, acceptance verification, branch readiness, dependency-update delivery, ready-to-merge, and release readiness use
sdcorejs-ship. - Commit, PR, changelog, release notes, and Git artifact creation use
sdcorejs-git. - Unknown stacks can still run through the generic harness fallback.
- Authentication, authorization, security, and container-based test guidance remain embedded in the technical tracks that own those concerns; they are not standalone end-to-end packaging workflows.
- Every code-generation run presents the finish gate before tail steps.
- Never claim pass, built, fixed, or done without current verification output.
MIT