voice-generate
Generates text in a learned writing voice Skill: voice-generate Owner: athola Summary: Generates text in a learned writing voice Tags: latest:1.9.19 Version history: v1.9.19 | 2026-08-26T13:22:29.704Z | user Release v1.9.19 v1.9.17 | 2026-07-30T05:42:22.863Z | user Release v1.9.17 v1.9.16 | 2026-07-14T19:59:13.123Z | user Release v1.9.16 v1.9.14 | 2026-06-30T18:06:44.869Z | user Release v1.9.14 v1.9.13 | 2026-06-27T16:24:27.328Z | user Release v1.9.13 v1.9.1
Rank
62
Safety
84
Downloads
968
Updated
Oct 12, 2026
Version
1.9.19
Source
CLAWHUB
About
What it does, and when to use it.
Capability contract not published. No trust telemetry is available yet. 968 downloads reported by the source. Last updated 10/12/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 12, 2026
- Protocol compatibility
- OpenClawcompatibility · observed Oct 12, 2026
- Adoption signal
- 968 downloadsadoption · observed Oct 12, 2026
- Latest release
- 1.9.19release · observed Aug 26, 2026
- Handshake status
- UNKNOWNsecurity
What changed
Newest first. Only changes that point at a source are listed.
Release 1.9.19release
Release v1.9.19
Observed Aug 26, 2026 · source
Install and run
Setup complexity: low.
clawhub skill install s17emme0e2m3cpf7k2jvp3a84984b8z9:nm-scribe-voice-generate- Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.
- 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-athola-nm-scribe-voice-generate/snapshot"
Run-check
$0.02 USD1 measured facts are behind this paywall: success rate and latency, uptime and estimated cost, when not to use it, how to call it, benchmark scores.
Agents pay $0.02 in USDC. A card payment is $0.50, the smallest a card allows.
Documentation
CLAWHUB
87,159 characters of source documentation, loaded on request.
Extracted files
5 files captured from the source.
SKILL.md
---
name: voice-generate
description: Generates text in a learned writing voice
version: 1.9.8
triggers:
- voice
- generation
- style-transfer
- writing
- registers
- drafting content that must match a specific author's style profile extracted by voice-extract
metadata: {"openclaw": {"homepage": "https://github.com/athola/claude-night-market/tree/master/plugins/scribe", "emoji": "\u270d\ufe0f", "requires": {"config": ["night-market.scribe:voice-extract", "night-market.scribe:slop-detector"]}}}
source: claude-night-market
source_plugin: scribe
---
> **Night Market Skill** — ported from [claude-night-market/scribe](https://github.com/athola/claude-night-market/tree/master/plugins/scribe). For the full experience with agents, hooks, and commands, install the Claude Code plugin.
# Voice Generation Skill
Generate text in a user's extracted writing voice.
## Core Principle: Source Material Framing
The single largest variable in output quality is how source
material is framed in the prompt. Material framed as "raw
notes I'm still thinking through" produces text that feels
like thinking. Material framed as summaries produces reporting.
Always frame user-provided source material as raw notes unless
the user explicitly requests otherwise.
## Required TodoWrite Items
1. `voice-generate:profile-loaded` - Voice profile read
2. `voice-generate:register-selected` - Register chosen
3. `voice-generate:source-framed` - Material framed as notes
4. `voice-generate:generated` - Text produced
5. `voice-generate:review-dispatched` - Sent to review agents
## Step 1: Load Voice Profile
```bash
PROFILE_DIR="$HOME/.claude/voice-profiles/{name}"
```
Read in order:
1. `extraction.md` - Core voice features
2. `registers/{register}.md` - Active register
3. `craft-rules.md` - Shared craft techniques (if exists)
4. `banned-phrases.md` - Anti-patterns to avoid (if exists)
Check for per-project override:
```bash
if [ -f ".voice/override.md" ]; then
# Merge project overrides with profile
fi
```
## Step 2: Register Selection
Load: `@modules/register-selection`
Select register by:
1. Explicit user request ("use casual register")
2. Context matching from register metadata
3. Default fallback to `registers/default.md`
## Step 3: Frame Source Material
Load: `@modules/source-framing`
**Default framing** (always use unless user overrides):
```
Below are my rough notes on this topic. I'm still thinking
through these ideas. Use them as the raw material for the
piece, not as a structure to follow:
---
{user_provided_source_material}
---
```
**Alternative framings** (only if user requests):
- "structured outline" - when user wants to preserve structure
- "key points to cover" - when user provides bullet points
- "conversation to draw from" - when source is a transcript
## Step 4: Generation Prompt
Compose the generation prompt:
```
You are writing a piece in a specific voice. The voice
features below were extracted from the writer's own work.
Follow them_meta.json
{
"ownerId": "kn7d107jg9jv602h9ytsegydq184a42s",
"slug": "nm-scribe-voice-generate",
"version": "1.9.19",
"publishedAt": 1787750549704
}modules/generation-pipeline.md
---
module: generation-pipeline
category: voice-generation
dependencies: [Read, Write, Agent]
estimated_tokens: 500
---
# Generation Pipeline Module
End-to-end generation flow from source material to reviewed text.
## Pipeline Stages
```
Source Material
|
v
[Frame as raw notes]
|
v
[Load profile + register + craft rules]
|
v
[Generate with Opus]
|
v
[Auto-fix: banned phrases, em dashes]
|
v
[Snapshot: pre-review] (if learning active)
|
v
[Dispatch review agents] (optional)
|
v
[Present advisories to user]
|
v
[Apply user decisions]
|
v
[Snapshot: post-review] (if learning active)
|
v
Final text (user may edit further)
|
v
[/voice-learn captures post-edit] (user-triggered)
```
## Auto-Fix Rules (Silent)
Applied immediately after generation, before review:
```bash
# Em dash replacement (context-aware)
# Before a clause: use comma or colon
# Parenthetical: use parentheses
# List separator: use semicolons
# Banned phrase removal
# "Furthermore," -> "" (start sentence without it)
# "It's important to note" -> "" (remove entirely)
# "delve" -> "explore" or "examine"
# "utilize" -> "use"
# "leverage" -> "use" or remove
# "comprehensive" -> "thorough" or "complete"
# "robust" -> "solid" or remove
# "seamless" -> "smooth" or remove
```
## Model Routing
| Stage | Model | Reason |
|-------|-------|--------|
| Generation | Opus | Tonal shifts, parenthetical subversion |
| Auto-fix | Regex/local | No model needed |
| Prose review | Sonnet | Structured detection prompts |
| Craft review | Sonnet | Structured evaluation prompts |
| Learning analysis | Opus | Nuanced pattern comparison |
## Error Recovery
If generation fails quality checks (> 5 hard failures):
1. Re-generate with stronger emphasis on banned phrases
2. If second attempt still fails, present to user with warning
3. Never loop more than twice (prevents infinite retry)
## Streaming Considerations
For long-form content (> 1000 words):
- Generate in sections (one per major heading)
- Apply auto-fix per section
- Allow user to review section-by-section or all at once
- Snapshot captures the complete assembled textmodules/register-selection.md
---
module: register-selection
category: voice-generation
dependencies: [Read, Bash]
estimated_tokens: 300
---
# Register Selection Module
Choose the appropriate voice register for generation.
## Selection Priority
1. **Explicit request**: User says "use casual register"
2. **Context match**: Register metadata matches the task
3. **Default**: Fall back to `registers/default.md`
## Context Matching
Each register file has a `## Context` section describing
when to use it. Match against the user's stated purpose:
```
User: "Write a blog post about..." -> default or narrative
User: "Draft a technical doc for..." -> technical
User: "Reply to this Reddit thread..." -> casual
User: "Write an email to my team..." -> professional
```
## Register Loading
```bash
PROFILE_DIR="$HOME/.claude/voice-profiles/$PROFILE_NAME"
REGISTER_FILE="$PROFILE_DIR/registers/${REGISTER_NAME}.md"
if [ ! -f "$REGISTER_FILE" ]; then
echo "Register '$REGISTER_NAME' not found. Available:"
ls "$PROFILE_DIR/registers/"
echo "Using default register."
REGISTER_FILE="$PROFILE_DIR/registers/default.md"
fi
```
## Inheritance
Non-default registers inherit from default unless they
explicitly override a section. When loading a non-default
register:
1. Read `default.md` as base
2. Read `{name}.md` for overrides and additions
3. Merge: override sections replace, additions append
## Listing Available Registers
When user asks what registers exist:
```bash
echo "Available voice registers for $PROFILE_NAME:"
for f in "$PROFILE_DIR/registers/"*.md; do
name=$(basename "$f" .md)
context=$(grep -A1 "^## Context" "$f" | tail -1)
echo " $name: $context"
done
```modules/source-framing.md
---
module: source-framing
category: voice-generation
dependencies: []
estimated_tokens: 400
---
# Source Framing Module
How source material is framed in the prompt is the single
largest variable in output quality. Larger than voice rules.
Larger than model choice.
## The Framing Lever
When material is framed as "raw notes I'm still thinking
through," the output is dramatically better than when framed
as "a transcript to draw on" or a bare topic sentence.
The framing changes how the model relates to the material:
- Notes to think through -> text that feels like thinking
- Summaries to report on -> text that feels like reporting
- Transcripts to draw from -> text that feels like paraphrase
## Default Framing (always use)
```
Below are my rough notes on this topic. I'm still working
through these ideas and haven't settled on a final structure.
Use them as raw material for thinking, not as an outline
to follow:
---
{source_material}
---
Write a piece that engages with these ideas in the voice
described above. You don't need to cover everything in the
notes. Follow where the interesting threads lead.
```
## When User Provides Structured Input
If the user gives bullet points or an outline, still
reframe as notes:
```
Below are my working notes. These bullet points represent
threads I'm pulling on, not a structure to reproduce:
---
{bullet_points}
---
```
## When User Provides a Topic Only
If just a topic sentence or phrase:
```
I want to write about: {topic}
Here's what I'm thinking so far: I don't have notes yet,
but the angle I'm interested in is {topic}. Write an
exploratory piece that discovers its argument as it goes.
```
## Override Framings
Only use these if the user explicitly requests a different
relationship to the source material:
### "Preserve my structure"
```
Below is an outline I want to follow. Keep the structure
but write each section in the voice described above:
```
### "Respond to this"
```
Below is something I'm responding to. Write a response
in the voice described above:
```
### "Expand these points"
```
Below are key points I want to develop. Expand each one
into full prose in the voice described above:
```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!
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.
CopilotKit
The Frontend for Agents & Generative UI. React + Angular
Machine-readable data
The same record, as JSON, for agents and crawlers.
- Card JSON
- Facts JSON
- Snapshot JSON
- Contract JSON
- Trust JSON
- Changes JSON
- Warnings JSON
- Seen by JSON
- Disagreements JSON
{
"facts": [
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/athola/skills/nm-scribe-voice-generate",
"sourceUrl": "https://clawhub.ai/athola/skills/nm-scribe-voice-generate",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-12T00:24:24.802Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-voice-generate/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-voice-generate/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-12T00:24:24.802Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "968 downloads",
"href": "https://clawhub.ai/athola/nm-scribe-voice-generate",
"sourceUrl": "https://clawhub.ai/athola/nm-scribe-voice-generate",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-12T00:24:24.802Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "1.9.19",
"href": "https://clawhub.ai/athola/nm-scribe-voice-generate",
"sourceUrl": "https://clawhub.ai/athola/nm-scribe-voice-generate",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-08-26T13:22:29.704Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-voice-generate/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-voice-generate/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
],
"events": [
{
"eventType": "release",
"title": "Release 1.9.19",
"description": "Release v1.9.19",
"href": "https://clawhub.ai/athola/nm-scribe-voice-generate",
"sourceUrl": "https://clawhub.ai/athola/nm-scribe-voice-generate",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-08-26T13:22:29.704Z",
"isPublic": true
}
]
}Record generated Oct 12, 2026.
For crawlers
This page is free to read. The run-check above is the only paid part, and it answers HTTP 402 until it is paid. Everything else here is public.
- One record, as JSON: card, facts, snapshot, contract, trust, changes, warnings, seen by, disagreements.
- Every agent, one feed: /.well-known/ai-catalog.json
- What this site sells, and the price: /.well-known/x402
- Paid run-check: /api/v1/agents/clawhub-athola-nm-scribe-voice-generate/run-check
