원클릭으로
opsx-ff
Create a change and generate all artifacts needed for implementation in one go (Blocks Haiku)
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Create a change and generate all artifacts needed for implementation in one go (Blocks Haiku)
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Reset the OpenRegister development environment (stop, remove volumes, restart, install apps)
Create a Pull Request from the current branch — runs local checks, picks target branch, and opens the PR on GitHub
Analyze a project's OpenSpec from 8 persona perspectives and suggest additional features
Detect admin settings Vue components registered in the vue-router. Admin settings are rendered by Nextcloud's settings framework via `AdminSettings.php`; adding their Vue components to the in-app router exposes them as publicly-accessible frontend routes, bypassing all server-side access checks. ADR-004 hard rule. Observed 2026-04-30 on doriath where `/settings → AdminRoot` was a route in `src/router/index.js` (commit c7c72e9).
Run `composer audit` to check composer.lock dependencies for known CVEs. Invoked by the builder before push and the reviewer's mandatory block. Mirrors the orchestrator's `composer-audit` quality gate.
Scan lib/ for forbidden debug helpers (var_dump / die / error_log / print_r / dd / dump) that should not ship. Invoked by the builder before push, by the reviewer as Mandatory Step 2, and by the fixer during a retry. Mirrors the orchestrator's `forbidden-patterns` quality gate.
| name | opsx-ff |
| description | Create a change and generate all artifacts needed for implementation in one go (Blocks Haiku) |
| metadata | {"category":"Workflow","tags":["workflow","artifacts","experimental"]} |
Step 0: Check the active model from your system context (it appears as "You are powered by the model named…").
"This command requires Sonnet or Opus — generating proposal/specs/design/tasks artifacts in one pass needs stronger reasoning than Haiku can reliably provide. Please switch to Sonnet (
/model sonnet) or Opus (/model opus) and re-run."
Fast-forward through artifact creation - generate everything needed to start implementation.
Input: The argument after /opsx-ff is the change name (kebab-case), OR a description of what the user wants to build.
Steps
If no input provided, ask what they want to build
Use the AskUserQuestion tool (open-ended, no preset options) to ask:
"What change do you want to work on? Describe what you want to build or fix."
From their description, derive a kebab-case name (e.g., "add user authentication" → add-user-auth).
IMPORTANT: Do NOT proceed without understanding what the user wants to build.
1.5. Confirm the plan before generating
Summarize your understanding and use AskUserQuestion to confirm before doing any work:
"I'll create a change called
<name>to: . Ready to generate all artifacts?"
Options:
Do NOT create any files until confirmed.
1.55. Select model for artifact generation
This skill generates OpenSpec artifacts (proposal, specs, design, tasks) — the quality of these artifacts determines implementation quality downstream.
Ask the user using AskUserQuestion:
"Which model should I use for artifact generation?"
| Model | Pros | Cons |
|---|---|---|
| Sonnet (recommended) | Good artifact quality, moderate quota | Solid for most changes |
| Opus | Best design and architectural reasoning | Uses more quota — worth it for complex or architectural changes |
Use the Agent tool with model: "sonnet" or model: "opus" (whichever was selected) to delegate Steps 2–4. Pass the subagent:
DEFERRED_QUESTIONS list at the end of its output — one entry per decision made under uncertainty (see Step 4c)When the subagent completes:
DEFERRED_QUESTIONS, you MUST ask the user EVERY question — no exceptions. Do NOT evaluate, triage, or skip questions yourself. Do NOT conclude "no user input needed" for any question. The subagent deferred these questions precisely because they require human judgment.1.6. Load app design context (if present)
Before creating any artifacts, check for and silently load app design documents. These inform proposal scope, architecture constraints, and applicable ADRs — the openspec instructions context does not include them.
| File | If present, use to... |
|---|---|
openspec/changes/<name>/context-brief.md | Specter intelligence brief — full features, user stories, stakeholders, schemas, standards, ADRs. This is the PRIMARY input when present — read it fully and use its data for all artifacts |
openspec/architecture/ | Repo-specific ADRs (the only architecture source in app repos). Constrain the implementation approach. Authored by Specter during research; evolved by humans. |
hydra openspec/architecture/ (org-wide) | Company-wide ADRs apply to every app. Live ONLY in the hydra repo. Reviewer + builder containers copy the relevant subset in at image-build time; /pr-context/ surfaces anything the stage needs. App repos do not carry local copies — see hydra/CLAUDE.md "ADR ownership". |
docs/ARCHITECTURE.md | Understand app-specific technology decisions and data model |
docs/FEATURES.md | Confirm the feature tier and roadmap phase for what is being built |
If a context-brief.md exists, it contains market-researched features with demand scores, real user stories with acceptance criteria, stakeholder profiles with pain points, and full data model schemas. Use this data directly in artifacts — do not invent features or stories when the brief provides them.
If none of these files exist beyond the standard ADRs, proceed silently — do not block or prompt the user.
Create the change directory
openspec new change "<name>"
This creates a scaffolded change at openspec/changes/<name>/.
Get the artifact build order
openspec status --change "<name>" --json
Parse the JSON to get:
applyRequires: array of artifact IDs needed before implementation (e.g., ["tasks"])artifacts: list of all artifacts with their status and dependenciesCreate artifacts in sequence until apply-ready
Use the TodoWrite tool to track progress through the artifacts.
Loop through artifacts in dependency order (artifacts with no pending dependencies first):
a. For each artifact that is ready (dependencies satisfied):
Skip check: Read the artifact's entry in the schema (openspec schema which conduction to find path, then read schema.yaml). If the artifact has optional: true, evaluate its skipWhen condition against the proposal (and design, if available). If the condition is met, show "⊘ Skipped — " and move to the next artifact. Do NOT create stub files for skipped artifacts.
If not skipped, get instructions:
bash openspec instructions <artifact-id> --change "<name>" --json
context: Project background (constraints for you - do NOT include in output)rules: Artifact-specific rules (constraints for you - do NOT include in output)template: The structure to use for your output fileinstruction: Schema-specific guidance for this artifact typeoutputPath: Where to write the artifactdependencies: Completed artifacts to read for contexttemplate as the structurecontext and rules as constraints - but do NOT copy them into the fileb. Continue until all applyRequires artifacts are complete
openspec status --change "<name>" --jsonapplyRequires has status: "done" in the artifacts arrayapplyRequires artifacts are doneready in the status — this is expectedc. If an artifact requires user input (unclear context):
DEFERRED_QUESTIONS: the question you would have asked, the decision you made, and which artifact it affectedDEFERRED_QUESTIONS list at the end of your output so the parent can follow up with the userShow final status
openspec status --change "<name>"
Output
After completing all artifacts, summarize:
What's Next
Recommended: /opsx-apply — start implementing the tasks
Optional before that:
/opsx-plan-to-issues — create GitHub Issues for progress trackingSpec maintenance: After creating artifacts, check the proposal's ## Capabilities section. For each capability listed under "Modified Capabilities" or "New Capabilities", find (or create) the corresponding spec at openspec/specs/<capability>/spec.md and:
**OpenSpec changes** list (as a new line, after any existing entries, oldest-first ordering)**Status**: in-progress if it was planned or done — a new active change always moves the spec back to in-progressArtifact Creation Guidelines
instruction field from openspec instructions for each artifact typetemplate as a starting point, filling in based on context_registers.json entries from this sectionx-openregister-{lifecycle, aggregations, calculations, notifications, relations, widgets} in the app's lib/Settings/{app}_register.json schema register, NOT as a new lib/Service/*Service.php class. The section lists each behaviour, the chosen path, and the rationale (or the exception per ADR-031 if imperative is justified — external integration, document generation, NLP, domain rule selector, lifecycle guard, or scheduled bulk work that genuinely needs ScheduledWorkflow + n8n rather than a derived field)x-openregister-lifecycle to <Schema> in lib/Settings/{app}_register.json") rather than as new service-class tasks. Reference example: decidesk/lib/Settings/decidesk_register.json (Meeting/Motion/Amendment lifecycles, ActionItem aggregations + calculations, Meeting/Decision notifications)kind: in frontmatter (per ADR-032): one of config (only declarative JSON edits — schema register, manifest, OpenAPI), code (PHP / Vue / TS / etc.), or — if both surfaces are touched — split first. mixed proposals are an anti-pattern: the 2026-05-07 Stage A run showed two mixed specs (quorum + analytics) burned the full 200-turn Sonnet builder budget without producing a PR. Before generating any artifacts for a mixed-shaped description, opsx-ff MUST offer to split into a chain ({slug}-schema-declaration config spec → {slug}-{consumer}-rewrite code spec → {slug}-{obsolete}-deletion code spec) where each subsequent spec lists predecessors in depends_on. Hydra's supervisor blocks dependent specs from building until each named dep's issue is closed (merged), so chains run in correct order automatically. Thin-glue exception: a mixed spec is permitted when the code change is ≤20 LOC across ≤2 files AND tightly coupled to the config change; document the coupling in design.md under "Mixed-spec rationale" (still a yellow flag in review).depends_on: in frontmatter when the spec is part of a chain. Format: list of spec slugs (translated to issue numbers at plan-to-issues time). For kind: config specs that are the head of a chain, narrate the planned chain in the proposal body so reviewers understand the full migration arc.Specs, design docs, and schemas regularly show example JSON / cURL / code with placeholder values for API keys, client UUIDs, auth tokens, webhook secrets, connection strings, etc. These land in the repo as plain markdown — which means the downstream security review runs gitleaks detect against them. Gitleaks' generic-api-key rule matches any string that looks high-entropy. If the example value looks like a real secret, gitleaks flags it as a leaked secret, the reviewer's findings get polluted with false positives, and real signals get lost.
Always use values that obviously mark themselves as placeholders. Never use values that could plausibly be real credentials.
| Category | ✅ Safe (gitleaks ignores) | ❌ Avoid (gitleaks flags as generic-api-key) |
|---|---|---|
| API keys / tokens | YOUR_API_KEY_HERE, xxx-your-token-xxx, <API_KEY>, sk-REPLACE_ME | abc123-my-api-key, sk-1a2b3c4d5e6f7890, any random-looking hex |
| UUIDs | 00000000-0000-0000-0000-000000000000 (nil UUID), <client-uuid>, {uuid} | f47ac10b-58cc-4372-a567-0e02b2c3d479 (RFC example), any realistic-looking UUID |
| Passwords | CHANGE_ME, <PASSWORD>, hunter2 (famously known placeholder) | Anything entropic |
| Bearer tokens | Bearer YOUR_TOKEN_HERE | Bearer eyJhbGci... even if truncated |
| Webhook secrets | WEBHOOK_SECRET_HERE | whsec_ + random hex |
| Connection strings | postgres://user:PASS@host:5432/db (PASS in caps) | postgres://admin:S3cr3tP@ss@host/db |
The rule of thumb: if a reader might wonder "is this a real value someone forgot to redact?", rewrite it. Uppercase placeholder text, <angle-brackets>, or the nil UUID are the three safest forms.
This matters especially in specs/<feature>/spec.md, design.md, and context-brief.md — documents that routinely include API example requests and get copy-pasted into implementation code later.
After artifacts are created, review what happened and append any new observations to learnings.md:
Each entry must include today's date. One insight per bullet. Skip if nothing new was learned.
Guardrails
apply.requires)DEFERRED_QUESTIONS entry MUST be presented to the user via AskUserQuestion, regardless of how reasonable the subagent's provisional decision seems