adversarial-spec
Adversarial specification writer. Takes a brief (from grill-me or user) and produces a structured spec.md with YAML frontmatter, requirements, acceptance criteria, and target files. Git-aware pipeline: each run on its own branch, squash-merge on approval. Skill: adversarial-spec Owner: chpomob Summary: Adversarial specification writer. Takes a brief (from grill-me or user) and produces a structured spec.md with YAML frontmatter, requirements, acceptance criteria, and target files. Git-aware pipeline: each run on its own branch, squash-merge on approval. Tags: latest:0.1.0 Version history: v0.1.0 | 2026-08-03T18:11:30.582Z | auto - Initial public release of adversarial
Rank
62
Safety
84
Downloads
2.7k
Updated
Oct 9, 2026
Version
0.1.0
Source
CLAWHUB
About
What it does, and when to use it.
Capability contract not published. No trust telemetry is available yet. 2.7K downloads reported by the source. Last updated 10/9/2026.
Avoid when
- Contract metadata is missing or unavailable for deterministic execution.
Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing
Public facts
Every fact links back to the source it came from.
- Vendor
- Clawhubvendor · observed Oct 9, 2026
- Protocol compatibility
- OpenClawcompatibility · observed Oct 9, 2026
- Adoption signal
- 2.7K downloadsadoption · observed Oct 9, 2026
- Latest release
- 0.1.0release · observed Aug 3, 2026
- Handshake status
- UNKNOWNsecurity
Install and run
Setup complexity: low.
clawhub skill install s17435m3chty5jmw4jhpkyhnb58brn8g:adversarial-spec- Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.
- Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Contract: missing
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-chpomob-adversarial-spec/snapshot"
Documentation
CLAWHUB
57,288 characters of source documentation, loaded on request.
Extracted files
5 files captured from the source.
SKILL.md
---
name: adversarial-spec
description: "Adversarial specification writer. Takes a brief (from grill-me or user) and produces a structured spec.md with YAML frontmatter, requirements, acceptance criteria, and target files. Git-aware pipeline: each run on its own branch, squash-merge on approval."
version: 1.1.0
author: Hermes Agent
license: 0BSD
platforms: [linux, macos]
metadata:
hermes:
tags: [adversarial, spec, planning, specification, requirements]
related_skills: [grill-me, adversarial-plan, adversarial-code-loop]
---
# Adversarial Spec
**Brief → structured specification.** Two-role adversarial pipeline that transforms a
vague idea (from grill-me or direct input) into a formal spec.md with YAML frontmatter,
requirements, acceptance criteria, and target file descriptions.
## Installation
Requires the `adversarial-common` sibling repo (shared engine). One-line install:
curl -fsSL https://raw.githubusercontent.com/chpomob/adversarial-spec/main/scripts/install.sh | bash
or, from an existing checkout:
bash scripts/install.sh
Both place adversarial-spec and adversarial-common side by side under `~/.hermes/skills` (override the target with `$1` or `$HERMES_HOME`).
## Workflow
```
PHASE 0 ──→ GIT SETUP (branch, stash, init)
PHASE 1 ──→ WRITE (spec-writer reads brief, writes spec.md)
PHASE 2 ──→ CHALLENGE (spec-challenger critiques for gaps/contradictions)
PHASE 3 ──→ REVISE (spec-writer amends spec.md per findings)
PHASE 4 ──→ VERIFY (spec-challenger checks findings resolved)
MERGE ──→ squash-merge (APPROVED) or [REJECTED] commit
```
## CLI
```bash
python3 scripts/adversarial_spec.py \
--brief <file> # brief file (default: stdin)
--dev-cmd <cmd> # default: pi --provider zai --model glm-5.2
--review-cmd <cmd> # default: pi --provider deepseek --model deepseek-v4-pro
--workdir <dir> # default: .
--max-loops <N> # default: 2
--feature <name> # default: from brief filename
--timeout <N> # default: 600
--out <dir> # default: .adversarial-spec
--provider-config <path> # external provider config (default: ~/.config/adversarial/providers.yaml)
--no-merge
```
## Pre-flight checklist (orchestrator)
Run these BEFORE writing the brief, especially when contributing to an upstream project:
1. **Check CONTRIBUTING.md** — Project-specific rules for branch naming (`feat/`, `fix/`, `docs/`), commit message format (Conventional Commits), PR template fields, and test requirements. Incorporate these into the spec's acceptance criteria.
2. **Check for pre-existing PR review feedback** — If the feature already has an open PR with reviewer comments (automated or human), read the findings and incorporate them into the brief. The spec should address what the review flagged, not re-propose rejected patterns.
3. **Choose the right parent branch** — For upstream contributions, create a feature branch from `upstream/main` (not your fork's main): `git checkoutREADME.md
# adversarial-spec
**Brief → structured spec.** Two-role adversarial pipeline that takes a product brief, specification request, or feature idea and produces a `spec.md` with YAML frontmatter, numbered requirements, and acceptance criteria.
For Hermes Agent, Claude Code, Codex, or any LLM CLI.
## How it works
```
PHASE 1 ──→ WRITE (spec-writer turns brief into structured spec.md)
PHASE 2 ──→ CHALLENGE (spec-challenger attacks for gaps, contradictions, untestable criteria)
PHASE 3 ──→ REVISE (spec-writer amends per findings)
PHASE 4 ──→ VERIFY (spec-challenger checks findings resolved)
MERGE ──→ squash-merge (APPROVED) or [REJECTED] commit
```
## Output format
```yaml
---
name: "feature-name"
version: "1.0"
author: "adversarial-spec"
status: "draft"
targets:
- file: path/to/file
description: "What this file must do"
---
## Requirements
- R1: …
- R2: …
## Acceptance criteria
- AC1 (R1): …
- AC2 (R2): …
```
Specs are consumed by `adversarial-plan` for planning and `adversarial-code-loop` for implementation.
## Comparison
| Feature | adversarial-spec | zscole/adversarial-spec |
|---------|-----------------|----------------------|
| Structured frontmatter | ✅ YAML + targets + requirements | ❌ Free-form |
| Acceptance criteria | ✅ Per-requirement ACs | ❌ |
| Git-native pipeline | ✅ Branch-per-spec, squash-merge | ❌ Single file |
| plan/code-loop integration | ✅ Direct feed to plan + loop | ❌ Standalone |
## Quick start
```bash
python3 scripts/adversarial_spec.py \\
--brief /path/to/brief.md \\
--dev-cmd "<your-dev-cmd>" \\
--review-cmd "<your-review-cmd>"
```
## Dependencies
- Python ≥ 3.11
- Git ≥ 2.5
- Two LLM CLIs (spec-writer + spec-challenger)
Uses `adversarial-common` as the shared engine.
## License
0BSD — see [LICENSE](LICENSE)._meta.json
{
"ownerId": "kn7e26az9x7m8bgwfwg90q1wkh8bsqw0",
"slug": "adversarial-spec",
"version": "0.1.0",
"publishedAt": 1785780690582
}references/adversarial-2026-07-14-pre-publication-review.md
# Pre-Publication Adversarial Review — adversarial-spec (2026-07-14) **Scope:** Full `--project-dir` review of `adversarial-spec` (10 Python files, ~1.8 KLOC). **Models:** Claude Fable 5 (Architect + Synthesis), Codex GPT-5.6-Sol (Inspector + Cross). **Privacy pre-scan:** Clean — no hardcoded paths, credentials, or personal info. **Verdict:** REQUEST_CHANGES (both reviewers, before synthesis). ## Findings Summary | Bucket | Count | Severities | |--------|-------|-----------| | Architect | 10 | 1 major, 5 minor, 4 nit | | Inspector | 10 | 1 blocker, 7 major, 1 minor, 1 nit | | **Total unique** | **20** | **1 blocker, 8 major, 6 minor, 5 nit** | ## Architect Findings (Claude Fable 5) | ID | Severity | File | Summary | |----|----------|------|---------| | A1 | **major** | `scripts/adversarial_spec.py:138` | Stash stranded if `_setup_git` fails after `stash_dirty` — error path returns without `stash_id`, `_restore()` in `finally` can't pop it, user's uncommitted work silently lost | | A2 | minor | `scripts/adversarial_spec.py:260` | Verifier REJECT-with-all-settled causes non-converging re-litigation — `remaining` is empty so `findings` stays at full list, next round revises already-settled findings → exhausts `max_loops` → REJECT | | A3 | minor | `scripts/adversarial_spec.py:100` | `final.json` contract broken on infra failures — `_phase_failed` returns `EXIT_INFRA` without calling `write_final_json`, caller polls stale or absent artifact | | A4 | minor | `scripts/adversarial_spec.py:355` | Artifacts dir keyed only by feature name — reruns silently overwrite `final.json`, `ISSUES.md`, etc. across runs of the same feature | | A5 | minor | `scripts/adversarial_spec.py:165` | APPROVED exit code (0) masks failed squash-merge — `_finish` catches `GitError`, sets `merged=false` in JSON, but still returns 0 | | A6 | minor | `scripts/adversarial_spec.py:385` | Stash-pop after squash-merge can conflict when user's dirty tree touched the same files — no conflict detection or specific warning | | A7 | nit | `_retrospective/ISSUES.md:3` | Stale claim that failures are auto-appended to this file — actually goes to `<out_dir>/ISSUES.md` now | | A8 | nit | `scripts/adversarial_spec.py:78` | `_ensure_ids` dedup generates awkward compound ids like `S1-3-3` | | A9 | nit | `scripts/phases/phase_verify.py:55` | Prompt hard-codes `git diff HEAD~1..HEAD` — wrong if writer CLI made multiple commits | | A10 | nit | `scripts/phases/phase_challenge.py:44` | Full spec embedded in prompt with no size guard — large specs can overflow context window | ## Inspector Findings (Codex GPT-5.6-Sol) | ID | Severity | File | Summary | |----|----------|------|---------| | B1 | **blocker** | `scripts/adversarial_spec.py:185` | Git finalization failure still returns exit 0 — CI receives success despite `merged=false` | | B2 | **major** | `scripts/adversarial_spec.py:127` | Stash restoration failure doesn't change exit result — `_restore` only warns, `main` returns EXIT_APPROVED whil
references/claude-timeout-notes.md
# Claude Fable 5 Timeout Notes This is a provider-specific operational record, not provider-selection policy. Provider choice and fallback ordering come from external configuration. When using Claude Fable 5 as spec-challenger or plan-challenger: - Extended thinking takes 8-12 min per response - The default adversarial-spec/adversarial-plan timeout of 600s is often insufficient - Increase `--timeout` to at least 1200 when Claude is the `--review-cmd` - Pair with `--hard-timeout 1800` inside the claude-tmux command - If Claude exits code 3 (REJECT) due to non-parseable JSON, the output artifact may contain conversation text instead of JSON — retry using the next eligible provider from external configuration Validated: 2026-07-10, adversarial-spec with Claude Fable 5 succeeded at 1200s timeout.
activepieces
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
cherry-studio
AI productivity studio with smart chat, autonomous agents, and 300+ assistants.
AionUi
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!
CopilotKit
The Frontend for Agents & Generative UI. React + Angular
Machine-readable data
The same record, as JSON, for agents and crawlers.
{
"facts": [
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/chpomob/skills/adversarial-spec",
"sourceUrl": "https://clawhub.ai/chpomob/skills/adversarial-spec",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-09T11:52:55.999Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-chpomob-adversarial-spec/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-chpomob-adversarial-spec/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-09T11:52:55.999Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "2.7K downloads",
"href": "https://clawhub.ai/chpomob/adversarial-spec",
"sourceUrl": "https://clawhub.ai/chpomob/adversarial-spec",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-09T11:52:55.999Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "0.1.0",
"href": "https://clawhub.ai/chpomob/adversarial-spec",
"sourceUrl": "https://clawhub.ai/chpomob/adversarial-spec",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-08-03T18:11:30.582Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-chpomob-adversarial-spec/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-chpomob-adversarial-spec/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
],
"events": [
{
"eventType": "release",
"title": "Release 0.1.0",
"description": "- Initial public release of adversarial-spec: structured, adversarial specification writer. - Transforms a brief into a formal spec.md with YAML frontmatter, requirements, acceptance criteria, and target files. - Git-aware pipeline with automatic branching, phase-driven challenge and revision loop, and squash-merge on approval. - CLI supports selectable writer/reviewer commands, provider registries, and robust configuration. - Emphasizes disk-based, English-only spec handling and clear prompt separation—no embedding of spec text in prompts. - Includes comprehensive pre-flight checklist and persona-based workflow for clear, repeatable spec development.",
"href": "https://clawhub.ai/chpomob/adversarial-spec",
"sourceUrl": "https://clawhub.ai/chpomob/adversarial-spec",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-08-03T18:11:30.582Z",
"isPublic": true
}
]
}Record generated Oct 9, 2026.
