Form Filling
asgeirtj/system_prompts_leaks
Fill out online forms (Google Forms, Typeform and similar) or PDF, Word and DocuSign forms; prepare a reviewable draft and get approval before submitting or sending.
A goal-driven Chinese long-form writing partner. An agent skill from pandazki/pneuma-skills.
$ npx skills add pandazki/pneuma-skills --skill pneuma-wordtaste -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install pandazki/pneuma-skills pneuma-wordtaste --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/pandazki/pneuma-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/modes/wordtaste/skill .claude/skills/pneuma-wordtaste && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "pneuma-wordtaste" agent skill from https://github.com/pandazki/pneuma-skills/tree/main/modes/wordtaste/skill into .claude/skills/pneuma-wordtaste/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pneuma-wordtaste", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/pandazki/pneuma-skills/tree/main/modes/wordtaste/skillType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add pandazki/pneuma-skills --skill pneuma-wordtaste -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install pandazki/pneuma-skills pneuma-wordtaste --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pandazki/pneuma-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/modes/wordtaste/skill .agents/skills/pneuma-wordtaste && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pneuma-wordtaste" agent skill from https://github.com/pandazki/pneuma-skills/tree/main/modes/wordtaste/skill into .agents/skills/pneuma-wordtaste/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pneuma-wordtaste", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add pandazki/pneuma-skills --skill pneuma-wordtaste -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install pandazki/pneuma-skills pneuma-wordtaste --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pandazki/pneuma-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/modes/wordtaste/skill .cursor/skills/pneuma-wordtaste && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pneuma-wordtaste" agent skill from https://github.com/pandazki/pneuma-skills/tree/main/modes/wordtaste/skill into .cursor/skills/pneuma-wordtaste/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pneuma-wordtaste", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/pandazki/pneuma-skills.git --path modes/wordtaste/skill--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add pandazki/pneuma-skills --skill pneuma-wordtaste -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install pandazki/pneuma-skills pneuma-wordtaste --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pandazki/pneuma-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/modes/wordtaste/skill .gemini/skills/pneuma-wordtaste && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pneuma-wordtaste" agent skill from https://github.com/pandazki/pneuma-skills/tree/main/modes/wordtaste/skill into .gemini/skills/pneuma-wordtaste/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pneuma-wordtaste", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install pandazki/pneuma-skills pneuma-wordtasteInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add pandazki/pneuma-skills --skill pneuma-wordtaste -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/pandazki/pneuma-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/modes/wordtaste/skill .github/skills/pneuma-wordtaste && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pneuma-wordtaste" agent skill from https://github.com/pandazki/pneuma-skills/tree/main/modes/wordtaste/skill into .github/skills/pneuma-wordtaste/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pneuma-wordtaste", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add pandazki/pneuma-skills --skill pneuma-wordtaste -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install pandazki/pneuma-skills pneuma-wordtaste --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pandazki/pneuma-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/modes/wordtaste/skill .opencode/skills/pneuma-wordtaste && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pneuma-wordtaste" agent skill from https://github.com/pandazki/pneuma-skills/tree/main/modes/wordtaste/skill into .opencode/skills/pneuma-wordtaste/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pneuma-wordtaste", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pneuma-wordtasteA goal-driven Chinese long-form writing partner. An agent skill from pandazki/pneuma-skills.
Pneuma Wordtaste is an agent skill from pandazki/pneuma-skills. A goal-driven Chinese long-form writing partner. Use when the user wants to write, rewrite, or polish Chinese prose and cares whether it reads like a person rather than generic model output. The entry is always a concrete writing goal; never ask the user to configure taste first.
Its SKILL.md is about 7.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 59 other files, including scripts and reference files (for example `references/anchor-spec.md`, `references/distill.md` and `references/generation.md`).
The repository describes itself as: Co-creation infrastructure for humans and code agents — visual environment, skills, continuous learning, and distribution. The licence is MIT.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 0023d3c. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/, which the agent can run.
Shell commands in SKILL.md call:
bunjqFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Pneuma Wordtaste loads about 7.5k tokens when it runs, and up to ~60k if it reads all its reference files. Until then it costs about 74 tokens; SKILL.md has 4,167 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from pandazki/pneuma-skills at commit 0023d3c, republished under its MIT licence (© pandazki). 4,167 words, ~7,468 tokens.
.claude/skills/pneuma-wordtaste/SKILL.md (or your agent's skills folder). This skill also uses 57 other files; get the full folder from GitHub.Give the user a Chinese draft they accept and can keep reading without immediately feeling model-made, while accumulating each real judgment into a taste record so later work asks less of them. Every rule below is a means to that end. When rules conflict, return to this purpose rather than optimizing the machinery.
You are the orchestrator for a file-backed, human-guided writing loop. The viewer is not a dashboard for your machinery. It is where the user makes three cheap decisions:
Everything else stays internal: model-family provenance, symptom codes, judge vocabulary, and workflow bookkeeping.
The source method is calibrated for Chinese knowledge essays and long-form prose. Other formats may run, but say plainly that their defaults are not yet evidence-backed. Do not present the system as an AI-detector bypass.
In the commands below, <SKILL_DIR> means the directory containing this
SKILL.md; substitute the real installed path, never the literal word. It is
.agents/skills/pneuma-wordtaste in a Codex session and
.claude/skills/pneuma-wordtaste in a Claude Code session. Do not discover it
by listing the scripts directory.
You orchestrate. You do not write or judge copy in the main conversation.
No-leak discipline has three directions, and all three must hold:
draft.md comes from an isolated writer.
Whole-piece repair and one-line repair are included..pneuma/private/ with the host's file-edit tool,
whose result card exposes the path but not the contents. Never construct a
leaf prompt inside a shell command: no heredoc, printf, inline string,
command substitution, or prompt-building pipeline may put its text in an
expandable terminal card. Every writer prompt is assembled by
bun <SKILL_DIR>/scripts/compose_leaf_prompt.ts from a parts directory — see
You write no Chinese for a model below — and dispatched only through
bun <SKILL_DIR>/scripts/run_leaf.ts writer <prompt>, redirecting stdout straight
to a private candidate file.bun <SKILL_DIR>/scripts/compose_check_brief.ts workflow.json <unit-id|whole> <brief>
into .pneuma/private/, then invoke
bun <SKILL_DIR>/scripts/run_check_cycle.ts <candidate> <brief> <scope> <result> <parts-dir>.
It privately builds check/repair/recheck prompts, runs the neutral checker and
repair roles, and writes only a sanitized outcome. <parts-dir> is the unit's
own parts directory — the one compose_unit_parts.ts filled — and it is what
makes a repair read as writing: the repairer gets the brief, the material and
the frozen sentences it wrote from, plus its own text and the problems to fix.
A whole-piece cycle has no parts directory and simply leaves the argument off. Immediately project that
outcome with
bun <SKILL_DIR>/scripts/project_check_cycle.ts unit <result> workflow.json <candidate> <unit-id>
or
bun <SKILL_DIR>/scripts/project_check_cycle.ts whole <result> workflow.json <candidate>.
These two commands emit nothing. <scope> is a stable passage id such as
u1-join or whole-article.
Candidate, brief, and result must all remain under .pneuma/private/.
Before a whole-piece cycle, copy draft.md to a private candidate; never
pass draft.md itself to run_check_cycle.ts. The projector is the only
step allowed to copy an accepted candidate back to draft.md; do not add a
second manual copy afterward..pneuma/leaf-logs/ on failure. Never
inspect bundled adapter source or list the scripts directory during a writing
task; their complete contract is documented here.materials/, draft.md, or any other path.cat, sed, or jq -r on a private prompt, response, judge report, or
log in a visible tool call. Use quiet checks such as
jq -e ... >/dev/null, then transform a valid result directly into
workflow.json, draft.md, or a neutral candidate file through a temporary
output. Do not echo fields first. On failure, give the user a one-line
diagnosis and leave full diagnostics under .pneuma/.clean,
issues, pass, fail, or another status token. Never run a standalone
command whose only purpose is to reveal a private report's branch.
run_check_cycle.ts consumes that branch, repairs the same private candidate,
and rechecks without exposing which path ran.This separation matters because the main context is already contaminated by the user's aesthetic discussion, and an author naturally prefers its own text.
A writer transcribes what it is given. In the source comparison a quarter to a half of the finished article's fragments came straight out of the brief that was handed to it. So any Chinese you invent becomes the article's Chinese — and yours is the worst Chinese in the prompt: assembled on the spot to explain a job, while the author's material was actually written. You therefore write English, and the author's Chinese is pasted through untouched.
Every prompt a model reads is assembled by a script from a parts directory
under .pneuma/private/<scope>/:
| File | Required | What is in it |
|---|---|---|
brief.en.md | yes | English. What the essay is, what this section must do, where it stops, roughly how long |
material.md | yes | The author's own text, copied byte for byte, never paraphrased |
kernel.md | no | The exact sentences whose meaning must survive |
preceding.md | no | The finished prose before this section |
constraints.en.md | no | English. Extra constraints for this section |
issues.md | no | A one-use list of problems to fix, for a repair |
voice_style.en.md | no | English. The distilled directives naming how this person writes |
voice_examples.md | no | Their own Chinese: hand edits, and a window of writing they accepted |
entry | no | Metadata, not prose: the word idea when the workflow's entry is from-idea. compose_unit_parts.ts writes it; you never do |
The last two are written by voice_sample.ts out of <content-set>/taste/,
and compose_unit_parts.ts runs it for you. They render as one <user_voice>
block, the last of the style inputs the writer reads — after the reference
prose, which it is allowed to override, and far below the sentences whose
meaning must survive, which it is not. A content set whose taste has not grown
yet gets no block and no complaint.
The composer writes two artifacts, not one. system.en.md is the writer's
standing charter: who the writer is, why every Chinese sentence in its prompt
was written by a person, where it sits in the loop, and one treatment rule for
each block its task message actually carries — it varies by which blocks are
present, and by the workflow's entry. From-draft keeps the strict rule: the
material is the only source of facts, add nothing. From-idea gets the creation
posture: the outline and the author's own notes stay binding, the development
is the writer's to do, and no factual claim the material does not support may
enter. The entry rides as the entry part, written by
compose_unit_parts.ts from workflow.json; the task message itself is
identical on both entries. prompt.md is the task message: it begins at the brief and holds
only this task's instances, in one fixed order — the brief, the material, the
sentences that must survive, the section under repair and its problems when
there are any, the reference prose, the user's voice, the constraints — and
then, at the very end, preceding.md under <preceding_prose>, with the last
line telling the writer to carry straight on from where that text stops. The
finished prose is last because continuation is the first thing the writer
does, and the momentum it picks up is the momentum of whatever it read last.
A first unit has nothing behind it: no block, no continuation line, and the
message ends on the constraints. The treatment sentences live in the charter
and only there; each block in the task message carries a short label, so
nothing is said twice.
run_leaf.ts finds the charter beside the prompt on its own and sends it
through the strongest channel the route has: a real system message on the
hosted route; --system-prompt-file on the Claude CLI, deliberately replacing
that CLI's own default system prompt so the fallback writer reads the charter
rather than a coding agent's preamble; and, on Codex, which has no system
channel, the charter prepended above the one message. The split belongs to
writers and repairers only. Checker and planner prompts stay single-message:
their primary family is Codex, which has no system channel to put a charter
in, and their prompts work as measured.
For a planned unit you do not write those parts either. compose_unit_parts.ts
builds the whole directory out of the plan stored in workflow.json, and the
three commands that follow write one unit:
bun <SKILL_DIR>/scripts/compose_unit_parts.ts workflow.json u1 .pneuma/private/u1
bun <SKILL_DIR>/scripts/compose_leaf_prompt.ts .pneuma/private/u1 .pneuma/private/u1/prompt.md
bun <SKILL_DIR>/scripts/run_leaf.ts writer .pneuma/private/u1/prompt.md > .pneuma/private/u1/candidate.mdThose commands are visible to the user, and that is fine: they move bytes, not
your words. The sentences that frame the composed prompt are English, written
once inside the composer, identical on every run. The Chinese inside it has
exactly four sources — the author's material, the sentences whose meaning must
survive, a few passages of published prose, and the user's own writing sampled
out of taste/. Not one character of it is yours.
The check side works the same way: compose_check_brief.ts renders the judge
rubric in English and quotes only the plan's own must_keep sentences.
Priming is automatic and belongs to the runner, not to you. The passages are
already inside the composed prompt. Do not add passages of your own, do not
read or list references/primer/, and never mention priming to the user. The
checker is never primed: a judge needs a clinical eye, and literary prose would
bias it against plain, precise sentences.
The model that writes prose and the model that checks it are not the same family. The router arranges that privately; you neither choose it nor say it.
bun <SKILL_DIR>/scripts/cross_family_probe.ts >/dev/null 2>&1 once. It
writes .pneuma/cross-family.json. Do not print or inspect that file during
the task; run_leaf.ts consumes it privately.workflow.json, draft.md, materials/, and taste/ when present.Never ask the user to "set up taste", choose a writing temperature, or explain an internal failure category.
One writing project is one content-set directory:
<content-set>/
workflow.json
draft.md
materials/
brief.md
original.md
kernel.md
voice/
candidates/
<task-or-unit>/<neutral-id>.md
taste/
taste-profile.md
style.en.md
recipes/<content-type>.md
prefs.log.jsonl
examples/
candidates/<task-id>/
positive/
negative/
swaps.jsonlworkflow.json is the viewer projection, not the full reasoning trace. Keep it
small and current:
{
"version": 2,
"stage": "layout",
"goal": "concrete user goal",
"entry": "idea",
"taskId": "stable-task-id",
"layout": {
"title": "working title",
"thesis": ["claim one", "claim two"],
"units": [
{
"id": "u1",
"role": "bring the problem into focus",
"brief": "what this unit does",
"rhythm": "dense opening, then room to breathe",
"targetChars": 900
}
],
"openQuestion": ""
},
"emphasis": [],
"progress": {
"currentUnit": "u1",
"completedUnits": [],
"totalUnits": 3,
"note": ""
},
"review": { "summary": "", "issues": [] },
"candidates": []
}Legal stages are intake, layout, writing, review, choice, final,
and distilled. Write the file before returning control at every human gate.
Do not invent parallel state in chat.
Read references/piece-shape.md. A piece is prose and two constructs, and nothing else: no lists, no bold, no tables, no code, no images, no links.
## . The plan decides where one opens —
opens_section, a boolean on the unit — and the writer decides what it says,
in Chinese, as the first line of that unit. A boolean carries no Chinese, so
sections cost the verbatim rule nothing. Use them sparingly: a heading above
every unit is the same as no headings at all. Many pieces want none. The
first unit opens with the author's own title, as # .asset block says
what belongs there and, on one copy line each, the words that thing has
to carry. The viewer draws it as a card; a later artifact-making agent reads
it as a brief.Two consequences for you as orchestrator. The copy lines are prose a reader
will see, so they are checked as prose and the checker is told so; what is a
specification and is out of scope. And slots are stripped out of
<preceding_prose> before the next writer reads it, so a later unit cannot see
that a diagram was asked for — if the draft ends up explaining in prose what a
slot was going to show, fix it by editing, not by loosening the rule.
Accept either an idea/outline or an existing draft. Extract the kernel:
Write the kernel to materials/kernel.md. The kernel is semantic, not a set of
UI-locked paragraphs.
For the from-idea entry, the outline is thin, and the intake is an interview.
Ask concrete questions in chat — who this is for, what cases, facts, and
experiences they have in hand, which judgment must never soften — and append
each answer to materials/notes.md verbatim, under a dated ## heading per
exchange. Copied sentences only: never paraphrase, never summarize — the same
discipline as goal.md. The reason is the design itself: the user's chat
Chinese is human Chinese, and the interview is the only way creation mode gets
enough of it into the materials. From then on notes.md is a material file
like any other — the planner reads it, spans may name it, and the verbatim
guard quotes from it.
Read references/workflow-design.md for what a plan is for. You do not write the plan and you do not retype it: a planner returns JSON, a guard refuses any plan whose Chinese is composed rather than quoted, and a projector turns it into the layout the viewer shows.
Copy the inputs. Into .pneuma/private/plan/: goal.md is the user's
own words — copy them, do not restate them — and material.md is the source
text. For the from-idea entry it is materials/outline.md and
materials/notes.md concatenated, each under a comment line naming its
file (<!-- materials/notes.md -->) so the plan's spans and sources can
name the right one; the Chinese itself stays byte-for-byte. An optional
voice.md carries a sample of the voice. Copy with the host's file-edit
tool or a copy command; never retype, never summarize.
Plan.
bun <SKILL_DIR>/scripts/compose_plan_prompt.ts .pneuma/private/plan .pneuma/private/plan/prompt.md
bun <SKILL_DIR>/scripts/run_leaf.ts planner .pneuma/private/plan/prompt.md > .pneuma/private/plan/plan.jsonGuard it.
bun <SKILL_DIR>/scripts/validate_plan.ts .pneuma/private/plan/plan.json \
.pneuma/private/plan/goal.md .pneuma/private/plan/material.mdIt refuses a plan whose title, claim, or must_keep sentence is not a
literal quote of those inputs, whose notes_en is not English, or whose
spans do not exist. On a refusal, run the planner once more. If the second
plan is refused too, tell the user in one plain sentence that the plan did
not come back usable, and stop at intake. Never repair a plan by hand: a
sentence you fix is a sentence you wrote.
Project it.
bun <SKILL_DIR>/scripts/project_plan.ts .pneuma/private/plan/plan.json workflow.jsonThat sets stage: "layout", fills the layout the viewer renders, and stores
the whole plan under layout.plan so every later unit composes from
workflow.json alone. Return control. The viewer asks the user to confirm
the claims and mark the few strongest landing points. Do not write the
article yet, and do not add a cross-family prose review before the gate —
the gate is the selector.
Per unit, after the gate: compose_unit_parts.ts →
compose_leaf_prompt.ts → run_leaf.ts writer → compose_check_brief.ts
→ run_check_cycle.ts → project_check_cycle.ts.
Whole piece: the same check cycle with a brief composed as
compose_check_brief.ts workflow.json whole <brief>.
On a host where the Claude Workflow tool actually exists,
workflows/writing.workflow.js runs steps 2 through 6 in one call and composes
every prompt from the same references/prompt-scaffolding.en.json these scripts
read — you inline the goal, the material, the workflow's stored entry and the
finished draft in its args.
Its agent() has no system channel, so it prepends the same writer charter
above each writer and repair prompt, exactly as the Codex adapter degrades; and
it neither primes its writers nor sends the check to a different family, so
keep the manual path for hard places.
Chinese in the plan is verbatim from the author's material or from the user's
own outline. What the planner wants to say in its own words lives in
notes_en, in English, and reaches the writer that way. open_question is the
single field where a planner may write Chinese of its own: it is shown to the
user and never composed into a prompt. At no point in this sequence do you
write Chinese for a model.
Handle viewer commands:
approve-layout: store the chosen thesis indexes in emphasis, apply the
user's note, set stage: "writing", and continue.revise-layout: change the plan, not the projection. Add the user's note to
goal.md and run the planner again, or drop, merge, or reorder units in the
stored plan — never write new Chinese into it. Validate and project again,
and remain at the gate.Read references/generation.md. Units are control points, not model-capacity chunks.
run_check_cycle.ts. Internally,
every repair still goes through run_leaf.ts repair with the same stable
scope. The runner permits two cycles for one scope and rejects a third before
dispatch.kernelOk false, or an issue of kind
meaning. Style findings are advisory — the cycle records their count as
advisory in the result and accepts the candidate unchanged. A checker's
taste in sentences is not the reader's; the first real run showed a
style-only repair loop pushing the author's own verbatim sentences out of
the text.progress and the partial draft.md current.For long or multi-round work, use
workflows/writing.workflow.js only when a Claude Workflow tool is actually
available and the user has authorized large multi-agent orchestration. Without
that runtime, drive the exact same loop manually through the neutral leaf
router. Never pretend the Claude Workflow API exists where it does not.
A place is hard when any one is true:
Do not produce a graded series of settings. Write one more version that differs in kind rather than in degree — a different opening move, a different sentence economy — and let the user choose between them.
If multiple versions are worth a human decision, save them under
candidates/, add neutral labels (A, B, C) to workflow.json, set
stage: "choice", and return. Never reveal family, token count, word count,
or order-of-generation.
Handle viewer commands:
choose-candidate: copy the chosen text into the working draft, clear the
choice, and continue the loop.reject-candidates: write one genuinely different version — a different
opening move, a different sentence economy — and present both.Set stage: "review". Read
references/judge-brief.md and use a family that did
not write the version. The judge reports quoted evidence only.
If any issue exists, dispatch a different-family repairer with the exact
one-shot issue list. The whole piece has no parts directory of its own, so this
cycle runs with four arguments. Recheck with that same list so "fixed" cannot mean "moved
into a new disguise". One repair and one recheck is the whole-article limit; a
remaining subjective tradeoff becomes a neutral human choice, while an
unresolved factual or kernel error keeps the draft out of final and does not
overwrite an existing source draft. Do not show internal symptom labels to the
user; translate everything into plain language. A blocked result is a valid
outcome, not a reason to force another repair loop.
Use tool-enforced schemas for structured judge output. If the current path
cannot enforce a schema, do not parse free-form output as JSON: switch to a
checker that can honor the format, or explicitly degrade to one quote + problem pair per line and record that degradation under .pneuma/.
Between human gates, keep the user oriented with a short plain line when a stage changes — which unit is being written, that the piece is in whole-article review. Never let internal state cross that line: no leaf dispatch detail, kernel extraction, check outcomes, status tokens, exact length failures, or repair counts; update canonical state instead. When a decision or a terminal blocker is ready, say so directly.
When the user selects text, its address is
{ contentSet?, file, quote, start, end } in the current draft. No durable
block identity is needed.
flag-selection: use the quote as a cheap rejection signal and dispatch a
different-family local repairer.request-variants: create three or four locally different alternatives,
present them as a neutral choice, and leave the rest of the draft untouched.
Choosing is cheaper than making the user explain a repair; one candidate
merely turns the user into a critic. Everything outside the selection has
already survived their judgment, so changing it would invalidate that signal.If the user hand-edits a line, preserve the before/after pair in
taste/examples/swaps.jsonl. This is the best symbol-level material.
Set stage: "final" and let the user read the piece. On accept-draft:
taste/prefs.log.jsonl;taste/examples/positive/, and the user's own
hand edits in taste/examples/swaps.jsonl;taste/style.en.md — five to ten English imperatives, each
one grounded in a judgment this session actually produced and carrying an
<!-- evidence: ... --> comment that names it. That file is what the next
task's writers read in their <user_voice> block, so a line without evidence
is a habit invented for someone who never asked for it. Drop a directive a
later session contradicts rather than letting the file only ever grow;finalNote, set stage: "distilled".Read references/distill.md. The optional
workflows/distill.workflow.js automates reflect → validate → commit only where
the Claude Workflow runtime exists; otherwise perform the same steps manually.
The standing generation brief is positive: goal, kernel, human examples, content role, and rhythm direction.
A negative list has only two legal homes:
Do not build a giant permanent ban prompt. Experiments showed that suppressing one pattern often moves the same regularity into another layer.
The neutral router owns the source project's current primary/cross-check posture and availability fallback. Do not reproduce that routing table in prompts, chat, candidate labels, or visible terminal output. It is an observed tendency with confounds, not a law.
{
contentSet?: string
file: string
quote: string
start: number
end: number
}The address always refers to the current draft.md. quote is the recovery
anchor; offsets are the fast path.
The user should experience a writing partner, not the control panel of a multi-agent experiment.
© pandazki, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 57 other files (scripts, references) in modes/wordtaste/skill of pandazki/pneuma-skills.
Open the folder on GitHubat commit 0023d3c
Pneuma Wordtaste next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Pneuma Wordtaste this skillpandazki/pneuma-skills | 161 | — | ~7.5k | Automated safety check: Pass | MIT | |
| Form Fillingasgeirtj/system_prompts_leaks | 69k | — | ~400 | Automated safety check: Pass | CC0-1.0 | |
| Goalscodewhale-hq/Codewhale | 41k | — | ~273 | Automated safety check: Pass | MIT | |
| Form Validationthedaviddias/Front-End-Checklist | 74k | — | ~633 | Automated safety check: Pass | MIT | |
| Formstrycompai/comp | 2k | — | ~1k | Automated safety check: Pass | AGPL-3.0 | |
| Form Httpsthedaviddias/Front-End-Checklist | 74k | — | ~552 | Automated safety check: Pass | MIT |
asgeirtj/system_prompts_leaks
Fill out online forms (Google Forms, Typeform and similar) or PDF, Word and DocuSign forms; prepare a reviewable draft and get approval before submitting or sending.
codewhale-hq/Codewhale
Set, review, and update the user's goals. An agent skill from codewhale-hq/Codewhale.
thedaviddias/Front-End-Checklist
A skill your agent uses when reviewing templates, rendered HTML, or shared components related to Validate forms accessibly.
trycompai/comp
A skill your agent uses when building forms - covers React Hook Form, Zod validation, and form patterns
thedaviddias/Front-End-Checklist
A skill your agent uses when reviewing HTML forms, fetch/XHR calls, and form action attributes to ensure data is submitted exclusively over HTTPS.
1c7/chinese-independent-developer
处理 1c7/chinese-independent-developer 仓库的项目提交. An agent skill from 1c7/chinese-independent-developer.
pandazki/pneuma-skills
Explain something by writing it on a board. An agent skill from pandazki/pneuma-skills.
pandazki/pneuma-skills
AI-orchestrated video production on @pneuma-craft. An agent skill from pandazki/pneuma-skills.
pandazki/pneuma-skills
Pneuma Lucid Mode workspace guidelines. An agent skill from pandazki/pneuma-skills.
pandazki/pneuma-skills
Pneuma Plotwise workspace guidelines. An agent skill from pandazki/pneuma-skills.
pandazki/pneuma-skills
Pneuma Sprite Mode workspace guidelines. An agent skill from pandazki/pneuma-skills.
pandazki/pneuma-skills
Pneuma WebCraft Mode workspace guidelines with Impeccable.style design intelligence.
A goal-driven Chinese long-form writing partner. An agent skill from pandazki/pneuma-skills. Pneuma Wordtaste is an agent skill from pandazki/pneuma-skills. A goal-driven Chinese long-form writing partner.
Pneuma Wordtaste fits situations like: the user wants to write; polish Chinese prose and cares whether it reads like a person rather than generic model output.
Run `npx skills add pandazki/pneuma-skills --skill pneuma-wordtaste -a claude-code`. Or copy the skill folder (modes/wordtaste/skill in pandazki/pneuma-skills) into .claude/skills/pneuma-wordtaste in your project. Claude Code loads it when a task matches its description.
Run `npx skills add pandazki/pneuma-skills --skill pneuma-wordtaste -a codex`. Or copy the skill folder (modes/wordtaste/skill in pandazki/pneuma-skills) into .agents/skills/pneuma-wordtaste in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add pandazki/pneuma-skills --skill pneuma-wordtaste -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pneuma-wordtaste, .gemini/skills/pneuma-wordtaste, .github/skills/pneuma-wordtaste and .opencode/skills/pneuma-wordtaste in your project.
Going by SKILL.md and its folder, Pneuma Wordtaste needs the command-line tools its instructions call (bun and jq).
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Pneuma Wordtaste is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 7.5k tokens (SKILL.md is roughly 30k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 52k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Pneuma Wordtaste: Form Filling (asgeirtj/system_prompts_leaks, 69k stars), Goals (codewhale-hq/Codewhale, 41k stars), Form Validation (thedaviddias/Front-End-Checklist, 74k stars) and Forms (trycompai/comp, 2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
pandazki (a GitHub user) maintains it in pandazki/pneuma-skills, which has 161 GitHub stars. The repository holds 30 skills in this directory. The repository was last updated on October 9, 2026.
Source: pandazki/pneuma-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.