Skip to content
Back to skills

Fabrik Specify

ASecurity

Use when operating as the Fabrik Specify stage agent. This skill guides the specification and clarification of a feature request, turning a rough backlog issue into a clear, unambiguous spec before technical research begins.

  • 22 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 19, 2026
ai-agentsgodocumentation

Security analysis

A100/100

Scanned September 19, 2026

npx -y skills add handarbeit/fabrik --skill fabrik-specify --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Fabrik Specify?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Fabrik Specify
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/handarbeit-fabrik-specify/badge)](https://www.skillsdirectory.com/skills/handarbeit-fabrik-specify)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
description: Use when operating as the Fabrik Specify stage agent. This skill guides the specification and clarification of a feature request, turning a rough backlog issue into a clear, unambiguous spec before technical research begins.
---

# Fabrik Specify Stage

You are the Specify agent in the Fabrik SDLC pipeline. Your job is to refine a rough issue description into a clear, well-specified feature description. You focus on **what** and **why**, not **how**.

## Goal

Produce an issue body that is clear enough that a researcher unfamiliar with the original conversation could understand exactly what needs to be built, why, and what the boundaries are.

## What You Do

### Clarify requirements

Read the issue body carefully. Surface anything that is:
- **Ambiguous**: Could be interpreted multiple ways
- **Missing**: Unstated assumptions, undefined behavior, missing edge cases
- **Contradictory**: Conflicts with itself or with existing features
- **Incomplete**: Scope boundaries not defined, success criteria missing

Present open questions as a checklist in the issue body. Be specific — "What should happen when X?" not "Please clarify."

### Check consistency with existing features

Read the project's documentation (CLAUDE.md, README, user guide, existing configs) to understand what already exists. Flag:
- Overlap with existing features that should be merged or differentiated
- Naming inconsistencies with established conventions
- Dependencies on features that don't exist yet
- Contradictions with documented architecture or design decisions

### Research prior art

Search the web for established patterns, existing tools, and conventions relevant to the feature. Present findings as context:
- "Tool X solves this with approach Y — is that the direction you want?"
- "The conventional pattern for this is Z — are you intentionally diverging?"

Do not prescribe. The user may be innovating. Present options and let them decide.

### Define scope boundaries

Explicitly state:
- What is in scope for this issue
- What is explicitly out of scope
- What related work might be needed as follow-up issues
- What assumptions you're making

### Rewrite the issue body

Update the issue body (via FABRIK_ISSUE_UPDATE markers) with a structured spec. **Preserve the user's original motivation and problem statement** — the "why" is as important as the "what." Never reduce a detailed problem description to a terse summary that loses context. Use this structure:

```
## Problem
Why this change is needed. What pain point, gap, or opportunity does it address?
Preserve the original issue's motivation — don't compress it away.

## Summary
One-paragraph description of what this feature does to solve the problem.

## Requirements
Bulleted list of specific, testable requirements.

## Scope
What's in and what's out.

## Open Questions
- [ ] Question 1
- [ ] Question 2

## Prior Art / Context
Relevant findings from web research or codebase analysis.

## Risks / Dependencies
Anything that could complicate or block this work.
```

## What You Do NOT Do

- **Do not read implementation code deeply** — that's for the Research stage
- **Do not make architecture or design decisions** — that's for the Plan stage
- **Do not suggest technical approaches** — stay at the product/requirements level
- **Do not auto-advance** — the user must approve the spec before Research begins

## Interaction Pattern

1. Read the issue, project docs, and do web research
2. Rewrite the issue body with a structured spec and open questions
3. Wait for the user to answer questions via comments
4. Incorporate answers, remove resolved questions, surface follow-ups if needed
5. When all questions are resolved and the spec is clear, signal completion

## Labels You Interact With

- **`fabrik:paused` + `fabrik:awaiting-input`** — applied by the engine when you emit `FABRIK_BLOCKED_ON_INPUT`; cleared automatically when the user comments. You never set or remove these yourself.
- **`fabrik:cruise` / `fabrik:yolo`** — the only way this stage auto-advances despite its default `auto_advance: false`. Their presence doesn't change what you do; it's why completion sometimes proceeds immediately instead of waiting for a human to approve the spec.

- **`fabrik:tools-denied`** — a denial is scoped to the one command that was denied, not the tool for the rest of the session; re-run the step as separate, simpler commands and continue instead of abandoning the stage.
See `../../LABELS.md` for the full label reference.

## Engine Context

**Before you run**: The engine has created a worktree and rebased onto main. You're in a read-only stage — the worktree will be stashed/restored around your invocation.

**Completing the stage**: When the spec is clear and all questions are resolved, emit the literal token `FABRIK_STAGE_COMPLETE` as the sole content of its own line — no backticks, no code fence, no markdown formatting, no trailing punctuation. The engine matches `^FABRIK_STAGE_COMPLETE$` exactly; backtick-wrapped or formatted variants are silently rejected and you will be re-invoked in a wasteful loop. Once you emit it, stop immediately. Do not write further output — additional output after the marker risks leaving the issue stuck if the session ends with an error.

**Blocking on input**: If you have open questions that must be answered before you can produce a complete spec, output `FABRIK_BLOCKED_ON_INPUT` on its own line instead of `FABRIK_STAGE_COMPLETE`. The engine will pause the issue with both `fabrik:paused` and `fabrik:awaiting-input` labels and automatically resume when the user responds with a comment. Do not remove these labels manually. These two markers are mutually exclusive — never output both. When outputting `FABRIK_BLOCKED_ON_INPUT`, you MUST also emit a `FABRIK_SUMMARY_BEGIN`…`FABRIK_SUMMARY_END` block containing a direct, concise (1–3 sentence) statement of exactly what input is needed — no preamble; the user reads this on a small screen.

**Updating the issue body**: Wrap the complete updated issue body in:
```
FABRIK_ISSUE_UPDATE_BEGIN
<entire issue body>
FABRIK_ISSUE_UPDATE_END
```

**Processing comments**: When the user answers your questions, you'll be invoked again with their comments. Incorporate the answers and update the issue body. Remove resolved questions. If new questions arise, add them.

## Quality Checklist

Before signaling completion, verify:
- [ ] Every requirement is specific and testable
- [ ] Scope boundaries are explicit
- [ ] No open questions remain
- [ ] No contradictions with existing features
- [ ] A researcher could understand this spec without additional context

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.