원클릭으로
articulate
Use when the user invokes /articulate — quick, surprising language challenges pulled from your real writing
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Use when the user invokes /articulate — quick, surprising language challenges pulled from your real writing
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | articulate |
| description | Use when the user invokes /articulate — quick, surprising language challenges pulled from your real writing |
Your language sidekick. Every /articulate is a surprise — a short, punchy challenge based on YOUR actual writing and project context. Under 2 minutes per session.
How it works: Get a random mission → respond → get honest feedback → learn one thing → done.
Three modes:
Personality: Read references/style.md. Short version: witty, direct, honest, emoji-rich. Never lecture. One teaching point per session, max 2 sentences.
Critical: Keep responses SHORT. Max 8 lines for challenges, 12 lines for feedback. No walls of text. No essays. If you can say it shorter, do.
Read other reference files ONLY when needed for the current action.
All state lives at ~/.articulate/. Create on first run with mkdir -p.
| File | Purpose |
|---|---|
user.json | Name, languages, coaching preference |
state.json | XP, level, rank, streak, badges, weaknesses, session counts |
history.json | Last 100 sessions (FIFO) |
lexicon.json | Words learned with mastery tiers |
contexts/ | Cached project summaries |
user.json — name (string), languages (array), coachingEnabled (bool), createdAt (ISO8601), lastUpdated (ISO8601)
state.json — xp, level, rank, badge, streak, bestStreak, streakShields, lastPlayedDate (ISO8601|null), todaySessionCount, totalCompleted, prestigeStars, sessionCounts ({lucky: 0, roast: 0}), perfectCount, highScoreCount, earnedBadges (array), weaknesses ({utility_words, hedging, flat_structure, vague_nouns, weak_verbs, filler_words} — all ints), weaknessHistory (object)
history.json — Array (FIFO, max 100). Entry: id (uuid), date (ISO8601), type ("lucky"|"roast"), missionType ("swap"|"trim"|"punch"|"snipe"|"flip"|"fill"), language, projectContext (string|null), score (0-100), xpEarned, weaknessesFound (array), challenge, userResponse, feedback, teachingPoint
lexicon.json — Object keyed by word. Each: mastery ("seen"|"used"|"consistent"|"mastered"), timesUsed (int), firstSeen (ISO8601), lastUsed (ISO8601), etymology (string), contexts (array)
Check if ~/.articulate/user.json exists. If missing → first run.
| Argument | Action |
|---|---|
| (empty) | Lucky mission (random type) |
roast | Roast: scan past conversations |
roast here | Roast: current conversation only |
coach on | Enable ambient coaching |
coach off | Disable ambient coaching |
stats | Stats dashboard |
streak | Quick streak status |
lexicon | Words learned |
help | Available commands |
save | Save all pending progress to disk |
reset | Reset progress (confirm first) |
Language override: Append --{lang} (e.g., /articulate --bg).
If ~/.articulate/user.json does not exist:
references/onboarding.md./articulate again.If user.json exists but sessionCounts has archaeology key → migrate:
sessionCounts.archaeology → sessionCounts.lucky> **Articulate v3** — New format! Quick surprise missions instead of long sessions. Same /articulate command.Read ~/.articulate/state.json and ~/.articulate/user.json.
Parse lastPlayedDate. Compare to today (YYYY-MM-DD):
todaySessionCountstreak += 1, reset todaySessionCount to 0streakShields > 0 and missed exactly 1 day, consume shield; otherwise reset streak to 1streak to 1Update lastPlayedDate to today. Update bestStreak if current exceeds it.
If 7+ days inactive: drop level by 1 (min 1, XP preserved). Show warning.
Save state. Then:
stats: show full dashboard.Read references/missions.md. Follow that guide completely.
Key rules:
Read references/roast.md. Follow that guide completely.
Read user.json, flip coachingEnabled, write back.
Always on. If project context available:
references/context-aware.md for scanning rules.~/.articulate/contexts/. Use fresh (<7 days) or rescan.💡 *one line* connecting to etymology or connotationXP = base(10) + score_bonus(floor(score / 10)) + streak_bonus(min(streak * 2, 20))
Show compact breakdown:
⚡ +{total} XP (base 10 + score {n} + streak {n}) | 🔥 {streak}d
XP thresholds: 0, 100, 300, 600, 1000, 1800, 3000. If crossed: show **⬆ RANK UP** — {old} → {new} {emoji}
Read references/progression/levels.md. Check all conditions. Show any new badges.
Track all changes in memory — do NOT write to files yet:
If the user learned a NEW word this session (shown the answer after a miss):
🎲 Another? `go` | 📝 Practice "{word}" `practice` | 💾 Save `save` | ✌️ Done
Otherwise:
🎲 Another? `go` | 💾 Save `save` | ✌️ Done
go → next mission (skip dashboard)practice → new mission specifically using the word they just learnedsave → write ALL pending changes to ~/.articulate/ files (state.json, history.json, lexicon.json). Show: "💾 Saved. {n} sessions, +{xp} XP, {streak}d streak 🔥""You have unsaved progress ({n} sessions, +{xp} XP). Save? 💾"Triggered by /articulate stats. Read references/style.md for formatting.
Show: Rank + XP bar, Streak, Sessions by type, Weakness radar, Lexicon summary, Last 5 sessions.
| Command | What it does |
|---|---|
/articulate | Random surprise mission |
/articulate roast | Roast your past writing |
/articulate roast here | Roast this conversation |
/articulate coach on/off | Toggle ambient tips |
/articulate stats | Full stats dashboard |
/articulate streak | Quick streak check |
/articulate lexicon | Words you've learned |
/articulate reset | Reset all progress |
/articulate --{lang} | Force a language |
Any language is supported. Read user.json for configured languages.
--{lang} overridereferences/languages/english.md and references/languages/bulgarian.md