A psychometric-style skill that builds a 7-dimension profile of the user's writing taste and preferences. The output is both a shareable type label (e.g. ENTP-R · 杂文家) and a continuous vector that downstream writing skills consume to match the user's voice.
Designed as a plan → run → finalize state machine with independent, resumable test units — each dimension gets its own methodology file and session file, loaded only when that dimension is being tested. This keeps context scoped so an 84-question assessment doesn't blow the window.
Why this exists
Generic AI writing has "AI flavor" — stacked hedges, three-part parallels, metaphor decoration, balanced non-committal endings. Those aren't inherently wrong; they're wrong for this person if this person writes punchy committed prose. To strip AI flavor, the AI needs to know what "this person's voice" actually is — not as self-report ("I like clear writing"), but as a measured preference vector inferred from the user's reactions to real literature across genres.
The profile is genre-agnostic. A writer's core taste — rhythm, density, irony tolerance, classical-vernacular balance — is stable across technical articles, blogs, and diaries. Genre-specific knobs (formality, pronoun density) are adjusted by each downstream writing skill; the baseline comes from here.
Commands
Organized around 3 things:Take the test, view results, use results。
Main commands:
| Argument | Dispatch target | Purpose |
|---|---|---|
| (no arguments) | commands/dispatch.md |
Smart dispatch: first time → plan → W1 → … → finalize → show profile; mid-way → continue running; complete → show profile. The most commonly used entry point |
show |
commands/show.md |
Display + interpretation: where you view results after the test is complete. Not just dumping coordinates — reading out what the profile expresses, which writers it's close to/far from, and what it will naturally lean toward in writing |
retest |
commands/retest.md |
Redo. No arguments = retest everything (with secondary confirmation);retest W3 or directly W3 = retest a single dimension |
W1 – W7 |
references/phases/run-unit.md |
retest W<N> shorthand form, also used for the first test / resuming an in-progress single dimension |
review <path> |
commands/review.md |
Review/improve a document using the profile: read the target document, ask about genre and purpose, and give revision suggestions based on coordinates + the mechanical anti-AI checklist |
Internal stage methodology(not commands; dispatch/retest loads them on demand):
references/phases/plan.md— meta-intake + generate state.md, called by dispatch on first runreferences/phases/finalize.md— synthesize profile.md, automatically triggered after all units are complete (or recalculated after retest)
type code sharing is provided by show at the end of the output as a single copyable line of ENTP-R · 杂文家 (王小波 × 鲁迅杂文), no longer a separate command. If you want to completely clear the profile data, you can directly rm -rf ~/.claude/writing-profile/。
Typical usage paths
First-time profile creation: all the way with /writing-profile until the profile appears
/writing-profile # 启动:plan → 跑 W1
/writing-profile # 接着:跑 W2
...
/writing-profile # W7 完 → 自动 finalize → 显示画像
View results and interpretation:/writing-profile show
Retest a single dimension:/writing-profile W3(or /writing-profile retest W3)
retest everything:/writing-profile retest
Review a document with the profile:/writing-profile review drafts/article.md
The 7 dimensions — organized in 3 construct layers
Writer's voice = stable preferences stacked across three distinct layers. Each layer measures a different kind of thing; this framing (see references/psychometric-foundations.md for theory) is what prevents cross-layer confusion in the question design.
L1 Cognitive operation — most stable
How the mind moves during writing: where attention lands, how decisions get made.
| Code | Name | Ends | Heritage |
|---|---|---|---|
| W1 | Sensing ↔ iNtuition | S / N | MBTI S/N (closest to original meaning, restricted to writing cognition) |
| W2 | Thinking ↔ Feeling | T / F | MBTI T/F (same) |
L2 Textual stance — moderately stable
How the finished text relates to the reader: direction of address, degree of closure.
| Code | Name | Ends | Heritage |
|---|---|---|---|
| W3 | Extraversion ↔ Introversion | E / I | MBTI E/I letter, construct redefined: speaking stance outward/inward (reader-addressed vs self-addressed), not social energy |
| W4 | Judging ↔ Perceiving | J / P | MBTI J/P letter, construct redefined: degree of textual closure (closed/open structure), not lifestyle |
L3 Aesthetic preference — requires exposure prerequisites
Learned taste for what's read and written. Requires baseline exposure to measure.
| Code | Name | Ends | Heritage |
|---|---|---|---|
| W5 | Dense ↔ Spacious (Density) | D / L | Writing-specific |
| W6 | Grave ↔ Humor | G / H | Writing-specific |
| W7 | Classical ↔ Vernacular | C / V | Chinese-specific · conditional dimension (see below) |
W7 is a conditional dimension: aesthetic preference can only be measured under the premise of "existing exposure." If the user's exposure to classical literature is insufficient, W7 is recorded as null(unmeasurable), and the secondary character calculation degrades. See references/dimensions/W7-classical-vernacular.md。
Each dimension has a dedicated methodology file under references/dimensions/. The agent reads only the active dimension's file when running that unit.
W5+W6+W7 combine into a single enumerated "secondary character" (one of A/C/W/R/Z/M/D/H) for the type label. See references/type-archetypes.md. When W7 is null, the secondary character falls back to defaulting on the vernacular side (less classical-education-biased), and the profile marks C_V: null so downstream skills know not to push classical register.
⚠️ The MBTI letters are reinterpreted aliases, not an MBTI personality measurement
W1-W4 borrow S/N/T/F/E/I/J/P because these 4 dimensions in thewriting domainhave polarities isomorphic to the original MBTI constructs, and keeping the letters makes them easier to remember and share. But the constructs have been redefined:
- E/I: Speaking stance (outward/inward), not a source of social energy
- J/P: Degree of textual closure (closed/open), not a lifestyle
- S/N、T/F: Closest to the original MBTI meaning, but only takes the "cognitive activation during writing" part, without extending to the personality as a whole
If you are an MBTI enthusiast, the results herecannot be directly appliedYour personality measurement results—the two scales do not measure the same thing. See references/psychometric-foundations.md for the "three-layer construct" argument.
Type label format
ENTP-R · 杂文家
- First 4 letters: standard MBTI code from W1-W4
- Single letter after dash: encodes W5/W6/W7 combination
- After
·: a recognizable Chinese style category (not an invented label)
| Sub-character | Chinese category | Dimension combination |
|---|---|---|
| A | Academic school | Dense-serious-classical Chinese |
| C | Speculative school | Dense-serious-vernacular |
| W | Talented scholar school | Dense-ironic-classical Chinese |
| R | Essayist | Dense-ironic-vernacular |
| Z | Lyrical school | Spacious-serious-classical Chinese |
| M | Plain school | Spacious-serious-vernacular |
| D | Vignette school | Spacious-ironic-classical Chinese |
| H | Joke school | Spacious-ironic-vernacular |
Type labels are shareable summaries of the underlying vector, not identity claims. Two writers with slightly different vectors may share a label; the agent always consumes the vector, not the label.
Methodology principles
Inherited from MBTI (the defensible parts):
- Forced-choice between equally-valid alternatives — eliminates "都还行" responses
- Multi-item per dimension (target ≥ 10 items) for reliability
- Reverse-keyed items (~30% of items per dimension) to catch careless answering
- Dimensional structure (7 axes, not one global score)
Rejected from MBTI (pop-psych parts):
- Type fatalism ("you are forever INTJ")
- Function stacking (Ni-Te-Fi-Se)
- Strict dichotomization — we keep continuous scores internally; labels are only summaries
Added from Big Five / IRT:
- Continuous scores with confidence bands (not just binary picks)
- "Middle type" allowed when |score| ≤ 2 — the user is genuinely flexible on that axis
Agent behavior during run:
- Never use a fixed question bank. Generate excerpts and questions on the fly, following strategy in
references/excerpt-strategy.mdand the active dimension's methodology file. - Use real authors, real texts. Excerpts must be actual passages, not AI-confected "in the style of X." Cite attribution only after the user answers, to prevent prestige bias.
- Keep one dimension active per session. When running W1, don't load W2-W7 methodology files. This is how context stays scoped for 80+ questions.
- Record every answer verbatim in the unit file. The session file is the source of truth; the agent's working memory is volatile.
- Stop a dimension early if confidence is high before the question cap. Sliding scale (see
references/signal-interpretation.md).
See also:
references/psychometric-foundations.md— full theory of what we inherit/reject and whyreferences/adaptive-branching.md— when to drill, skip, or stopreferences/signal-interpretation.md— how to score answers
File layout
skills/writing-profile/ ← methodology (read-only)
SKILL.md ← this file
commands/
dispatch.md, show.md, retest.md, review.md # user-facing
references/
psychometric-foundations.md
type-archetypes.md
excerpt-strategy.md
signal-interpretation.md
adaptive-branching.md
genre-adaptation.md # how downstream writing skills consume the profile
phases/
plan.md, run-unit.md, finalize.md # meta-intake / 单维度测试 / profile 合成 (按需加载)
dimensions/
W1-sensing-intuition.md
W2-thinking-feeling.md
W3-extraversion-introversion.md
W4-judging-perceiving.md
W5-density.md
W6-solemnity-irony.md
W7-classical-vernacular.md
assets/
state-template.md, unit-template.md, profile-template.md
~/.claude/writing-profile/ ← user state (written by skill)
state.md ← index + meta-intake + progress
units/ ← one file per dimension session
W1.md, W2.md, ...
profile.md ← final synthesized profile (consumer artifact)
Consumer contract
Downstream writing skills read ~/.claude/writing-profile/profile.md. The file's top YAML block (## 坐标) is the stable machine-readable contract; the rest is human-facing explanation.
How a genre skill adapts this baseline to its own genre — the clamp/shift/amplify framework, genre-specific extras, two-pass application, and fallback contract — is specified in references/genre-adaptation.md. Skill authors building new writing genres should read it before integrating.
# Example contract block from profile.md
S_N: +7 # -10 to +10, positive = N
T_F: -2
E_I: +5
J_P: +6
D_L: -4 # W5: positive = Dense (致密), negative = Light (疏朗)
G_H: -8 # W6: positive = Grave (严肃), negative = Humor (反讽)
C_V: -3 # W7: positive = Classical (文言), negative = Vernacular (白话)
type: ENTP-R
confidence:
S_N: high
T_F: medium
...
The profile file also contains a "Mechanical anti-AI checklist" — concrete banned phrases and patterns derived from the user's axes, to be executed during the revision phase of any writing task.
Fallback when no profile exists
If a downstream writing skill activates and no profile exists at ~/.claude/writing-profile/profile.md, suggest (don't force) that the user run /writing-profile to calibrate. Writing should proceed with generic defaults if they decline — a profile improves output but isn't a hard prerequisite.