Yoker Writing Assistant
A writing assistant that coaches and develops — but never writes for you.
This is a Yoker showcase package. It demonstrates the yoker-as-runtime mode: Yoker is the entry point, and this package provides the main agent and skills for an interactive writing coaching session. The agent interviews, challenges, reviews, and flags — but every word of prose is written by the author.
Full documentation is published at yoker-writing-assistant.readthedocs.io — including a tutorial that tells the build story end-to-end, a quickstart with a worked example, and a per-skill reference.
Status
Initial release. The Python package, plugin manifest, entry point, agent
definition, and all 8 skills are in place. Tests pass, all quality gates
green. See AGENTS.md for the full project guide.
What It Does
The writing assistant is a developmental editor + writing coach for an author who writes every word themselves. It operates on the declared-work scope: it only acts on prose the author has already written. It never generates prose, never rewrites, never fills blanks.
Skills
| Skill | What it does |
|---|---|
writing-review |
Developmental review, claim verification, gap/perspective analysis |
writing-continuity |
Dangling references, cold terms, dropped themes, missing transitions |
writing-voice |
Voice drift detection, ChatGPT smell flagging, voice profile checks |
writing-mistakes |
Common writing mistakes — eggcorns, redundancies, non-native errors, craft patterns |
writing-idioms |
Idiom/proverb misuse → canonical form as a proposal |
writing-split |
Long-form → sequential social post sequence |
writing-order |
Reorder raw material into smooth argument flow |
copy-writer |
Platform-specific content adaptation (Twitter, LinkedIn, Mastodon, etc.) |
The Non-Negotiable Rule
The agent never writes prose. Every gap is marked TODO:, every proposal
is marked TODO PROPOSAL:. The author accepts, rejects, or writes. This is
the core design principle — friction is the value, not a bug.
Quick Start
uvx yoker-writing-assistant # run directly (if published)
From a local checkout:
make env-dev # install all dependencies
make run # launch the writing assistant
Or run directly via the Yoker CLI:
yoker --with yoker_writing_assistant --agent-name yoker_writing_assistant:writing-assistant
A Yoker backend is a prerequisite — either a local
Ollama install or a cloud LLM provider API key. If
you do not already have one, run uv run yoker init once to write
~/.yoker.toml with a backend of your choice.
Configuration
Runtime configuration lives in ~/.yoker.toml (never committed). A
reference template is provided as yoker.toml in this repo. The key
sections:
[backend]— LLM provider and model[agents.directories]— directories to scan for agent definitions (e.g., for the optional researcher agent)[skills.directories]— directories to scan for skill definitions[plugins]— plugin registration (this package is loaded via--with yoker_writing_assistant)
Optional: Researcher
The writing assistant can delegate research tasks to c3:researcher, an
external research agent. To enable it, add to yoker.toml:
[agents.directories]
c3 = "../c3/agents"
If the researcher is not configured, research delegation is unavailable
and the agent falls back to direct web search (yoker:websearch /
yoker:webfetch), noting the limitation in its output. All other
functionality works without it.
Architecture
This package is a Yoker plugin: it declares an __YOKER_MANIFEST__
that points Yoker to its agents/ and skills/ directories (inside the
Python package, discovered via importlib.resources). Yoker's plugin
loader discovers the agent and skill definitions automatically, namespacing
them under yoker_writing_assistant:. The entry point is a thin Python
wrapper (cli.py) that injects --with yoker_writing_assistant and
--agent-name yoker_writing_assistant:writing-assistant into Yoker's CLI, so
uvx yoker-writing-assistant launches the writing assistant directly.
The sister project
yoker-assistant
demonstrates the complementary mode — yoker-as-SDK — where Python owns
the process and calls Yoker as a library.
Both projects share a common quality bar documented in STANDARDS.md.
Documentation
Full documentation lives in docs/ and is published to ReadTheDocs:
https://yoker-writing-assistant.readthedocs.io
The Tutorial tells the build story end-to-end — why this package exists, the non-negotiable rule, the thin-orchestrator architecture, the eight skills, the plugin manifest and CLI wrapper, and the optional researcher integration.
Supporting pages: Installation, Quickstart, Architecture, Skills, Configuration, API, Dogfooding, Changelog.
The AGENTS.md file provides the project guide for agents working on this codebase. PACKAGE.md provides AI-optimized package documentation for consumers.
License
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file yoker_writing_assistant-0.1.3.tar.gz.
File metadata
- Download URL: yoker_writing_assistant-0.1.3.tar.gz
- Upload date:
- Size: 306.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2606bc385337174b9521eaa8562550a98db0cbf503df06a3ae414e1cad1dd28d
|
|
| MD5 |
83474e139dcbb2d4998c37507889e250
|
|
| BLAKE2b-256 |
1f4a2d11d6f37c1fcdea84ae0fa2a0a372c7dca79010eea069018278ad91fcc6
|
File details
Details for the file yoker_writing_assistant-0.1.3-py3-none-any.whl.
File metadata
- Download URL: yoker_writing_assistant-0.1.3-py3-none-any.whl
- Upload date:
- Size: 53.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d643e95fce87b16770e095c25d966f977bf73347ea46e9f662c8dc38511cfb5
|
|
| MD5 |
5bcc8a228d0c9cd124dda101baebffb6
|
|
| BLAKE2b-256 |
ca8343630ba22fa73d2eb229681408c4413c3b22e93cc8ff70bdc61eab81124b
|