| name | whoami |
| version | 0.0.5 |
| description | Orchestrate 7-axis self-observation from local LLM transcripts. Autonomous evidence gathering + LLM-synthesized narrative. Triggers: "who am I", "self profile", "profile me", "honne whoami", "whoami self".
|
| ssl | {"scheduling":{"anti_triggers":["`.honne/persona.json` ์ด ์ด๋ฏธ ์ ์ ํ๊ณ ์ transcript ๊ฐ ์์ ๋ (compare ์ฌ์ฉ)","๋จ์ผ axis ๋ง ํ์ํ ๊ฒฝ์ฐ (lexi ์ฌ์ฉ)"]},"structural":{"scenes":["Step 1: Scope+Locale HITL","Step 2: Scan","Step 3: Rejection reframe filter","Step 4: Per-axis autonomous record","Step 5: LLM narrative synthesis","Step 6: Render persona and report"],"branches":["Step 2: scan exit non-zero โ output stdout+stderr verbatim, halt","Step 3: validate exit 3 (overlap) โ skip axis + log 'reframed'","Step 4: insufficient_evidence true โ skip axis, continue","User responds 'n' on candidate โ record rejection"],"resumable":true},"logical":{"tools":["AskUserQuestion","bash","python3","Read","Write"],"side_effects":{"reads":[".honne/cache/scan.json",".honne/cache/axis-${axis}.json"],"writes":[".honne/cache/scan.json # overwrite",".honne/cache/axis-${axis}.json # overwrite",".honne/assets/claims.jsonl # append",".honne/assets/rejections.jsonl # append",".honne/cache/narrative.json # overwrite",".honne/persona.json # overwrite","docs/honne.md # overwrite"],"deletes":[],"network":[]},"idempotent":false,"rollback":".honne/assets/*.jsonl ์ ๋ง์ง๋ง RUN_ID ๋ผ์ธ์ jq/grep ์ผ๋ก ์๋ ์ ๊ฑฐ. .honne/ ์ docs/honne.md ๋ .gitignore ๋์์ด๋ฏ๋ก git checkout ๋ถ๊ฐ โ ์คํ ์ cp -r .honne .honne.bak ๊ถ์ฅ."}} |
honne โ 7-Axis Self-Observation
When invoked, execute Step 1 through Step 6 in order immediately. Do not summarize the skill or ask what the user wants โ invocation itself is the request. Start by asking the Step 1 question.
Step 1: Scope + Locale HITL
Invoke AskUserQuestion tool with two questions in a single call:
(a) Scope:
question: "Scan scope?"
options: [{"label":"repo","description":"current project only"},{"label":"global","description":"all projects"}]
(b) Locale:
question: "Locale?"
options: [{"label":"ko","description":"ํ๊ตญ์ด"},{"label":"en","description":"English"},{"label":"jp","description":"ๆฅๆฌ่ช"}]
Set SCOPE and LOCALE from the two replies. Do not use plain-text Q&A โ arrow-key selection only.
Step 2: Scan
Run: bash "${CLAUDE_PLUGIN_ROOT}/scripts/honne" scan --scope "$SCOPE" --cache ".honne/cache/scan.json"
Capture RUN_ID from result: RUN_ID=$(python3 -c 'import json; print(json.load(open(".honne/cache/scan.json"))["run_id"])')
Non-zero exit โ output stdout+stderr verbatim to user, stop. Do not interpret exit codes.
Step 3: Rejection reframe filter (skip candidate)
For each axis, run: bash "${CLAUDE_PLUGIN_ROOT}/scripts/honne" query --base-dir ".honne" --tag "<axis>" --type rejection --scope "$SCOPE"
Before Step 4 records each axis, pipe the candidate through bash "${CLAUDE_PLUGIN_ROOT}/scripts/honne" axis validate --text "$candidate" --locale "$LOCALE" --skip-if-overlaps "$rejection_text" โ exit 3 = overlap, skip and log "reframed". ๋ชจ๋ ๋ณ์๋ ํฐ๋ฐ์ดํ ์ธ์ฉ ํ์(๊ณต๋ฐฑยทํน์๋ฌธ์ ์์ ). LLM ํธ์ถ ์์.
Recording rejections: If the user explicitly says "n" or rejects a candidate claim for any axis, record it as a rejection so Step 3 can filter it in future runs:
bash "${CLAUDE_PLUGIN_ROOT}/scripts/honne" record claim \
--type rejection --axis "$axis" --scope "$SCOPE" \
--claim "$CANDIDATE" --run-id "$RUN_ID" \
--out ".honne/assets/rejections.jsonl"
Step 4: Per-axis autonomous record
For each axis from axis list, run each command separately โ do NOT bundle into a script file or use heredocs:
bash "${CLAUDE_PLUGIN_ROOT}/scripts/honne" axis run "$axis" \
--locale "$LOCALE" --scan .honne/cache/scan.json > ".honne/cache/axis-${axis}.json"
python3 -c "import json,sys; d=json.load(open('.honne/cache/axis-${axis}.json')); sys.exit(0 if d.get('insufficient_evidence') else 1)"
If exit 0 โ skip this axis (insufficient evidence), continue to next.
python3 -c "import json; print(json.load(open('.honne/cache/axis-${axis}.json'))['candidate_claim'])"
Capture stdout as CANDIDATE.
bash "${CLAUDE_PLUGIN_ROOT}/scripts/honne" record claim \
--type claim --axis "$axis" --scope "$SCOPE" \
--claim "$CANDIDATE" --run-id "$RUN_ID" \
--quotes-file ".honne/cache/axis-${axis}.json" \
--out ".honne/assets/claims.jsonl"
HARD RULE โ execution constraints (test suite enforces):
- Each
bash block runs as a direct shell command โ no heredocs (<< 'EOF'), no script files, no command bundling.
- No intermediate writes to
/tmp โ use .honne/cache/ instead. Writing to /tmp is a SKILL.md contract violation.
Step 5: LLM narrative synthesis
Invoke Claude (your own mental reasoning) to synthesize explanations and a one-liner:
(a) Read synthesis prompt: Read "${CLAUDE_PLUGIN_ROOT}/skills/whoami/templates/synthesis_prompt.${LOCALE}.md"
(b) Build USER_PAYLOAD from the claims recorded in Step 4. You already have the AXIS_JSON outputs in memory โ construct the payload directly as a JSON object without re-reading files:
USER_PAYLOAD = {
"locale": "<LOCALE>",
"claims": {
"<axis>": {"claim": "<CANDIDATE>", "evidence_count": <len(quotes)>} for each recorded axis,
"<skipped_axis>": null for each axis that had insufficient evidence
}
}
Do NOT use python3 << 'PYEOF' or any heredoc to build this payload. Assemble it in your mental context from the Step 4 outputs already known.
(c) Synthesize: Apply synthesis_prompt system instructions to yourself + USER_PAYLOAD as user input. Produce STRICT JSON response.
(d) Resolve the absolute path first:
python3 -c "import os; print(os.path.join(os.getcwd(), '.honne/cache/narrative.json'))"
Capture stdout as NARRATIVE_PATH. Then: Write the JSON response to the resolved path. If JSON parse fails or response is empty, skip saving.
Step 6: Render persona and report
date -u +%Y-%m-%dT%H:%M:%SZ
Capture stdout as NOW.
bash "${CLAUDE_PLUGIN_ROOT}/scripts/honne" render persona \
--claims .honne/assets/claims.jsonl \
--scope "$SCOPE" --locale "$LOCALE" --run-id "$RUN_ID" --now "$NOW" \
--narrative .honne/cache/narrative.json \
--out .honne/persona.json
bash "${CLAUDE_PLUGIN_ROOT}/scripts/honne" render report \
--persona .honne/persona.json --locale "$LOCALE" --out docs/honne.md
Completion
Report saved files to .honne/persona.json and docs/honne.md. Use /honne:compare to review past observations.
Output the following next action suggestions to the user:
Next actions
/honne:persona โ generate two personas (antipattern ร signature) from this profile
/honne:crush <topic> โ stage a live debate between the two personas