Voice and style profile

Returns typed style records with their source-note evidence. Use style_profile (POST /v1/style/profile) when an AI tool needs to write in this person's voice (résumé bullets, cover letters, bios, talks, email drafts) without prompt-stuffing the source corpus.

Style records are real graph entities with provenance, confidence, and edges back to the notes they were learned from. They are not summarised paragraphs of advice; they are structured rules a writing agent can reason over.

  • Three categories: style_observation, style_preference, vocabulary_rule.
  • Every record carries the evidence-note ids it was extracted from.
  • Optional scope filter narrows to a specific writing context (e.g. technical-writing, formal-writing).
  • Optional sourceRunId filter narrows to records extracted from a single ingest run, useful for showing what a fresh thesis or essay actually contributed to the voice.

Example

{ "scope": "technical-writing", "limit": 8 }

Every response carries four parts:

Observations

Descriptive patterns the distiller noticed. Each carries an optional consumerGuidance field so an agent can act on it directly.

[
  {
    "id": "a01f…",
    "type": "style_observation",
    "category": "structural",
    "scope": ["technical-writing"],
    "pattern": "Prefers concrete nouns over abstractions; opens paragraphs with the subject acting.",
    "consumerGuidance": "Start sentences with the actor; avoid passive scaffolding.",
    "confidenceKind": "asserted",
    "confidenceScore": 0.82,
    "evidenceNoteIds": ["9b2c…", "11ee…"],
    "rationale": "Across five distilled paragraphs the subject-first pattern held."
  }
]

Preferences

Prescriptive rules: what the writer wants downstream output to do or avoid.

[
  {
    "id": "b22d…",
    "type": "style_preference",
    "category": "framing",
    "scope": ["technical-writing", "formal-writing"],
    "preference": "Frame the Northstar work as cross-functional delivery, not just a product launch.",
    "strictness": "strong",
    "confidenceKind": "user-asserted",
    "confidenceScore": 1.0,
    "evidenceNoteIds": ["7a8b…"],
    "rationale": "Direct user-context assertion."
  }
]

Vocabulary rules

Specific terms, casing, or substitutions the writer cares about.

[
  {
    "id": "c44e…",
    "type": "vocabulary_rule",
    "category": "casing",
    "scope": ["technical-writing"],
    "term": "Northstar",
    "rule": "Capitalize as a proper noun; never split into two words.",
    "strictness": "strong",
    "confidenceScore": 0.9,
    "evidenceNoteIds": ["9b2c…"]
  }
]

Evidence notes

For every style record above, the evidence-note excerpts behind it, so an agent can quote real voice rather than paraphrasing rules.

[
  {
    "id": "9b2c…",
    "sourceRunId": "f1a3…",
    "sourceKind": "blog-post",
    "snippet": "We did not pitch Northstar as a product launch. We pitched it as a cross-functional delivery effort that unified Product, Design, and Operations …",
    "styleDescription": "Technical, declarative, foregrounds the subject."
  }
]

Filtering

Filter Behaviour
scope Returns only records whose scope array contains the requested value
sourceRunId Returns only records extracted from the given source run
limit Caps each of the three record buckets independently (default 8, max 50)

Filters are non-destructive: if scope matches no records, you get empty arrays plus the evidence notes for any matched records (which will also be empty in that case).

Building a style guide

A writing agent can compose observations + preferences + vocabularyRules into a short style guide, then back-cite using evidenceNoteIds. The local CLI's marrow style eval-plan and marrow style eval-run build blind A/B writer prompts and a source-aware judge prompt on top of this same data. See the CLI integration.

What you get back

Field Description
observations Descriptive patterns with optional consumerGuidance
preferences Prescriptive rules with strictness
vocabularyRules Term-level rules: casing, substitution, banned words, preferred phrasings
evidenceNotes Source-note excerpts cited by evidenceNoteIds on the records above
filters Echo of the sourceRunId / scope you sent

Scope

Requires an API key with scope style. See the Style Profile API Reference for the full schema.