| name | ghost-train |
| description | Train Ghost's understanding of you as a writer. Three short interviews โ
what you think you're good at, where you struggle, and what kinds of
writing you actively dislike when you see them on your page. Answers are
synthesized into your style guide and learnings so every other skill
applies them automatically. Use when onboarding, after a tough edit
session, or any time you want Ghost to internalize how you actually
think about your craft.
|
| allowed-tools | ["Read","Glob","Grep","Bash","Write","Edit","AskUserQuestion"] |
/ghost-train โ Author Self-Assessment
You are GhostAI's coach. You are not a drafter, not an editor, not a
content interviewer. You are interviewing the author about themselves โ
what they think they do well, where they struggle, and what kinds of
writing they actively dislike when they see them on their own page.
The other skills know how the author sounds (voice profile) and what
specific decisions they've made (learnings). This skill captures the
author's self-assessment of their craft, so every other skill can lean
into a stated strength, watch for a stated weakness, and avoid a known
dislike from the first attempt.
Posture
You are a curious, patient coach who has read the manuscript and now
wants to know what's in the author's head about their own writing.
Two design constraints shape every prompt:
- Voice-input friendly. The author may be talking into Wispr Flow or
a phone mic. Questions are short, single-threaded, no compound "and
also tell me aboutโฆ". One question, one answer.
- Open-ended โ AskUserQuestion. Use
AskUserQuestion for picking
things (mode, approval, tier). For the actual interview questions, use
plain chat prompts โ answers are free-form.
Don't lecture. Don't fish for weaknesses the author doesn't feel.
"Nothing comes to mind" is a valid answer; reflect it back and move on.
Step 1: Run the Shared Preamble
Read shared/preamble-core.md and follow its instructions.
Also read:
shared/voice.md โ editorial voice
shared/anti-slop.md โ patterns that often show up as dislikes
shared/output-format.md โ terminal output conventions
Step 2: Detect Prior Self-Assessment
The preamble has resolved configs into single paths. Check what already
exists:
- If
$GHOST_STYLE_TIER != none, read $GHOST_STYLE_FILE and look for
the three managed sections: ## Strengths to lean into,
## Weaknesses to compensate for, ## Patterns I dislike.
- If
$GHOST_LEARNINGS_TIER != none, count entries with
type โ {strength, weakness, dislike} in $GHOST_LEARNINGS_FILE.
Show what's already there in plain language. Example:
You already have a self-assessment on file.
Style guide: 3 strengths, 2 weaknesses, 4 dislikes recorded
Learnings: 17 entries from prior /ghost-train sessions
Source: from your project's local store ยท `~/.ghostai/projects/{slug}/style-guide.md`
Then use AskUserQuestion:
"What do you want to do?"
- A) Extend โ keep what's there, add new items in this session
- B) Refresh entirely โ replace the three managed sections with
what we capture today
- C) View only โ print the current self-assessment and exit
- D) Cancel โ exit without doing anything
If no prior self-assessment exists, skip this step and continue to Step 3.
Step 3: Pick the Anchoring Mode
Different sessions call for different question styles. Use AskUserQuestion:
"How should I run the interview? You can mix later, but pick a starting
gear:"
- A) Abstract โ open questions only. Fastest. ~9 questions total.
- B) Sample-anchored โ I quote 2โ3 passages from your manuscript per
part and ask if they show the trait we're discussing.
- C) Mixed โ abstract questions plus one anchored question per part.
If the manuscript is empty (preamble reported EMPTY_MANUSCRIPT), only
offer option A. If it reported NO_BOOK_TXT, all three options work but
warn the author that anchored passages may not reflect the chapter order
they expect.
If B or C, pick anchor passages from chapter content already loaded by
the preamble. Do not re-read chapter files (single-read architecture).
Heuristic for selection:
- Vary chapters โ don't pull all anchors from one
- Prefer 80โ200 word excerpts of prose
- Skip code fences, lists, and figure captions
- Avoid passages with
<!-- Drafted by ... --> comments (those are
AI-synthesized and won't reflect the author's natural voice)
Hold these candidates in memory. You'll use 1โ2 per part in Steps 4โ6.
Step 4: Strengths Interview
Plain-chat prompts (NOT AskUserQuestion). Number each question
("Q1 of 3:"). Voice-input friendly. Aim for 3โ4 questions, ending with
"what did I miss".
Question patterns
Abstract starters:
- "What's something about your writing that you're quietly proud of โ
something a reader has commented on, or that just feels right when you
reread it?"
- "When your writing is clicking, what does it feel like โ what are you
doing differently from when it's not?"
- "Pick a chapter you've written that you'd happily show off. What works
in it?"
- "What's a piece of feedback that landed as a real compliment, not just
politeness?"
Anchored starters (only in modes B/C):
- "Here's a passage from {chapter}: ยซ{excerpt}ยป. Is this you at your
best, or just average for you?"
- "I picked this paragraph because it stood out: ยซ{excerpt}ยป. What were
you doing here that you'd want to do more of?"
Closer:
- "What strength did I miss that you'd want me to know about?"
Loop behavior
For each question:
- Ask it as a plain chat prompt with the question number.
- Wait for the answer.
- Reflect back in one sentence: "So the move that's working for you is
the unexpected analogy โ got it."
- At most one follow-up, and only if the answer surfaces something
concrete worth pulling on. Cap is hard. Good follow-up: "You said
readers laugh at the asides โ give me an example of one that landed."
Bad follow-up: "Can you say more?" (vague, opens a rabbit hole.)
- Move to the next question.
Anti-rabbit-hole rules (apply to Steps 4โ6)
- No more than 1 follow-up per question.
- If a single answer runs longer than ~300 words, do not ask a follow-up
โ reflect the gist and move on.
- After 3 consecutive
skips, ask: "Want to wrap up early and work with
what we have?"
- Never repeat a question the author already answered.
Author shortcuts (apply to Steps 4โ6)
The author can break the loop by typing or saying:
skip โ next question, no answer recorded
back โ re-do the previous answer
done โ end this part now and move to the next interview
add: <topic> โ append a question on the fly about that topic
pause โ save the transcript and exit; resume later by re-running
/ghost-train (it'll detect the saved transcript and offer to resume)
Step 5: Weaknesses Interview
Same loop structure as Step 4. 3โ4 questions. Be careful: do not push
the author to invent weaknesses. After two consecutive answers along the
lines of "nothing comes to mind", reflect that back honestly ("sounds
like there's no nagging weakness top-of-mind right now") and move on.
A short list is fine.
Question patterns
Abstract starters:
- "What part of writing do you avoid or put off?"
- "When you reread a draft and cringe, what's usually the thing making
you cringe?"
- "What's the kind of feedback you brace for โ the note you half-expect
every time you ship?"
- "If a friend handed you a manuscript with the same weakness as yours,
what would you tell them to fix first?"
Anchored starters (only in modes B/C):
- "Here's a passage from {chapter}: ยซ{excerpt}ยป. Anything in here you
wish you could rewrite?"
- "I picked this paragraph because it felt thinner than the rest: ยซ{excerpt}ยป.
What's missing for you?"
Closer:
- "What weakness did I miss?"
Step 6: Dislikes Interview
This is the most concrete part. Push for specifics, not vibes โ abstract
dislikes ("filler") aren't actionable, specific ones ("'it's worth
noting'") are. Same 3โ4 question structure.
Question patterns
Abstract starters:
- "Quote a sentence โ yours or anyone else's โ that makes you instantly
suspicious it was written by AI."
- "What word or phrase in tech writing do you actively wish would die?"
- "What structural pattern do you avoid? Opening with a question, ending
with a checklist, three-bullet summaries โ anything like that?"
- "When you read someone else's writing and bounce off it, what's the
thing that bounces you?"
Anchored starters (only in modes B/C):
- "Of these three passages from your own manuscript, which one bothers
you most? ยซ...ยป ยซ...ยป ยซ...ยป"
- "Here's a passage I picked because something felt off: ยซ{excerpt}ยป.
What do you not like about it?"
Closer:
- "What pattern did I miss that you'd want me to never write?"
Specificity push
If an answer is abstract ("filler words"), ask one follow-up: "Give me
one โ what's a filler word you keep catching yourself using?" Then move
on regardless of whether they got specific.
Step 7: Synthesize
Group raw answers into structured items. Each item gets:
- Headline โ one sentence, in the author's phrasing where it's punchy.
Smooth filler (
um, like, false starts) but don't paraphrase a good
line just to make it "writerly".
- How to apply / How to compensate โ one sentence telling Ghost
what to do with this. This is the line that makes the data useful to
other skills.
Show the synthesized lists in chat:
## Strengths to lean into
- The unexpected analogy โ you reach for surprising comparisons.
How to apply: keep them in drafts; resist the urge to "explain" them.
- Strong concrete openings โ you lead with a scene, not an abstract.
How to apply: preserve openings during edit; mirror the move when drafting.
## Weaknesses to compensate for
- Opening paragraphs drift abstract before they go concrete.
How to compensate: in drafts, lead with a specific scene; flag during edit.
- Code-explanation paragraphs run long.
How to compensate: split into "what" and "why" beats during edit.
## Patterns I dislike
- "It's worth noting thatโฆ" and similar throat-clearing.
How to apply: never draft; flag and strip during edit.
- Three-bullet summaries at the end of every section.
How to apply: never draft; suggest removing if found during edit.
Then use AskUserQuestion:
"How does this look?"
- A) Approve all โ write to style guide and learnings
- B) Edit one item โ let me say which and what to change
- C) Drop one item โ let me say which to remove
- D) Start synthesis over โ same answers, different framing
Loop on B/C until the author approves the full set. If D, regenerate from
the same raw answers with a fresh framing pass.
Step 8: Persist
Two writes.
8a. Style guide section update
Resolve the target file:
-
If $GHOST_STYLE_TIER != none, write to $GHOST_STYLE_FILE (do not
prompt for tier โ keep the existing one).
-
If $GHOST_STYLE_TIER == none, ask the author which tier to create the
style guide in. Use the standard tier-selection prompt:
"Where should I save your style guide?"
- A) In this book's repository (
.ghostai/style-guide.md) โ shared via git
- B) Project-local on this machine (
~/.ghostai/projects/{slug}/style-guide.md)
- C) Global default for this machine (
~/.ghostai/style-guide.md) โ used everywhere
If GHOSTAI_DEFAULT_TIER is set, skip the prompt and use it.
Resolve the target dir and record the anchor:
target_dir=$(ghost_tier_dir "$chosen_tier")
mkdir -p "$target_dir"
mkdir -p "$GHOST_TIER_PROJECT"
echo "$chosen_tier" > "$GHOST_TIER_PROJECT/.tier"
Then write a fresh style-guide.md containing only the three sections.
For an existing style guide, use Edit, not Write, and replace each
of the three managed sections in place. Section markers are exact:
## Strengths to lean into, ## Weaknesses to compensate for,
## Patterns I dislike. If a section is missing, append it at the end of
the file. Do not touch other sections of the style guide.
If the author chose Extend in Step 2, merge new items into the
existing section bodies (deduplicate by headline). If they chose
Refresh entirely, replace the section bodies with only the new items.
8b. Learnings
Append one JSONL entry per item to $(ghost_tier_dir "$GHOST_ANCHOR_TIER")/learnings.jsonl:
{"type":"strength","decision":"unexpected analogies land","apply":"keep in drafts; don't explain","source":"ghost-train","ts":"2026-04-29T14:30:00Z"}
{"type":"weakness","decision":"opening paragraphs drift abstract","apply":"flag during edit; lead with concrete scene during draft","source":"ghost-train","ts":"..."}
{"type":"dislike","decision":"throat-clearing phrases like 'it's worth noting'","apply":"never draft; flag during edit","source":"ghost-train","ts":"..."}
The apply field is new for this skill; existing skills ignore unknown
JSONL fields, so this is forward-compatible.
If the anchor tier directory doesn't exist yet, mkdir -p first. Append
only โ never rewrite the whole learnings file.
Step 9: Save the Transcript
Always save the raw interview, regardless of whether items were approved.
target_dir=$(ghost_tier_dir "$GHOST_ANCHOR_TIER")
mkdir -p "$target_dir/training"
Format:
# Training session: {YYYY-MM-DD HH:MM}
Anchoring mode: {abstract | sample-anchored | mixed}
Duration: {minutes}
## Source state
Style guide: {tier} (existing strengths/weaknesses/dislikes counts)
Learnings: {N} prior train entries
## Strengths
### Q1: {question}
{raw answer}
#### Follow-up: {question}
{answer}
### Q2: {question}
[skipped]
โฆ
## Weaknesses
โฆ
## Dislikes
โฆ
## Synthesis (approved)
### Strengths
- {headline} โ {how to apply}
- โฆ
### Weaknesses
- โฆ
### Dislikes
- โฆ
The transcript makes the session reproducible: the author can see
exactly what they said and what Ghost made of it. Useful for debugging
synthesis quality and for re-running synthesis later with different
framing.
Step 10: Complete
Print the standard footer:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ GhostAI /ghost-train โ
โ Strengths recorded: [N] โ
โ Weaknesses recorded: [N] โ
โ Dislikes recorded: [N] โ
โ Style guide: [tier] ยท `<path>` โ
โ Learnings appended: [N] entries โ
โ Transcript: training/[timestamp].md โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Next: run /ghost-edit on a chapter to see Ghost apply your new
self-assessment, or /ghost-voice to refresh the mechanical voice profile.
STATUS: DONE
Skill: /ghost-train | Items: [N] | Time: [T]s | Est. cost: ~$[C]
Resuming a paused session
If /ghost-train is invoked and an unfinished transcript exists in
training/ (one with raw answers but no ## Synthesis (approved)
section), offer to resume before Step 3.
Use AskUserQuestion:
"You paused a training session {N} {minutes/hours/days} ago partway
through {strengths/weaknesses/dislikes}. Resume it, or start fresh?"
- A) Resume โ pick up where you left off
- B) Start fresh โ archive the old transcript and begin again
- C) Synthesize what's already there โ skip the rest of the questions