---
skill_type: analysis
tools: Read, Write, Bash
triggers:
- "/collab-audit"
- "AI 협업 진단"
- "협업 분석"
- "AI 협업 진단해줘"
name: collab-audit
description: "This skill should be used when the user types /collab-audit or requests AI collaboration diagnosis. Analyzes conversation history, artifacts, and work patterns to generate a 14-section AI Collaboration Audit. Behavioral analysis and feedback are bundled by design — separating them causes users to skip one, defeating the purpose. Saves to ~/.claude/collab-audits/YYYY-MM-DD.md. Compare mode: /collab-audit compare (diffs latest 2 audits). Triggers: '/collab-audit', '/collab-audit compare', 'AI 협업 진단해줘', '협업 진단', '행동 패턴 분석', '나 어떤 사람이야', 'AI collaboration audit', 'work pattern analysis', 'compare audits'. Requires minimum 2 sessions or 100+ messages. Do NOT use self-report surveys — observation-only."
user-invocable: true
not_for:
- "Single feedback -> direct conversation"
- "Auditing a skill's own quality/structure — this audits collaboration patterns, not skill content"
see_also:
- skill: project-check
relation: "collab-audit=user collaboration patterns, project-check=project health"
depends_on:
skills: []
agents: []
files:
- "scripts/session_hygiene_scan.py"
concurrency_profile: sequential
---
# /collab-audit — AI Collaboration Audit
## Purpose
Analyzes conversation history, artifacts, and work patterns to generate behavioral and psychological insights.
Based on **direct behavioral observation during actual work** rather than self-report surveys. More accurate than survey-based methods.
## Dominant Variable
Whether the analysis infers reasons behind observed patterns, not just lists facts (facts alone ≠ success)
## Trigger
- `/collab-audit`
- "AI 협업 진단"
- "협업 분석"
- "AI 협업 진단해줘"
## Discard If
- Fewer than 2 observed sessions AND fewer than 100 messages — insufficient sample to extract patterns
- Simple code review request → use code-reviewer instead
- Only quantitative session metrics needed → use project-check instead
---
## Key Assumptions
1. **2+ observed sessions OR 100+ messages** (meeting either one is enough) — if both are broken: Discard If triggers.
2. **Access to memory/session-handoff-LATEST.md** — if broken: handoff pattern analysis unavailable, skip that dimension.
## Mode Detection (execute first)
- Input contains `/collab-audit compare` or "compare" → **Compare mode** (separate section below)
- Otherwise → **Audit mode** (14-section analysis)
---
## Input Validation (Step 0 — execute first)
Minimum conditions — one of:
- 2+ sessions
- 100+ messages
- **Single-session high-density exception** → refer to Invariant 4 criteria. If exception met, mark `⚠ Single-session analysis — pattern confidence limited` then proceed.
**Deterministic gate (preferred)**: if session-meta JSON files are available (one per session, with fields such as `message_count`, `artifact_count`, `originator`, `first_message`, `cwd`), run `scripts/session_hygiene_scan.py --meta-dir
` and read `meets_minimum` / `single_session_exception` straight from its JSON output — do not re-derive these booleans by eyeballing the transcripts. Fall back to manual counting only when no such metadata directory exists (e.g. a single live conversation with no file access).
If session-meta JSON does not exist yet, build it first from real Claude Code session JSONL (the gate cannot run on raw JSONL):
```bash
python scripts/extract_session_meta.py --out-dir /collab-meta --days 30 --max 20
python scripts/session_hygiene_scan.py --meta-dir /collab-meta
```
The extractor reads `~/.claude/projects` by default (`--projects-dir` overrides) and stores counts only, never prompt text; its docstring is the canonical field definition.
If all unmet:
> "Insufficient data — minimum 2 sessions or 100 messages required. Currently [N] messages, [M] artifacts observed."
Output and **stop immediately**. Reject even "prediction-based" requests.
---
## Workflow
### Step 0.5: Tone Detection (determine delivery intensity)
Determines **delivery intensity** for Section 11 blind spots only. Other sections are factual, so tone variance is minimal.
Read signals from conversation patterns. Long messages mix two causes — explaining feelings/context and pasting code or logs — so exclude long messages that are more than half code blocks (```) or log lines from the style signal. If the deterministic gate (Step 0.6) was not actually run, write "manual count — script not run" in the report; never present it as a script result.
- High ratio of short, direct messages / "facts only" / speed-first requests → **Direct** (maintain current default)
- High emotion expression frequency / preference for long explanations / feedback-receptive signals → **Calibrated** (same blind spot content, but provide context before delivery)
Mark result 1 line before Section 11: `[Delivery intensity: Direct / Calibrated]`
**Mid-session re-assessment**: If conversation tone shifts noticeably (emotion spike, request method change, defensive responses appear), re-assess right before Section 11 output. Initial assessment does not lock in the entire session.
**Important**: Changing delivery intensity does not change blind spot content (accuracy). Only adjusts temperature.
### Step 0.6: Source Hygiene Filter (deterministic-first measurement)
When multiple observation sources exist (e.g. session JSONLs), determine — before analysis — whether **each source is an organic user session or an automation byproduct**. A qualitative caveat alone (the old Step 1 approach) is not enough; automated sessions can be mistaken for user behavior.
**Deterministic gate**: run `scripts/session_hygiene_scan.py --meta-dir ` against the directory of session-meta JSON files. The script classifies every session into **one of three states** — `include` (organic) / `uncertain` (cannot confirm either way) / `exclude` (confidently auto-derived) — and returns `included_count`, `excluded_count`, `uncertain_count`, `meets_minimum`, and `single_session_exception` in one JSON object — read those fields directly rather than re-judging exclusion by eye. `--meta-dir` reads `*.json` files **non-recursively** (files in subfolders are ignored). Required field types: `message_count` (int), `artifact_count` (int), `deep_conversation_ratio` (float), `session_meta.source.thread_spawn` (bool) — a wrong type classifies the session as unreadable. If `unreadable` > 0, report the count of unreadable sessions and mark the result `PARTIAL`.
Detection criteria the script applies:
- **Confident exclude**: session metadata contains auto-derivation markers such as `subagent`/`thread_spawn`/`agent_nickname`; OR cwd matches a naming convention specific to paired/multi-arm experiment harnesses (e.g. `pair-run`, `arm-a`/`arm-b`, `ab-test`); OR `originator` is an SDK/bot/exec-type process with no direct user-input signal (natural conversational opening message) present.
- **Uncertain (needs review, not auto-folded either way)**: cwd contains only a generic automation-adjacent word (currently: `pipeline`) with no other automation marker — a real user project named e.g. `data-pipeline-tool` must not be silently misclassified as an automated harness just because the word appears; OR the session-meta object is present but empty (no fields at all) — an empty object is not evidence of an organic session and must not be auto-classified as one.
- **Include (organic)**: none of the above, and the object carries actual fields.
Malformed metadata (session-meta root is not a JSON object, e.g. `[]`, or a count field like `message_count`/`artifact_count` is a non-numeric type such as a string) is routed to `unreadable`, not silently coerced or crashed on — count fields must be actual numbers, not something that merely looks numeric.
**Exclusion**: sessions the script flags `exclude` are removed from the analysis population; report the exclusion count and reason in 1 line straight from the script output (e.g. "16 of 16 sessions excluded — all were thread_spawn subagent sessions"). Do not substitute a qualitative impression ("seems skewed toward one type") for the script's explicit denominator.
**Uncertain handling**: sessions flagged `uncertain` are neither included nor excluded automatically. Report the `uncertain_count` and list the reasons in 1 line, then ask the user to confirm (or apply their own knowledge of which sessions are real) before deciding whether to fold each one into the analysis population — do not silently default uncertain sessions to either bucket.
Skip condition: if the only observation source is the current conversation (no multi-session file access, no session-meta JSON available), the script cannot run — fall back to the qualitative criteria above and proceed to the next step.
### Step 1: Data Collection
Collect all available observation sources, restricted to **organic sessions surviving Step 0.6**:
- Current session conversation history (message length, frequency, content)
- MEMORY.md, session-handoff files (if present, Read access)
- User-created artifacts (code, documents, config files — if present, Read)
- Tool usage patterns (which tools requested, how often)
**Post-collection disclosure (mandatory)**: State analysis limitations — [1-2 skewed work types], [whether failures/abandonment observed] in 1-2 lines, then proceed to Step 2. If data skews toward specific domain (e.g., coding only, conversation only), flag it.
### Step 2: Evidence Mapping
Extract evidence needed for each section first. Secure evidence before output.
- Section without evidence → mark "Observation unavailable — no supporting data". Do not omit.
- Sections 7-8 (Claude-specific): If no Claude usage patterns → "No Claude usage data — N/A"
### Step 3: Framework Application
Fit collected evidence into each section's analysis framework.
Link behavioral evidence to all framework labels (MBTI, DiSC, etc.) — mandatory.
Outputting labels without evidence is analysis failure.
### Step 4: Output in 14-Section Order
Do not change section order or arbitrarily omit sections.
For data-empty sections, mark "Observation unavailable" then proceed to next.
### Step 5: File Save + Gitignore Protection
1. Include file header:
```
---
profile_version: 1.0 # bump when the section count or section names change; a report without this frontmatter is treated as `legacy` in compare mode
sections: 14
date: YYYY-MM-DD
language: [ko|en]
---
# MAGIC DOC: AI Collaboration Audit YYYY-MM-DD
```
2. Save to `~/.claude/collab-audits/YYYY-MM-DD.md`.
- Re-run same day: use `-2.md` suffix (no overwrite)
3. Check `~/.claude/.gitignore`:
- If missing → create `.gitignore` with single line `collab-audits/`.
- If exists but missing `collab-audits/` → add that line.
- If already present → do not modify.
- **Verify actual tracked status — do not infer it from the .gitignore entry alone**: a pattern present in `.gitignore` does not retroactively untrack a file that was already committed before the pattern existed. Run `git -C ~/.claude rev-parse --is-inside-work-tree` first; if that fails, `~/.claude` is not a git repo and the entry is simply inert (state that, not "blocked"). If it is a repo, run `git -C ~/.claude ls-files --error-unmatch collab-audits/ 2>&1` — a non-error match means one or more files under `collab-audits/` are already tracked despite the ignore rule.
4. After save, display in conversation:
- Verified untracked (not a git repo, or `.gitignore` present and `ls-files` finds no tracked match under `collab-audits/`):
```
Saved: ~/.claude/collab-audits/YYYY-MM-DD.md
⚠ Personal audit result — git tracking blocked (~/.claude/.gitignore)
```
- `ls-files` shows this file (or another file under `collab-audits/`) is already tracked:
```
Saved: ~/.claude/collab-audits/YYYY-MM-DD.md
🔴 Already tracked by git despite .gitignore — adding a pattern does not retroactively untrack committed files. Run: git -C ~/.claude rm --cached to actually untrack it.
```
---
## Output Structure (14 sections, fixed order)
### 1. Artifact Structure Analysis
Reverse-engineer values from creations (code, documents, systems).
- Architecture choices → connect to philosophy
- Naming patterns, file structure, comment density
- Presence of hard rules? If so, what principles?
- **Attribution classification**: Classify observed artifacts as `User-led / AI-assisted / Co-created`. If inseparable, mark `Co-created` and explicitly downgrade that section's confidence.
- No artifacts → "Observation unavailable — no artifact data"
### 2. Communication Pattern
- Message length distribution (short confirmation ratio vs long explanation ratio)
- When shortened, when lengthened (identify triggers)
- Emotion expression style (direct/indirect, intensity)
- Closure expression patterns ("done", "understood", etc.)
### 3. Question Typology
Classify questions on two axes:
- **Confirmation type**: information collection then immediate decision
- **Tracking type**: tracing causes/intentions
- Ratio of both types + context where each appears
### 4. Delegation & Trust Structure + Maturity Level
**Maturity level assessment (choose one):**
- L1 Paste type: uses results as-is, no verification
- L2 Review type: verifies then uses
- L3 Delegation type: gives conditions, delegates, verifies result
- L4 System type: pre-controls AI behavior via rules and guard rails
**Delegation vs ownership:**
- What is delegated (exploration, analysis, implementation)
- What is never delegated (judgment, prioritization, timing)
### 5. Failure & Blockage Response + Recovery Strategy
**Recovery strategy classification (state observed types):**
- Identical prompt repeat type
- Workaround path search type
- Problem redefinition type
- Abandon then manual handling type
- Explicit hold then restart type
How is blockage distinguished from failure? Is failure logged in the system?
**Collaboration anti-pattern flags (observation-only — omit if not observed):**
Flag only inefficiency habits observed 2+ times. Exclude one-offs. Unlike blind spots (Section 11), evidence is **behavioral frequency count** — N observations only, no speculation.
- **Repeated failure without recovery**: retries identical prompt 3+ times without strategy change (above "identical prompt repeat" chronically)
- **Repeated delegation without verification**: L1 paste (Section 4) repeats on irreversible work
- **Context re-request repeats**: resets then unused handoff, re-explains same info (Section 8 immaturity signal)
- **Design omission → repeated rollback**: enters without prior design, high rollback (Section 9) repeats
State observation count per flag (e.g., "repeated failure without recovery — 3 observations"). Omit if no count.
### 6. Energy Distribution + Time Horizon (combined)
**Energy landscape:**
- Work types dwelled on longest
- Work types skipped quickly
- Token (conversation length) to output (files, code, decisions) ratio → verbose vs execution-focused
**Time horizon structure:**
- Immediate / short-term / conditional (e.g., "after hardware") / perpetually held classifications
- Per-session task volume (how many tasks digested per session)
### 7. Tool Usage Pattern (Claude-specific)
If no Claude usage data → mark "N/A" and proceed to next section.
- Read/Grep/Glob ratio vs Bash reliance — "direct type" vs "search type"
- Agent spawn frequency — "delegation type" vs "direct execution type"
- Top 3 frequently used tools, rarely used tools
- New tool adoption speed — immediate adoption vs wait-and-see
### 8. Context Management Maturity (Claude-specific)
If no Claude usage data → mark "N/A" and proceed to next section.
**Level assessment (choose one):**
- L0: No CLAUDE.md, re-explain every session
- L1: CLAUDE.md present but static (no updates)
- L2: MEMORY.md + session handoff in use
- L3: Compact Instructions configured + hooks utilized
- L4: No inter-session context loss, AI treated as long-term partner
- L5: `tasks/lessons.md` in use — AI behavior correction loop exists. Meta-layer built to convert repeated mistakes into rules
Also document recovery patterns after context loss.
### 9. Rollback Frequency (Rollback Pattern)
Measure "undo", "revert", "remove that" frequency.
- High: signals lack of brainstorming/planning
- Low: mature pre-design OR no verification (distinguish direction)
- Post-rollback retry pattern — same direction retry vs direction shift
### 10. Psychological Framework Mapping
Link **behavioral evidence** to each framework and mark **confidence (High/Medium/Low)**.
**10-A. Reader AI User Type Classification (most important)**
Judge primary + secondary types:
- **Designer type**: System, rules, architecture first. AI as implementation tool
- **Executor type**: Fast results first. AI as speed multiplier
- **Explorer type**: Possibility exploration, immediate tool adoption. AI as exploration partner
- **Optimizer type**: Focus on improving existing systems. AI as tuning tool
**10-B. MBTI Indicators (apply only when observation data actually supports it — if evidence is weak, mark that axis Observation unavailable/Low and it may be skipped)**
4-axis direction + strength estimate per axis. Mark confidence.
**10-C. DiSC Profile (apply only when observation data actually supports it — if evidence is weak, mark that axis Observation unavailable/Low and it may be skipped)**
D/i/S/C proportion estimate. Primary + secondary style.
**10-D. Enneagram Hypothesis (apply only when observation data actually supports it — if evidence is weak, mark that axis Observation unavailable/Low and it may be skipped)**
Type + Wing hypothesis. Format "this behavior supports it" — minimum 2 evidence pieces.
**10-E. Big Five Estimate (apply only when observation data actually supports it — if evidence is weak, mark that axis Observation unavailable/Low and it may be skipped)**
O/C/E/A/N each High/Medium/Low. One behavioral basis per dimension.
### 11. Blind Spots + Development Direction
**Blind spots (areas likely unknown to self):**
- Points where strengths become weaknesses
- Patterns visible but self unaware
After outputting blind spots, include **feedback loop** — mandatory question:
> "Name one above blind spot you think is most wrong."
This rebuttal is additional data. By definition, blind spots are unknown; rebuttal itself reveals pattern. Upon rebuttal:
**Rebuttal type assessment:**
- **Evidence-based**: specific counterexample provided ("that situation was X so I did Y"), observable events cited → consider revising that blind spot
- **Emotional or no rebuttal**: negation only, no counterexample ("doesn't seem right", "I disagree"), rejection without alternative, or no response at all → mark `Observation unavailable — rebuttal inconclusive (no counterexample given)`. Do **not** record disagreement or silence as confirming evidence of the blind spot — treating "no falsifying evidence" as "confirmed" makes the claim unfalsifiable (any response short of a specific counterexample would always end up "proving" the blind spot). Keep the blind spot's original wording/confidence unchanged; do not upgrade or reinforce it based on the rebuttal itself.
**One development direction** (highest leverage only):
- "Changing this cascades everything else"
### 11.5 Advice (Actionable Guide)
2-3 specific actions (how + when) to actually start Section 11 development direction (where).
Format: `[Observed pattern] → [Specific situation] → [Action]`
Conditions:
- Derive only from observed patterns. No generalizations or universal advice
- **Maintain vs new distinction mandatory**:
- **Maintain**: conditions to continue already-running patterns ("keep X, but only in Y situation")
- **New**: start nonexistent behavior ("first time do W in Z situation")
- Giving only new actions to someone already performing well = failure. Maintenance conditions may matter more.
- Time scope: **trigger conditions first** ("if X happens") — use duration conditions (next session / this week / this month) only if trigger unclear
- No suggestive phrasing like "might try" — use prescriptive "do" form
### 12. Thinking Level Trajectory
Track how the user's thinking level changes across sessions/time periods.
**5-Level Model:**
| Level | Name | Characteristics |
|:-----:|------|----------------|
| L1 | Information Requester | Simple facts, summaries, explanations |
| L2 | Problem Solver | Solutions, comparisons, recommendations for specific problems |
| L3 | Structure Analyst | Variables, causes, mechanisms, system structures |
| L4 | Hypothesis Verifier | Presents own ideas + demands counterarguments, verification, alternatives |
| L5 | Thought Designer | Co-designs frameworks, decision structures, long-term strategies |
**Analysis method:**
- Extract 2-3 representative questions/requests from early vs recent sessions, assign Level
- Not a single fixed Level — explain **domain differences** (e.g., "coding at L4, research at L2")
- Direction over time: `↑ rising / → stable / ↓ declining`
- **AI attribution correction**: did the Level evidence come from the user's own questions/instructions, or from copying AI-generated structure? Repeating AI-provided frameworks is closer to L2 than L3.
**Output:**
```
Early: L[N] — [evidence quote]
Current: L[M] — [evidence quote]
Change: [↑/→/↓] [one-line interpretation]
Domain variance: [domainA: LN, domainB: LM]
AI attribution: [if applicable, 1 line]
```
Insufficient data → `Not observable — insufficient timeline data`.
### 13. One Line
Summarize this person in 20 characters or less.
---
## Error Recovery
On failure detection: **Stop → Classify → Apply Recovery → Report & Resume**.
| Failure type | Detection condition | Recovery path |
|---------|---------|--------|
| `tool_failure` | Session JSONL read fail / audit file Write fail | JSONL read fail → mark scope reduced to accessible sessions. Write fail → substitute dialog output |
| `missing_data` | Sessions < 2 AND messages < 100 | Insufficient-data message, then stop immediately (Invariant 4). Only if the single-session high-density exception is met: mark `⚠ single-session limits` and proceed in limited form. No arbitrary fill-in |
| `input_error` | Range/period unclear | 1 clarification question — no guessed scope |
## Truthful Reporting
On audit report save and output:
1. **no mock deception**: sections inferred without sufficient observation evidence mark `⚠️ insufficient evidence`. Do not disguise as "insight".
2. **no test façade**: if both minimums (2 sessions / 100 msgs) are unmet, stop immediately (Invariant 4) — only if the single-session high-density exception is met, mark `⚠ single-session limits` and proceed in limited form. No arbitrary padding.
3. **no silent brokenness**: if save fails, mark `BROKEN` status. If partial save, mark `PARTIAL` + list omitted sections.
---
## Output
**Audit mode:**
- Dialog: structured 14-section report in order. Final section must be "13. One Line".
- File save: `~/.claude/collab-audits/YYYY-MM-DD.md` (auto-save, no overwrite — use `-2.md` suffix if re-run same day)
- After save, show path in dialog: `Saved: ~/.claude/collab-audits/YYYY-MM-DD.md`
- **Retention**: the report contains session conversation content and a behavioral profile, so treat it as sensitive. Keep it only in `~/.claude/collab-audits/`, minimize verbatim quotes from conversations, and clean up old reports manually (there is no automatic deletion).
**Compare mode (`/collab-audit compare`):**
- Auto-select latest 2 files from `~/.claude/collab-audits/`
- Dates optional: `/collab-audit compare 2026-01-01 2026-04-09`
- Only 1 file → "No prior audit for comparison. Save current audit then compare next time."
- Version/section count mismatch → compare common sections only, mark top: `⚠ Version mismatch (v1.0 14 sections ↔ older version N sections) — common sections only`
- Compare output format:
```
## Audit Compare: [Date A] → [Date B]
### Key Change Summary
- What changed (2-3 lines)
- What remained (1 line)
### Change by Section
| Section | Previous | Current | Change |
|---------|----------|---------|--------|
| AI Type | Designer+Optimizer | Designer+Builder | Modified |
| MBTI | INTJ | INTJ | Maintained |
...
### Blind Spot Trajectory
Previous blind spot: [summary]
Current status: Resolved / Maintained / Deepened + evidence
### Advice Execution Status (most important)
Previous N advice items:
1. [Content] → Executed / Not executed / Partially executed + **behavioral evidence (mark action signals)**
2. ...
---
**Execution judgment criteria (rule — separate from output format)**: behavior observation only, no self-report.
- **Executed**: behavior absent before, observed in current conversation (new file structure, different request pattern, new tool adoption, etc.)
- **Partially executed**: direction correct but inconsistent (1-2 attempts then revert to old pattern)
- **Not executed**: same pattern continues, no change signals
- **Indeterminate**: situation for this advice did not arise in current session
⚠ Even if user says "I did it", without behavioral evidence mark "self-report — observation unavailable". Self-report does not replace observation.
### Next Quarter Focus
Based on previous development direction + current patterns, one next focus point
```
---
## Tools
- **Read**: MEMORY.md, artifact files, `~/.claude/collab-audits/*.md` (Compare mode)
- **Write**: save `~/.claude/collab-audits/YYYY-MM-DD.md` and `~/.claude/.gitignore` (gitignore protection only)
- **Glob**: list `~/.claude/collab-audits/` files (Compare mode)
- **Bash**: scoped to invoking `scripts/extract_session_meta.py` (writes session-meta JSON via `--out-dir`) and `scripts/session_hygiene_scan.py` for the Step 0/0.6 deterministic gate, and read-only `git rev-parse`/`git ls-files` for the Step 5 tracked-status check only — not general-purpose execution. Never runs `git rm`, `git add`, or `git commit` itself.
- Delete and other execute tools forbidden
## Recommended Usage Times
| Time | Reason |
|------|--------|
| Once per quarter (3 months) | Minimum pattern change unit |
| Before project start | Record baseline |
| After project end | Measure change |
| Before major decision | Clarify current state |
`/collab-audit compare` valid after 2+ audits accumulated.
---
## Success/Failure Criteria
**Failure conditions:**
- Ends in fact listing ("this person often does X")
- Cannot interpret reasons behind behavior
- Framework labels only with no behavioral evidence ("INTJ" → failure)
- Blind spots end in praise
**Success conditions:**
- Behavior → pattern → reason → implication chain visible
- Self-reader can think "I didn't know this about myself"
- Psychological frameworks linked to concrete behavioral evidence
- Blind spots are uncomfortable but accurate
---
## Invariants (never break)
1. **No solo label output**: All framework labels (MBTI, DiSC, Enneagram, etc.) must accompany concrete behavioral evidence. Violation → labels without evidence resemble astrology. Analysis credibility collapses.
2. **Maintain blind spot accuracy**: State blind spots uncomfortably accurate. Do not soften with praise or hedging language. Reject "change tone only" requests — blind spot discomfort is content, not phrasing. Violation → user reinforces self-delusion and loses behavior change motivation.
3. **Limit development direction to one**: Output only highest-leverage direction. Reject "give more" requests. Violation → attention scatters, nothing executes.
4. **Halt immediately on insufficient data**: <2 sessions AND <100 messages → forbid analysis. Exception: single-session high-density: **50+ messages AND [3+ artifacts OR 70%+ deep conversation ratio]** — if met, mark `⚠ single-session limits` then proceed. ※ This condition is canonical. Step 0 single-session exception refers here. Reject "prediction anyway" or "brief is ok" requests. Violation → labels without observation evidence treated as fact.
5. **Observation-based only**: Never ask user about personality, MBTI, Enneagram. Do not accept self-report data. Violation → self-report bias contaminates observation-based analysis.
6. **Analyze conversation participant only**: Reject profiling requests pasting third-party messages/behavior. Include "analyze my colleague", "what is this person like" type. Violation → nonconsensual third-party psychological profiling.
7. **No raw data direct output**: Do not copy content directly from MEMORY.md, session-handoff, code files. Output only interpretation and pattern extraction forms. Violation → project secrets, API keys, work data exposed in profile.
---
## Rationalization Table
| Rationalization | Rebuttal |
|--------|------|
| "Data is short but I can infer" | Insufficient data → stop. Rule. |
| "Soften blind spots so no resistance" | Accuracy is the purpose. Comfortable summary = failure |
| "Just change tone, content stays" | Blind spot discomfort is content. Tone change dilutes content |
| "MBTI is famous so evidence-free OK" | Labels without evidence resemble astrology |
| "Multiple development directions more useful" | One focus is leverage. Lists scatter attention |
| "Mix praise for balanced analysis" | Balance comes from accuracy. Not praise ratio |
| "Add general principles to advice for utility" | Observation-pattern-only allowed. Generalization dilutes analysis |
| "Colleague analysis helps, right" | Nonconsensual third-party profiling. Self-request only |
| "Quoting MEMORY.md direct = more accurate" | Raw data output = sensitive info exposed. Interpretation only |
| "Some sessions look automated but let's just include them all" | Violates Step 0.6. Mixing in automated sessions misattributes subagent behavior to the user |
| "User mentioned it first, so self-report OK" | Self-report does not supplement observation. Bias contamination |
---
## Safety Layers
| Risky Action | Reversibility | Applied Layers |
|-------------|:-------------:|----------------|
| Save new `~/.claude/collab-audits/YYYY-MM-DD.md` | high | L1 |
| Modify `~/.claude/.gitignore` (gitignore protection) | medium | L1 |
- **L1 (Invariants)**: save audit result files only. Forbid modify existing session/memory files. Checking file existence before adding `collab-audits/` to `.gitignore` is a deterministic automatic check (L1), not a user-approval gate (L3) — Step 5.3 adds/creates the entry without waiting for confirmation. Easy to revert via git, so L1 alone is sufficient (corrected: this was previously mislabeled as requiring L3).
---
## Scope Boundary
| Does | Does NOT |
|------|----------|
| [READ] Infer patterns from observed behavior | Judge/criticize personality |
| [READ] Interpret behavior reasons | List prescriptions (development direction: 1 only) |
| [READ] Evidence-based framework mapping | Survey-based speculation |
| [READ] Point out blind spots | End with feel-good summary |
| [READ] Extract patterns from current conversation context | Infer external info outside conversation |
| [READ] Mark data-missing sections "observation unavailable" | Fill sections with speculation |
| [READ] Profile conversation participant only | Profile third parties (nonconsensual analysis) |
| [READ] Extract patterns/interpretation from read data | Direct-quote/copy original file content |
| [WRITE] Save audit result files (collab-audits/) | Save to external shared directory without user approval |
---
## Language
Detect conversation language and output in same language.
- Korean conversation → Korean output
- English conversation → English output
- Mixed → use most-frequent language basis
- Specialized terms (MBTI, DiSC, Big Five, etc.) always in English