1994 / ghostwriter-craft
Learns a site's tone of voice from its existing content, then drafts new entries in that voice through a questionnaire and a follow-up conversation.
Package info
github.com/1994limited/ghostwriter-craft
Type:craft-plugin
pkg:composer/1994/ghostwriter-craft
Requires
- php: ^8.2
- 1994/ghostwriter-core: ^1.0
- craftcms/cms: ^5.6
- guzzlehttp/guzzle: ^7.8|^8.0
- league/commonmark: ^2.4
- symfony/yaml: ^6.4|^7.0|^8.0
Requires (Dev)
- codeception/codeception: ^5.2
- codeception/module-asserts: ^3.0
- codeception/module-yii2: ^1.1.10
- craftcms/ckeditor: ^5.8
- spicyweb/craft-neo: ^5.5
- vlucas/phpdotenv: ^5.4
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-10-02 17:30:54 UTC
README
Ghostwriter for Craft CMS
Ghostwriter learns how your site writes, then drafts new entries and edits existing ones in that voice, in a panel beside the entry form.
What it does
- Voice guide. Ghostwriter reads your published entries and writes a guide to how you sound. Edit it by hand, or ask for changes in plain words.
- Kinds of content. It suggests the kinds of content each section holds, such as "Case study" or "Service page". Each kind you teach it gets its own questions and guidance.
- Writing and editing in conversation. Write with Ghostwriter asks a short brief, follows up on anything it needs, and puts the draft into the entry with Use this draft. Edit with Ghostwriter changes an existing entry's writing and nothing else. Nothing is saved or published for you.
- House style. Block order, and settings your entries agree on, are copied into new entries. Links it can't decide are marked for you to set.
- Photo search. A button on Assets fields finds free photos, ranked by the model against the page's words and the images already there, and fills in Craft's alt text from the photo library's description.
- Make an image. With an OpenAI or Gemini key, it makes a new picture in the style of your images.
- Content plan. Ghostwriter suggests what is missing from each section. Each idea opens a new entry with Ghostwriter beside it.
- Shared conversations. Everyone who can use Ghostwriter sees the pieces in progress, and can pick one up where a colleague left it.
Requirements
- PHP 8.2 or later
- Craft CMS 5.6 or later
- An API key for Anthropic (Claude), OpenAI (ChatGPT) or Google (Gemini)
- Craft's queue, which runs by itself from the control panel unless your site uses a worker
Installation
Install it from the Plugin Store in the control panel, or with Composer:
composer require 1994/ghostwriter-craft php craft plugin/install ghostwriter
Then add your key to .env:
ANTHROPIC_API_KEY=sk-ant-...
The installation guide covers each step in full.
Quick start
- Open Ghostwriter → Get started in the control panel.
- Check that Connect a model names your provider, then click Write the voice guide on Learn your voice.
- Learn one or two of the suggested kinds of content.
- Open a section's new entry screen and click Write with Ghostwriter. Choose what you're writing, answer the brief, and click Start writing.
- Click Use this draft, check the entry, and save it.
Documentation
Everything else is in the documentation.
Providers and privacy
Ghostwriter writes with Claude, ChatGPT or Gemini, on your own account, and finds photos on Openverse, Unsplash, Pexels and Pixabay. Keys are read from .env and never stored. Nothing is sent until someone in the control panel asks for something, and then only to the provider you chose. See API keys and Privacy.
Support
Report issues on GitHub, or contact 1994.
Changelog
See CHANGELOG.md.
Licence
Ghostwriter for Craft CMS is commercial software. See LICENSE.md.
Development
The providers, prompts, draft text handling, layout algorithms and the rules for pieces, the content plan, kinds, guides and images come from ghostwriter-core, which Composer installs from Packagist.
composer install
cp tests/.env.example tests/.env # point it at an empty MySQL database
vendor/bin/codecept run unit
The tests fake every model and HTTP call, so they need no API key.
