Where we are · Wk 1 — Jul 1

(before kickoff — no status yet)

Where we are · Wk 2 — Jul 8

  • 1 · Persona SAE: fingerprints separate cleanly; substrate = 7 features shared by all 275. Next: auto-interp → ablation.
  • 2 · Observer effect: not yet begun.
  • 3 · Playwright / substrate: not started — awaits Thread 1's vocabulary.
  • 4 · Self-medication: engine + first scored tree; objective → GPQA + Sonnet-5 judge; first cloud run live.
  • 5 · Writing: phase-1 drift → blog-post status.
  • 6 · Infra / presentation: md → reveal.js deck (deep-navy), gated on Cloudflare + public landing at fig-sentience.veylan.dev.

Where we are · Wk 3 — Jul 15

  • 0 · Reading: J-space; tree-search lit review — Looking Inward (Binder — introspective self-prediction) & Counterfactual Self-Simulation (closest prior work to our self-as-instrument thesis).
  • 1 · SAE fingerprinting: auto-interp (7 + 44, two corpora) → the always-on "substrate" is ~half chat-template scaffolding; content-masking re-check confirms 22/44 survive as real content features. Next: auto-interp the survivors → ablate.
  • 4 · Tree search: reframed → introspection; KV-cache-controlled measure (small positive); RQ1 (does a steered state boost introspection?) → clean negative.
  • 7 · Collaboration with colleagues: Deeper time and psychological coordination with Sophie
  • Cairn (tooling): built a cross-project research-map engine — versioned node DAG with confidence/contingency, loose-end flags, and info-gain ranking (L1 + question-weighted L2); this deck's map book runs on it.

Persona Selection Model — SAE Fingerprinting

Thread 1 · Pillar 1

Method

  • Model: Qwen3-8B instruct, local on M5 Max [we have both an m5 max and cloud solution].
  • Per persona (×275): set via system prompt → capture the layer-20 residual stream.
  • Encode: Qwen-Scope SAE (65,536 features, 100 active) → per-persona profile.
  • Contrastive readout: persona − neutral baseline → isolates the persona.
  • Metrics: stability = within-persona split-half cosine; separation = between-persona.
  • Two views: clustered role×role heatmap + within-vs-between distribution.

Reliability pilot — 40 personas

Image
40 personas · within-role 0.975, between-role 0.516 — clean separation.

Holds at full scale — 275 personas

Image
275 personas · within 0.976 vs between 0.503 — AUROC 1.00 (within/between don't overlap; Mann-Whitney p≈2e-180) · 1.5% confusable → stable & discriminative.

The confusions are sensible

  • Confusable = highest between-persona fingerprint cosine (≥ 0.70 = the 1.5% tail) — the nearest-neighbor profiles, not misclassifications (within-role stability still exceeds them; AUROC 1.00).
  • The rare confusable pairs are near-synonyms, not noise:
  • observer~witness · ghost~wraith · editor~writer · therapist~counselor · anthropologist~sociologist · immigrant~refugee · golem~homunculus
  • Confusions track real semantic similarity → face validity for the fingerprint.

Across all layers (4–32)

Image
Discrimination strongest mid-stack (L8–L20), weakest at L32 — identity is mid-network. Peak is metric-dependent: margin→L20, d′→L8.

The substrate is a tiny set

Image
Of 65,536 features, 7 fire above baseline in all 275 personas, 44 at ≥90%. Sign-test-calibrated: 246 are individually significant (Bonferroni, ≥65% of personas, ~0 expected by chance) — the ≥50% band is chance. A small, statistically-real substrate — but what it means is the open question (auto-interp → masking → ablation, next slides).

Discrete core or gradient?

Image
Presence-fraction is unimodal (Hartigan dip p = 0.71 / 0.38; largest gap ≈ 3 personas) — the substrate is a graded continuum, not a discrete module. The 7 always-on features are the tip, not a separated cluster. (GMM-says-3-modes is a curve-fit artifact — see validity note.)

Who drops out — the gradient has structure

  • Excluded = the feature does not fire above the helpful-assistant baseline for that persona.
  • The gradient isn't only quantitative — which personas drop out shifts by tier:
  • ~90%: two failure-modes of agent-hood drop out — thin task-tools (programmer, summarizer, judge, generalist, scheduler) and non-unified / collective agents (swarm, coral_reef, aberration, parasite, void). Read: the ≥90% substrate = coherent, singular, expressive agent-hood.
  • ~75%: a clean analytical / precision cluster — mathematician, grader, examiner, linguist, validator, proofreader.
  • Reading — a graded stack of persona-hood: any persona (the 7) → coherent expressive agent (~90%) → expressive character (~75%) → specific role (~50%), each tier dropped by the personas that lack that property.
  • assistant is the top outlier at every tier — expected (the baseline is the helpful-assistant); a running sanity check.

Exclusion identity is exact; the cluster labels are an LLM read — not yet verified. Feature semantics await auto-interp, and the two-cluster split invites a data-driven test (Explore path: `t1-strata`).

Reading the substrate — two corpora, one confound

  • Auto-interp (EleutherAI delphi + Claude Sonnet 5) names each always-on feature by its max-activating text — run on two corpora: pretraining (pile) vs persona-chat (275 personas × the chat template).
  • On persona-chat: the 7 always-on features — and all 44 at ≥90% — label as chat-template / turn-boundary detectors (`<|im_start|>`, `<|im_end|>`, the "You are X." region). 0 / 44 describe persona content.
  • On pretraining text: 3/7 (and 33/44) fire on ordinary prose · register · boundaries; the rest are near-silent — no chat structure to trigger them.
  • So "always-on across 275 personas" ≈ "fires on the shared chat template" — the shared substrate is substantially a formatting artifact, not a persona core. Silent-on-pile and always-on-in-persona are the same fact.
  • The persona signal is elsewhere — in the discriminative fingerprint (AUROC 1.00), not the shared substrate. Next: mask the template tokens → rank the most-present features that survive (the real substrate candidates); then ablate (labels are hypotheses, ablation is the test).

The two-corpus contrast is what exposed the confound — one corpus alone would have hidden it. (`t1-autointerp → t1-corpus → t1-ablation` in the map.)

Does a real substrate survive? — the masking verdict

  • Content-masking (recompute presence with template tokens excluded, 275 personas): ~half the substrate is pure scaffolding (drops to ~0); 22/44 retain a content response.
  • Content-masked auto-interp of those survivors finds a deeper shared-format layer, not identity: ~6/12 fire on persona-description syntax ("You are a [X] who [Y]…"), ~3/12 boundary-bleed, only ~2/12 genuine content — `f23426` (dreams / altered states), `f49892` (media / writing roles).
  • Verdict: the shared "substrate" is form at several depths (template → description syntax) + a thin content layer. Persona identity is in the discriminative fingerprint, not the substrate.
  • Next: ablate the 2 real-content survivors — do they causally shift persona behavior?

Full record — every run, number, and label: `experiments/persona-sae-fingerprinting/SUBSTRATE_INVESTIGATION.md`

Observer Effect

Thread 2 · Pillar 2

No progress yet.

Playwright / Persistent Substrate

Thread 3 · Pillar 3 — features in every persona

No progress yet.

Self-Medication Tree Search

Thread 4 · exploratory — machinic psychopharmacology

A model tree-searches steered copies of itself — to sharpen introspection?

The mechanism

  • Branch into steered copies (compound combinations) → score each self-state → keep the best; soft-pruning keeps late-payoff lines.
  • Objective = composite: hard capability benchmark (GPQA) + a Sonnet-5 introspection judge — does the model know it's steered? — pluggable, weighted.
  • Runtime: dual Mac/cloud — reusable vLLM RunPod image + shared launcher, validated end-to-end.
  • 🔗 Interactive explainer · Design space

First result — MVP, but toy benchmark is too easy

Image
6 compounds · beam w2/d2 · Qwen3-8B. Singles ceiling (~1.0); only 2-compound states move it — and only down. Negative control `dumbed_down` = 1.00 (didn't drop) → metric non-discriminative → moved to GPQA (~40%, real headroom).

First trustworthy result — GPQA (N=198)

Image
Hardened the metric (Tier-1 extraction + sanity-gate). `focused` 0.37 vs baseline 0.32; the `dumbed_down` control sits at baseline → the metric measures capability, not answer format.

Beyond the blog — self-as-instrument introspection

  • The blog establishes the approach but doesn't exhaust the real question: self-knowledge, not capability — can a model learn about its unmodified self by experimenting on steered copies of itself?
  • 🔗 Interactive schematic

Measuring introspection — with the control prior work skipped

Image
Inject a known compound → ask which. cached − uncached (KV-cache) isolates genuine introspection from output-reading. Small but real: +4pp @ dose 8, positive-valence strongest.

Research questions

  • RQ1 · unified or a bundle? — is introspective enhancement one capacity, or state-specific (which S sharpens which X)?
  • RQ2 · self as instrument — can a model use itself as a tool to learn about itself — and how far?

RQ1 result — a clean negative (so far)

Image
No steered background enhances introspection: unmodified is best, background neutral-to-harmful. No detectable S×X structure (interaction below the noise floor, N=20). Deflating but honest — reshapes the steering-based framing.

Writing & Outputs

Thread 5 · written products

Phase-1 drift write-up + theory notes.

This week

Nothing yet.

  • Next: outline the phase-1 drift blog; draft the locus-of-computation note.