Install
$ agentstack add skill-siddiqss-semantic-seo-suite-semantic-draft-writer ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
semantic-draft-writer
Turn a brief into publishable copy that is deep, specific, extractive, and — the part other tools skip — factually honest. "Passes the validator" is the floor, not the goal: the goal is a piece genuinely worth reading. The draft is done when it is fabrication-clean AND clears the quality bar (or its remaining gaps are explicitly surfaced).
Read first: ../../framework/semantic-writing-rules.md (especially the Craft & depth rules 22–28), ../../framework/macro-micro-semantics.md. Load the brief, the node, brands//locked-facts.json, and entity-profile.json (for voice/audience).
Workflow
- Scope depth and surface fact gaps FIRST. Before writing, list the concrete
specifics a strong piece needs — real examples, named entities, figures, a point of view — and check them against locked-facts.json + the brief. If the piece can only be written generically because the facts aren't there, that is a signal to ask the user for the missing specifics (real customer result, actual feature names, a workflow detail) rather than writing vague filler. Thin facts are the #1 cause of thin drafts.
- Front-matter first. Emit the required block (semantic-writing-rules.md): node_id,
targetquery, intent, entitiescovered, internallinks, schematype, lockedfactsused (start empty), sources (start empty).
- Draft for a reader, section by section along the brief's contextual vector. Lead a
section with the extractive answer (rules 3–4) THEN go deep: mechanism, a concrete example (rule 23), a trade-off, a real point of view (rule 26). Do not turn every H2 into a tiny Q&A (rule 27) — vary the shape. Declarative, specific, filler-free.
- Honour the locks while writing:
- State a brand fact ONLY if it exists in
locked-facts.json; when you use one, add
its key to locked_facts_used.
- State an external factual number ONLY with a citation; add the URL to
sources. - Where a figure would help but isn't grounded, write the honest version (mechanism/
range/"depends on…") — never invent one. Pull from the brief's do_not_fabricate.
- Insert internal links from the brief with varied, descriptive anchors
(internal-linking-rules.md).
- Editorial self-critique pass (before the gates). Re-read the draft as a skeptical
editor: Which section is thin? Where is there no example? What's the non-obvious point, and is it actually there? Cut every filler sentence. Rewrite the weakest section. Do this once before running the scorers — the gates confirm quality, they don't create it.
- Three-gate loop — fabrication is a hard gate; quality is the target; AEO is a floor:
`` # (a) HARD GATE — must be 0 high, or surface remaining violations python ../../scripts/validate_draft.py --draft \ --locked brands//locked-facts.json --brief brands//briefs/.json \ --brand-terms "" --json # (b) QUALITY — the number to optimize (target >= 80) python ../../scripts/draft_quality.py --draft --floor --json # (c) AEO — a FLOOR to clear (target >= 80), NOT a number to maximize python ../../scripts/aeo_score.py --draft --schema-dir brands//data/schema --json ` Repair in priority order: fabrication first (never fix a fabrication by inventing a source — tell the truth or cut the claim); then work the draft_quality.py` fixes (deepen shallow sections, add the missing examples, cut filler, reach length through depth); then confirm AEO ≥ ~80. Do not sacrifice depth to push AEO past ~85 — a formulaic all-Q&A page is the failure mode this loop exists to prevent. Repeat ~2–4×.
- Surface, don't hide. If violations or an unavoidable quality gap remain (e.g. the
piece stays generic because a brand fact the user hasn't confirmed is missing), STOP and list them with the exact sentences and the specific facts you need — rather than shipping filler or faking a source. These usually map to _pending_owner_confirmation.
- Emit
brands//drafts/.md; set nodestatus: drafted.
Definition of done
validate_draft.py: 0 high-severity violations (or remaining ones surfaced with rationale).draft_quality.py: >= 80 — every section has depth and a concrete example; filler
is gone; length reached through substance. This is the bar the writer is judged on.
aeo_score.py: >= 80 (floor cleared; not maximized at the cost of depth).- Front-matter accurate; reads as a genuine expert with a point of view, not a padded FAQ.
Grounding ladder
- T0: research external facts via web_search (cite them); brand facts from locked
ledger only.
- T1+: same rules; richer sourcing. Grounding tier never relaxes the fabrication
guard — it only changes where legitimate numbers come from.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: siddiqss
- Source: siddiqss/semantic-seo-suite
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.