Voice and skills

Every org has a voice profile that shapes how content sounds. The voice profile includes:

Voice and skills

Voice profile

Every org has a voice profile that shapes how content sounds. The voice profile includes:

SettingPurposeExample
voice_personaWho is speaking”Senior DevOps engineer who’s seen it all”
voice_audienceWho you’re writing for”Platform engineers at mid-size startups”
voice_toneHow it should feel”Direct, slightly irreverent, technically precise”
voice_brand_keywordsWords to include naturally”reliability, developer experience, shift-left”

Configuring voice

PATCH /api/settings/voice
{
  "voice_persona": "Senior DevOps engineer who's seen it all",
  "voice_audience": "Platform engineers at mid-size startups",
  "voice_tone": "Direct, slightly irreverent, technically precise",
  "voice_brand_keywords": "reliability, developer experience, shift-left"
}

How voice works in generation

When Claude generates content:

  1. The voice profile is injected into the system prompt
  2. Approved content examples demonstrate the target voice
  3. Spiked content examples show what to avoid
  4. The humanizer enforces voice consistency as a final pass

Per-member voices

Team members can have their own voice profiles. When generating from a story with team_member_id, the member’s voice is used instead of the org default.

Skills

Skills are Claude prompt templates stored as markdown files. They define specialized processing steps that can be invoked on text.

Core skills (wired into the pipeline)

humanizer.md — Runs automatically after content generation.

Removes AI patterns:

  • Copula avoidance, em-dash overuse, rule-of-three lists
  • Promotional language (“game-changing”, “revolutionary”)
  • Vague attribution (“experts say”)
  • AI vocabulary (delve, tapestry, paradigm, leverage, nuanced)

Adds voice texture:

  • Specific opinions
  • Acknowledged gaps in knowledge
  • Concrete examples from the industry

seo_geo.md — Used during SEO audits.

Checks technical SEO, GEO visibility factors (Princeton methods), E-E-A-T scoring, and AI bot access.

Custom skills

Create your own skills for specialized processing:

POST /api/skills
{
  "name": "competitor_angle",
  "content": "# Competitor Angle Skill\n\nWhen given content, reframe it to..."
}

Invoking skills

Run any skill on arbitrary text:

POST /api/skills/invoke/{skill_name}
{"text": "The text to process..."}

Managing skills

EndpointAction
GET /api/skillsList all skills
GET /api/skills/{name}Read skill content
PUT /api/skills/{name}Update skill prompt
POST /api/skillsCreate new skill
DELETE /api/skills/{name}Delete skill (core skills protected)

Writing effective skills

A skill markdown file should include:

  1. Title and purpose — When to invoke this skill
  2. Input expectations — What kind of text it processes
  3. Step-by-step instructions — What Claude should do
  4. Output format — What the result should look like
  5. Examples (optional) — Before/after pairs

Skills are managed in Settings > Skills or via the API.