Writing & Voice
EchOS has two separate but complementary features for shaping how language is used:| Feature | What it controls | How to change it |
|---|---|---|
| Agent voice | How EchOS talks to you | Tell it in plain language |
| Style profile | How EchOS writes on your behalf | Tag examples, run analyze_my_style |
Agent voice
Agent voice controls EchOS’s conversational register — its tone, verbosity, warmth, and personality when replying to you.How to change it
Just say what you want in plain language. No commands, no settings panel.What persists
- Takes effect immediately in the same conversation
- Persists across sessions — stored in the database, loaded into the system prompt on startup. You don’t need to repeat yourself next time.
Under the hood
Theset_agent_voice tool is called automatically when you ask for a tone change. It writes a 1–3 sentence second-person directive (e.g. “Be concise and direct. Skip preambles and filler phrases.”) that becomes part of the system prompt for all future messages. Passing an empty string resets it to default.
Style profile (content creation plugin)
The style profile is used when EchOS generates content for you — blog posts, articles, threads, emails, essays, and tutorials. It learns your authentic writing voice from pieces you’ve curated, then uses that profile when generating new content. This feature is provided by the content-creation plugin and must be enabled in your config.Workflow
1. Curate voice examples
Pick 5–15 pieces of writing that represent your authentic voice at its best — published posts, polished notes, anything you’re proud of.Good voice examples:If the content is already in EchOS as a note, mark it as a voice example:
- Published work you’d put your name on
- 500+ words
- Representative of how you actually write (not how you want to write)
- Not rough drafts or quick notes
mark_as_voice_example, which adds the voice-example tag to the note.
If it’s not in EchOS yet, create a note first:
2. Analyze your style
Once you have at least 5 voice examples tagged:analyze_my_style, which:
- Finds all notes tagged
voice-example - Runs statistical analysis (sentence length, paragraph structure, vocabulary richness)
- Runs an LLM pass to extract tone descriptors, formality level, storytelling approach, signature phrases
- Merges both into a profile saved to
data/style-profile.json
3. Generate content
create_content, which:
- Loads your style profile (or falls back to a sensible default if none exists)
- Retrieves relevant notes from your knowledge base via semantic search
- Generates the content using your profile as a style guide and your notes as context
- Saves the result as a new note (tagged
generated,ai-generated, and the content type)
blog_post, article, thread, email, essay, tutorial
Optional parameters you can mention naturally:
- Target length: “write a short blog post”, “write around 800 words”
- Audience: “for a non-technical audience”, “for senior engineers”
- Recency: “only use notes from the last month”
- Extra instructions: “keep it punchy, don’t use bullet points”
4. Inspect your profile
get_style_profile and displays your full profile — tone descriptors, vocabulary analysis, sentence patterns, transition phrases, and sample paragraphs that exemplify your style.
5. Update your profile
After accumulating more writing or if your style evolves:Default profile
create_content works even without a custom style profile — it falls back to a default professional voice. The generated content will include a note prompting you to set up your own profile for more authentic results.
Storage
The style profile is stored atdata/style-profile.json. It is not synced via git (listed in .gitignore). Generated content is saved as regular markdown notes alongside your other knowledge.
Quick reference
| What you say | What happens |
|---|---|
| ”Be more concise” | set_agent_voice updates conversational tone |
| ”Mark note abc-123 as a voice example” | mark_as_voice_example tags the note |
| ”Analyze my writing style” | analyze_my_style builds style profile |
| ”Show me my style profile” | get_style_profile displays current profile |
| ”Write a blog post about X” | create_content generates in your voice |
| ”Re-analyze my style” | analyze_my_style with force re-analysis |
| ”Reset your voice to default” | set_agent_voice clears the voice directive |