Skip to content
Back to skills

Introspect

ASecurity

Build or refresh profile files from local notes and attributable reading feedback.

  • 4 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 9, 2026
ai-agentsgobash

Security analysis

A100/100

Scanned October 9, 2026

npx -y skills add mhxie/Atelier --skill introspect --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Introspect?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Introspect
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/mhxie-introspect-atelier/badge)](https://www.skillsdirectory.com/skills/mhxie-introspect-atelier)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: introspect
description: Build or refresh profile files from local notes and attributable reading feedback.
---
# Introspect

> Also reachable via `/hi <natural language>` (e.g., `/hi rebuild profile`, `/hi who am I`,
> `/hi refresh profile`). See `harness/intents.toml` `[intents.introspect]` for the row's
> example phrases. Both paths execute this same procedure.

Build or refresh your self-model by examining your local notes, session history, and reading patterns. Produces three profile files that the rest of the system consults.

`/introspect` discovers patterns rather than extracting fields mechanically: what you're drawn to, how your taste is shifting, where your curiosity is orbiting before you've named it as a goal.

## Prerequisites

Verify the local `$OV/` vault is present and non-empty: `Bash: test -d "$OV"/daily && ls "$OV"/daily | head -1`. If the directory is missing or empty, tell the user: "Local `$OV/` vault is missing. Check that `$OV` is set and points to a valid directory."

## Output Files

```
profile/
├── identity.md      — who you are + intellectual taste + curiosity vectors
├── directions.md    — era, goals, quarterly focus, active directions
└── expertise.md     — domain knowledge, research taste, known biases
```

`profile/reader_persona.md` is a raw input signal derived from Readwise data, not an output of this command.

## Pipeline

### Step 1: Gather Raw Material

Run these searches in parallel over the local `$OV/` vault. Local grep is instant, deterministic, and returns full paths you can then `Read` directly.

**Goals & Directions:**
1. `Grep(pattern: "目标", path: "$OV/")` — Chinese goal mentions
2. `Grep(pattern: "goal", path: "$OV/", -i: true)` — English goal mentions
3. `Grep(pattern: "小目标", path: "$OV/")` — Annual goal notes
4. `Grep(pattern: "objective", path: "$OV/", -i: true)` — Additional goal mentions

**Identity & Themes:**
5. Discover tags: `Bash: grep -rohE '#[A-Za-z][A-Za-z0-9_-]*' "$OV"/ | sort -u` (local tag inventory)
6. `Grep(pattern: "career", path: "$OV/", -i: true)` — Career trajectory
7. `Grep(pattern: "职业", path: "$OV/")` — Chinese career notes
8. `Grep(pattern: "learning", path: "$OV/", -i: true)` — Learning interests
9. `Grep(pattern: "学习", path: "$OV/")` — Chinese learning notes

**Recent Context:**
10. `Read <paths.daily_notes>/<today>.md` (today)
11. `Read <paths.daily_notes>/<yesterday>.md` (yesterday)
12. Recent planning: `Bash: find "$OV"/daily "$OV"/reflections "$OV"/gtd -type f -name "*.md" -mtime -30 | xargs grep -l -i "plan" 2>/dev/null`

Deduplicate results by file path. Prioritize files with recent mtimes. **Semantic pass:** for conceptual angles grep cannot phrase ("curiosity vectors", "intellectual taste", "what am I drawn to"), run `Bash: uv run scripts/semantic.py query "<concept>" --top 10`. Reframe and retry if thin.

### Step 2: Read Full Content

For the top ~30-40 most relevant notes, `Read` the file paths returned by Step 1 directly. Focus on:
- All goal notes (critical for directions.md)
- Recent daily notes (critical for identity.md — taste and curiosity signals)
- Top career/learning notes

### Step 3: Discover Taste & Curiosity

This step goes beyond mechanical extraction. Look for:

**Intellectual taste** (what you engage deeply with vs. skim):
- Topics that recur across daily notes without being declared goals
- Explicit item decisions and usefulness reasons from
  `uv run scripts/decisions.py reading-evidence`. Consumption is a weaker,
  separate signal. Triage caches record agent proposals; they establish no
  user choice or taste. Use `protocols/decision-ledger.md` → Reading feedback
  loop for attribution and unknown states.
- Discussion tangents that repeatedly surface in reflection sessions
- Aesthetic preferences in how you evaluate ideas (from research-profile patterns)

**Curiosity vectors** (areas orbiting but not yet goals):
- Topics mentioned 3+ times in recent notes that aren't in current goals
- Reading saves that cluster around an unnamed theme
- Questions you keep asking but haven't formalized

**If `profile/reader_persona.md` exists**, read it as a secondary signal — it shows what you save (behavioral), not what you think about (intentional). Note divergences between Readwise patterns and local-note patterns.

### Step 4: Synthesize Profile Files

Using all gathered content, write three files:

**`profile/identity.md`** — who you are + taste + curiosity:
```markdown
# Identity
Last built: YYYY-MM-DD

## Who You Are
[2-3 sentence summary — role, interests, life stage]

## Active Life Areas
[Bullet points for each major area]

## Major Themes
[Recurring topics — what does this person think about most?]

## Intellectual Taste
[What you find interesting, elegant, and worth your time — independent of goals. Built from session patterns and reading engagement.]

## Curiosity Vectors
[Areas you're starting to orbit but haven't formalized as goals yet. Detected from session patterns, reading saves, and discussion tangents.]

## Key People
[Important people referenced frequently]

## Recent Focus (last 30 days)
[What you've been writing about recently]
```

**`profile/directions.md`** — era, goals, focus:
```markdown
# Directions
Last built: YYYY-MM-DD

## Era
[Current era, theme, primary/secondary directions, quarterly focus]

## Near-term (next 1-3 months)
[Goals with specific metrics — Source: [[Note Title]]]

## Mid-term (3-12 months)
[Goals from annual planning notes]

## Long-term (1-3 years)
[Career/life direction from strategic planning]

## Stale Goals (>1 year old, may need review)
[Goals from notes not edited recently]
```

**`profile/expertise.md`** — domain knowledge, research taste:
- Only update if new evidence warrants it (new reviews, new domain exposure)
- Follow the update guidelines already in the file
- Don't downgrade expertise without multiple data points

### Step 5: Quality Gate — Profile Validation

Before writing profile files, dispatch **Reviewer** + **Challenger** in parallel:

- **Reviewer** spot-checks 3-5 claims in the draft profile against source notes by `Read`-ing the local file paths:
  - Are cited [[Note Titles]] real and accurately represented?
  - Do "Intellectual Taste" claims have evidence in the notes, or are they fabricated?
  - Are goal statuses (progressing/stale) consistent with note edit dates?
  - Assess using Session Review dimensions (Citation Accuracy + Honesty only)
- **Challenger** probes the profile for blind spots:
  - Are curiosity vectors genuinely emerging, or just noise from 1-2 notes?
  - Does the profile overweight recent notes and miss long-term patterns?
  - Are there important life areas absent from the profile entirely?

If the Reviewer returns `NEEDS_REVISION` or `REJECTED`, fix the specific findings before writing. Present the validated profile to the user before saving — the user confirms or corrects.

### Step 6: Check for Divergences

Compare the three profile layers and flag tensions:
- Identity taste says X, but directions don't include it → potential emerging goal?
- Reader persona (Readwise) shows heavy saves in area Y, but no local notes → consuming but not processing?
- Expertise is deep in area Z, but no current goals reference it → dormant strength?

Present divergences to the user — these are the interesting findings.

### Session Log

After writing profile files, emit a session log:
1. `Bash: uv run scripts/session_log.py --type introspect --duration <minutes>`
2. `Edit` the created file to populate sections from session data (agents dispatched, searches, questions, frameworks, anomalies). The canonical fill-in guide lives in `protocols/session-log.md` § "Section Guidance". Leave empty sections with headers only. If the write fails, warn and continue.

### Step 7: Report

Tell the user what you found:
- How many notes were queried
- Key themes identified
- **Taste and curiosity discoveries** (the new part)
- Any divergences between layers
- Suggest running `/hi` to start using the profile

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.