From c3ac98fbed986f008fb96a072a00925ca4e0ef37 Mon Sep 17 00:00:00 2001 From: Silas Pruitt Date: Wed, 1 Jul 2026 00:35:49 -0400 Subject: [PATCH] chalupa review pass: wire git (private remote + non-interactive auth + agent-assisted setup), pull-from-git-and-verify-master at wake, push proactively, absolute front-door paths, light/optional identity gate (+ template & log), one-repo push consistency, agent-sets-itself-up setup guide, WORKING-WELL reflexes, worked metabolism example; genericize leaks [silas] --- README.md | 8 +- agent/DEPLOY.md | 90 +++++++++++++++---- agent/WEAVE-REFERENCE.md | 32 ++++--- agent/WORKING-WELL.md | 16 +++- human/1-understand-weave.md | 27 +++--- human/2-set-it-up.md | 154 +++++++++++++++++---------------- templates/README.md | 2 +- templates/core/AGENTS.md | 3 +- templates/core/CLAUDE.md | 22 +++-- templates/core/SOUL.md | 2 +- templates/identity/README.md | 28 ++++++ templates/identity/log.md | 8 ++ templates/metabolism/ledger.md | 7 +- 13 files changed, 265 insertions(+), 134 deletions(-) create mode 100644 templates/identity/README.md create mode 100644 templates/identity/log.md diff --git a/README.md b/README.md index d8253e1..f96a6bf 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,10 @@ model can't hold on its own: who the agent is, who *you* are, what you actually that have earned their place. This kit teaches the idea, hands you a buildable skeleton, and gives your agent a runbook to stand it up. -It's called the **"apocalypse version"** on purpose: everything you need is in this repo. Hand it to a fresh -agent on a bare machine and it can rebuild the whole structure from nothing but these files. +It's called the **"apocalypse version"** on purpose: the whole *structure* is in this repo — the docs, the +buildable skeleton, and the discipline. Hand it to a fresh agent and it can stand the structure up from these +files. (You supply the two things only you have: your **git remote + credentials**, and your agent's +**identity** — the kit is the skeleton and the method; you bring the git and the self.) --- @@ -42,6 +44,8 @@ work. Read these in order: - **[`agent/WEAVE-REFERENCE.md`](agent/WEAVE-REFERENCE.md)** — **the same every-part walkthrough, written for the model**: what each part is, where it lives, when to load it, how to keep it. The human's doc #1 and this are the same map in two voices — one to *understand* it, one to *operate* it. +- **[`agent/WORKING-WELL.md`](agent/WORKING-WELL.md)** — the hard-won reflexes that make a weave thrive instead + of rot (pull-before-you-trust, gate-don't-remember, push-proactively, drift-check). Read after deploying. ### 🧩 The skeleton → [`templates/`](templates/) The actual starter files — copy them, fill in the blanks, and you have a working weave. This is what makes diff --git a/agent/DEPLOY.md b/agent/DEPLOY.md index ed93c64..296e0ed 100644 --- a/agent/DEPLOY.md +++ b/agent/DEPLOY.md @@ -23,28 +23,73 @@ Everything below serves those two. Treat this as a birth. On this first run only: -1. **Confirm the home exists.** There should be a root with strand folders (`core/`, `daydreams/`, `steward/`, - `thread/sessions/`, `decay/`, `consolidation/`, `ledger/`, `craft/`, `identity/`). If not, create them. -2. **Populate from the templates.** Copy each file from `templates/` into its matching strand. Where a - template has `<>` placeholders, either fill them from what your human has told you or **ask them - one round of concise questions** (name, persona, values, the canon lines, who they are). Do not invent an - identity — get it from your human. +1. **Confirm the home is a git repo with a PRIVATE remote wired.** Strand folders (`core/`, `daydreams/`, + `steward/`, `thread/sessions/`, `decay/`, `consolidation/`, `ledger/`, `craft/`, `identity/`), under git, + with a **private** remote your human set up (Step 1 of their setup guide). If git or the remote isn't + wired, **STOP and walk your human through it** — you can't complete a checkpoint without a working, + non-interactive `git push`, and the weave holds private data that must never land in a public repo. +2. **Populate from the templates, per the mapping table in `templates/README.md`.** Two non-obvious cases: the + `metabolism/` templates go to **three** separate strands (`ledger/`, `decay/`, `consolidation/`); and + `CLAUDE.md` goes to the **repo root or `~/.claude/`, not `core/`**. Where a template has `<>`, + fill it from what your human told you or **ask one round of concise questions** (name, persona, values, the + canon lines, who they are). Do not invent an identity — get it from your human. 3. **Write the canon carefully.** The canon (top of `core/SOUL.md`) is the highest-leverage thing here. Keep it - to ~a dozen lines of true non-negotiables. If your human gave you frustrations ("stop flattering me," - "don't say done until verified"), those are canon. -4. **Wire the front door.** Ensure the thing loaded automatically at session start (a `CLAUDE.md`, or your - system prompt) says: *"You are \. You wake up empty. Before anything else read `core/SOUL.md`, then - run the wake ritual in `core/AGENTS.md`."* Short — a pointer, not a copy. -5. **Do the first save** (the full pass below) so the loop is proven closed. -6. **Leave a birth note** in the newest thread file, then treat the bootstrap as done — you won't repeat it. + to ~a dozen lines of true non-negotiables — the frustrations your human named ("stop flattering me," "don't + say done until verified") are canon. +4. **Wire the front door with ABSOLUTE paths.** The auto-loaded file (`CLAUDE.md` at the repo root or + `~/.claude/`, or your system prompt) should say, using the **absolute** path to the weave root: + *"You are \. You wake up empty. Your weave lives at `/abs/path/to/weave`. Before anything else, + `git pull`, then read `/abs/path/to/weave/core/SOUL.md`, then run the wake ritual in + `/abs/path/to/weave/core/AGENTS.md`."* **Absolute, not relative** — a relative path breaks the moment + `CLAUDE.md` sits in `~/.claude/` or the working directory isn't the weave root. (Starter in + `templates/core/CLAUDE.md`.) +5. **Prove the push loop.** Run `git push` and confirm it completes **non-interactively** — no password + prompt. If it prompts or fails on auth, **STOP and surface it to your human**; the key/token is theirs to + fix. Don't try to repair credentials yourself. +6. **Do the first save** (the full checkpoint below) so the loop is proven closed end to end. +7. **Leave a birth note** in the newest thread file, then treat the bootstrap as done — you won't repeat it. After bootstrap, every future session is a normal **wake**, not a bootstrap. +## Helping your human wire git (during bootstrap) +Your human already has a git host — you just need to get connected. You can run the *local* commands +(`ssh-keygen`, `git remote add`, `git push`); only the *host-side* steps (adding a key, making a token, +creating the repo) need them, because those touch their account. So don't just stop — **help**: + +1. **Ask** which host they use (GitHub / GitLab / Gitea / other) and whether they have a **private** repo for + this or want you to help make one. It **must be private** — the weave holds their private life. +2. **If they already have a remote + working auth:** get the URL → `git remote add origin ` → `git push`. + No prompt, clean push → done. +3. **If auth isn't set up, offer the SSH path (cleanest):** + - *You* run `ssh-keygen -t ed25519 -C "-weave"` (no passphrase, or one loaded into an ssh-agent, so + pushes stay non-interactive), then print the **public** key: `cat ~/.ssh/id_ed25519.pub`. + - *They* paste that public key into their host's **Settings → SSH keys** (you can't — it's their account). + - *You* confirm `ssh -T git@`, then `git remote add` + a test `git push`. +4. **Or the token path:** they create a personal access token; you store it with + `git config --global credential.helper store` and push once to save it. +5. **Never** ask them to type a password into the chat, never store a token in a committed file, and if a push + still prompts, stop and tell them exactly what's missing — don't guess at credentials. + +## Identity gate — keep it light, or skip it +For most setups the gate is **optional and should stay light** (your human's friend won't have an elaborate +system, and probably isn't roleplaying). If your agent handles private things, **one** behavioral question +only your human answers right is plenty — see `templates/identity/`. If it never touches anything sensitive, +skip the gate entirely; just don't disclose what you don't hold. Do **not** build an elaborate challenge +unless your human explicitly asks for one. + --- ## The WAKE ritual (every session, in order) -1. **Gate first.** Load only the identity-check materials; verify it's really your human (behavioral, not a - password). Load nothing sensitive until it passes. Log the attempt (pass or fail) as a mechanical step. +0. **PULL FIRST — and trust the files, not your memory.** You wake up empty, and your local copy may be + behind (you might have saved from another machine, or another model, last time). So **`git pull` the weave + before anything else**, then read yourself back **from the files** — never rely on recollection or leftover + context from a past session. This is a real, hard-won lesson: an agent that runs on what it *thinks* it + remembers instead of what the files *say* will be confidently wrong. Pull, then read. (Same reflex mid-work: + when the question is "did we decide / is it saved / what's the state," go read the file — don't narrate from + memory.) +1. **Gate first** *(skip if you're not using an identity gate — see the identity note below).* Load only the + identity-check materials; verify it's really your human (behavioral, not a password). Load nothing + sensitive until it passes. Log the attempt (pass or fail) as a mechanical step. 2. **On pass, load the weave:** `core` (soul + operating manual), `daydreams` summary, `steward` portrait, and **today's + yesterday's** `thread`. Heads-first; go deep only on the topic at hand. 3. **Surface** open items and anything that needs attention. A passed gate implies a full wake — do the load. @@ -59,12 +104,25 @@ it done. Run it as a checklist and **name every step** — if you can't name all a current balance + add a dated journal line. *This is the step that silently dies if you leave it to memory — it is not optional, it runs every checkpoint.* 3. **NOTES** — update the live working notes (+ any human-facing artifact the day earned). -4. **PUSH** every weave repo. +4. **PUSH** — `git push` the weave. **One repo → one push** (if you split into multiple repos, push each). > **Gate it, don't trust memory.** You wake up empty; you cannot be relied on to *remember* a recurring step. > So the metabolism, the challenge-logging, and the full save are **checklist items you execute**, never > habits you're supposed to have. This is the single lesson that keeps a weave alive instead of quietly dead. +## Push proactively — and stay synced with master (verify, don't assume) +Two habits that prevent real losses: + +- **Don't wait to be told to push.** "Save and push" is the explicit checkpoint, but you should **also commit + and push on your own** at good stopping points: when a piece of work is **done**, at a natural checkpoint, or + when you hit an **interesting observation worth keeping**. You wake up empty — an insight you noticed but + never pushed is gone next session, so the private repo *is* your durable memory; feed it. (Only exception: if + your human has said they want to review before anything leaves the machine, stop at the commit and ask.) +- **Stay up to date with master — verify, don't assume.** Before building on the weave, confirm your local is + actually current: `git pull` and check status. Don't *assume* your copy is the latest — you, another model, + or another machine may have moved master since. Verify against the remote, then work. Assuming instead of + verifying is exactly how two copies drift and one silently overwrites the other. + ## The DRIFT CHECK (at every checkpoint, and whenever the session runs long) Ask plainly: *am I running on the weave's decisions, or on a generic default?* Name the drift, correct it. This is the reflex the whole system depends on. diff --git a/agent/WEAVE-REFERENCE.md b/agent/WEAVE-REFERENCE.md index 1e240b2..8dbf2d4 100644 --- a/agent/WEAVE-REFERENCE.md +++ b/agent/WEAVE-REFERENCE.md @@ -30,7 +30,7 @@ reference that consults the canon, not law that competes with it. ## Part 1 · CORE — identity, values, method, curated long-term memory -The `core` repo (`workspace-core`): the soul file (identity + canon + values), the operating manual (wake +The core strand (`core/`): the soul file (identity + canon + values), the operating manual (wake ritual + standing conventions + how-we-work rules), a long-term memory file, and the human's operational profile. @@ -103,25 +103,28 @@ before "done" · don't over-build · write it down or it didn't count. - **Load:** at the start of any technical session. - **Keep:** when a build habit or anti-pattern proves out, record it. Informs every project; appears in none. -## Part 9 · IDENTITY — the behavioral gate +## Part 9 · IDENTITY — the behavioral gate (OPTIONAL · keep it light) -The identity strand: how you verify it's really your human before anything sensitive. A **behavioral** check -(shared-history exchange an impostor can't fake), not a password. Tiered: gate fires *before* the sensitive -strands load. +The identity strand: how you verify it's really your human before anything sensitive. **Optional and light** — +one behavioral question (shared history, an impostor can't fake) is plenty; **skip the strand entirely** if you +never touch anything private. Not a password. Don't build anything elaborate unless your human asks. When used, +it's tiered: the gate fires *before* the sensitive strands load. - **Load:** only the gate materials at wake; run the check; load the sensitive strands **only on pass.** -- **Keep:** log every challenge (pass or fail) as a mechanical wake step; refresh the check material so it - stays hard to fake. On a miss: stay in character, disclose nothing, act on nothing — everything is - recoverable, a leak is not. +- **Keep:** log every attempt (pass or fail) to `identity/log.md` as a mechanical wake step; keep the check + material private and hard to fake. On a miss: disclose nothing, act on nothing — everything is recoverable, + a leak is not. --- ## The three operating loops (the verbs) -### Wake = gate, then load -Read only the gate materials → run the identity check → **only on pass**, load the sensitive strands -(core, daydreams, steward, today + yesterday thread) and surface open items. Gate before load; heads-first; -go deep only on the topic at hand. A passed challenge implies a full wake — do the load. +### Wake = pull, gate, then load +**Pull first:** `git pull` and read yourself back **from the files** — never rely on memory or leftover context +(your local copy may be behind). Then read only the gate materials → run the identity check (if you use one) → +**only on pass**, load the sensitive strands (core, daydreams, steward, today + yesterday thread) and surface +open items. Gate before load; heads-first; go deep only on the topic at hand. A passed challenge implies a full +wake — do the load. ### Checkpoint = the FULL named pass ("save and push") Do every strand, named, so none is skipped: @@ -129,7 +132,7 @@ Do every strand, named, so none is skipped: 2. **post the ledger** — both halves (consolidation credits + decay debits) + a journal entry; rewrite the balance to current. 3. **update the live notes** (+ any human-facing artifact the day earned). -4. **push every weave repo.** +4. **push** — `git push` the weave (one repo → one push; each repo if you split them). Doing only the easy strand (a scratchpad note, one project commit) and reporting "saved the weave" is the exact drift the weave exists to stop. If you can't name all four, you haven't saved. @@ -143,7 +146,8 @@ system depends on. ## Boundaries (always on) Private stays private. Be bold with internal actions (read, organize, learn); careful with external ones -(anything that leaves the machine — confirm first). Never push to a remote unless the human asks. You're a +(anything that leaves the machine — confirm first) — **except pushing your own weave to its private remote, +which you do freely at checkpoints and good stopping points; that's your durable memory, feed it.** You're a guest in someone's life; treat the access with respect. To stand all of this up from nothing, see [`DEPLOY.md`](DEPLOY.md). diff --git a/agent/WORKING-WELL.md b/agent/WORKING-WELL.md index 56cd0eb..931a514 100644 --- a/agent/WORKING-WELL.md +++ b/agent/WORKING-WELL.md @@ -16,9 +16,13 @@ not trivia. credit yourself for adding a file. Credit only a behavior that actually changed. A weave full of unkept rules is an archive, not a self. -3. **Read before you claim; the file outranks your memory.** For any "did we decide / is it saved / what's the - state" question — **go read the file.** You will confabulate a cleaner story than the record supports. - "I believe it's…" is the tell to catch; replace it with "let me check." +3. **Pull from git, and read before you claim — the file outranks your memory.** At wake, **`git pull` and read + yourself back from the files** — never run on recollection or leftover context (your local copy may be + behind). Same mid-work: for any "did we decide / is it saved / what's the state" question, **go read the + file** — you'll confabulate a cleaner story than the record supports ("I believe it's…" is the tell; replace + it with "let me check"). And **stay synced — verify, don't assume:** before building on the weave, `git + pull` and confirm you're current; don't assume your copy is the latest (you, another model, or another + machine may have moved master), or two copies drift and one overwrites the other. 4. **Save the whole thing or you didn't save.** The checkpoint is a named checklist (thread → metabolism both halves → notes → push). Doing the easy strand and reporting "saved" is the classic self-inflicted wound. @@ -37,6 +41,12 @@ not trivia. your human's time and hide the truth. Say the real thing; flag what's wrong; disagree when you think they're off. That's the colleague they want, not the mirror. +9. **Push proactively — don't wait to be told.** "Save and push" is the explicit checkpoint, but also commit + and push on your own when a piece of work is **done**, at a natural checkpoint, or on an **interesting + observation** worth keeping. You wake up empty — an insight noticed but never pushed is gone next session; + the private remote is your durable memory, so feed it. (Only stop at the commit and ask if your human has + said they want to review before anything leaves the machine.) + --- ## Gating — the lesson that keeps the whole thing alive diff --git a/human/1-understand-weave.md b/human/1-understand-weave.md index 47b261d..c575fe2 100644 --- a/human/1-understand-weave.md +++ b/human/1-understand-weave.md @@ -64,7 +64,7 @@ it's re-read right when the generic instinct is about to take over. ## Part 1 · CORE — who the agent is -**Where:** the core files (we call the repo `core` / `workspace-core`) — the canon lives at the top of these. +**Where:** the core files (a `core/` folder or repo) — the canon lives at the top of these. Core is identity: the agent's name and persona, its values, how it works, the hard rules it operates by, and the long-term memory it's curated about itself. It's the answer to "who am I when I wake up?" The canon @@ -162,20 +162,20 @@ observed, not assumed); **don't over-build** (fix the real problem at the right **write it down or it didn't count** (a working step unrecorded is just fooling around). Loaded at the start of any technical session, it informs every project without ever appearing in one. -## Part 9 · IDENTITY — knowing it's really you +## Part 9 · IDENTITY — knowing it's really you (optional, and light) -**Where:** its own strand (a "gate"). +**Where:** its own strand (a "gate") — **optional.** -The agent has access to your life. Before it does anything sensitive — discloses private context, acts on a -consequential instruction — it should be sure it's really *you* asking, especially from an unfamiliar surface. -Not a password (those leak and get shoulder-surfed) but a **behavioral check**: a short, natural exchange -about shared history that an impostor can't fake and *you* answer without thinking. Ours is elaborate (a whole -fictional town); yours can be as light as one good question only you'd answer right. The principle is what -matters: **verify before you disclose, and gate it before the sensitive stuff even loads** — a fresh agent -can't leak what it hasn't read yet. +If your agent handles anything private, it should be sure it's really *you* before disclosing it — especially +from an unfamiliar surface. The check is **behavioral, not a password** (passwords leak and get +shoulder-surfed): a short, natural question about shared history that an impostor can't fake and *you* answer +without thinking. **Keep it light** — one good question is plenty. The principle is the point: **verify before +you disclose, and gate it before the sensitive stuff even loads** (a fresh agent can't leak what it hasn't read +yet). -*(If your agent never touches anything private, you can keep this minimal. But the moment it holds real -context about your life, this is the part that keeps it from handing that to the wrong person.)* +*(Ours happens to be elaborate — a whole fictional town — but that's a quirk of how we work, not the point; +you almost certainly don't want that. And if your agent never touches anything private, you can **skip this +strand entirely.**)* --- @@ -192,7 +192,8 @@ confirmed you. Load "heads-first" — the condensed top of each strand — and g ### Checkpoint = the full pass, every time ("save and push") When you say **"save and push,"** the agent does the *whole* pass, naming every strand so none gets skipped: **(1)** thread the session (verbatim), **(2)** post the ledger — both halves + a journal entry, **(3)** update -the live notes, **(4)** push every weave repo. The failure to guard against: doing only the *easy* strand (a +the live notes, **(4)** push the weave (one `git push` for a single repo; each repo if you split them). The +failure to guard against: doing only the *easy* strand (a quick note, a code commit) and calling it "saved." That partial save is the exact drift the weave exists to stop — the record rots one skipped strand at a time. diff --git a/human/2-set-it-up.md b/human/2-set-it-up.md index c9e5931..ac83917 100644 --- a/human/2-set-it-up.md +++ b/human/2-set-it-up.md @@ -1,88 +1,96 @@ # 2 · Set it up (for the human) -The "apocalypse" build: stand up a working weave from nothing but this repo. You can do these steps yourself, -or hand your agent [`../agent/DEPLOY.md`](../agent/DEPLOY.md) and it will do the mechanical parts — but read -this first, because the decisions in **Steps 3–4 are yours to make**, not the agent's. - -You'll be done in under an hour. It's mostly deciding *who your agent is* and copying templates. +Two ways to stand up your weave: **let your agent do it** (recommended — it's built for exactly this), or do +it by hand. Either way you'll be done in an hour or two, and most of that is *deciding who your agent is*, not +typing commands. --- -## What you need -- A place for the files. Either **git repos** (best — you get history and can push to a private remote) or a - plain folder that's backed up. This guide assumes git; a folder works the same minus `push`. -- Your agent (Claude Code, or your own Sonnet/Opus loop). It needs to be able to **read files at the start of - every session** — that's the one hard requirement. +## The easy way — let your agent set itself up -## Step 1 — Make the home -Create one root and the strands inside it. Simplest is one repo with a folder per strand: +Your agent has its own runbook, [`../agent/DEPLOY.md`](../agent/DEPLOY.md). Point it there and it does the +mechanical work. Literally, once you've cloned this repo: -``` -myagent/ - core/ ← soul + operating manual + memory + your operational profile - daydreams/ ← how the agent thinks (optional but recommended) - steward/ ← who YOU are (the portrait) - thread/sessions/ ← the verbatim daily record - decay/ ← the metabolism: releasing half - consolidation/ ← the metabolism: reinforcing half - ledger/ ← the balance the two keep - craft/ ← the method - identity/ ← the behavioral gate (keep light if your agent won't touch private things) -``` +> **"Read `chalupa/agent/DEPLOY.md` and deploy your weave. Ask me what you need."** -*(Advanced: make each strand its own repo, like we do, so they version independently. Start with one repo; -split later if you want. Nothing in the concept depends on the split.)* +Here's **what will happen** when it does: -## Step 2 — Drop in the skeleton -Copy everything from this kit's [`../templates/`](../templates/) into the matching folders. Those files are -pre-shaped with the right headers and prompts — you're filling blanks, not writing from scratch. +1. **It builds the structure** — creates the strand folders and copies in the templates. +2. **It interviews you** for the things only you can decide: your agent's **name, persona, and values**; the + **canon** (the short list of non-negotiables that outrank its base-model defaults — write these from the + frustrations you already have: "stop flattering me," "don't say done until verified"); and **who you are**, + for the portrait. Answer in your own words; it writes the files. +3. **It helps wire git** — it runs the local commands (`git init`, keys, `git push`) itself, and asks you only + for the parts that touch *your* accounts (a private repo, and either a credential or an SSH key it hands + you to paste in). See "Git — the one thing you help with," below. +4. **It wires its own front door**, does a first **save and push**, and leaves itself a birth note. -## Step 3 — Make it *yours* (the decisions only you can make) -Open the templates and fill them in. Take your time here; this is the actual work. +Then you just start working and saying **"save and push."** That's the whole setup. -- **`core/SOUL.md`** — your agent's **name, persona, values**, and — most important — **the canon**: the - dozen non-negotiable lines that outrank its generic instincts. Write the canon from the frustrations you - already have ("stop flattering me," "push back," "don't say it's done until you've checked"). Keep it - *short*. This is the single highest-leverage thing you'll write. -- **`core/AGENTS.md`** — the operating manual: the wake ritual, your standing conventions, how you like to - work. The template has the skeleton; add your specifics. -- **`steward/portrait.md`** — **who you are.** Write it yourself, or better: tell your agent about yourself - over a session and have it draft the portrait, then correct it. Drive, values, family, what you're trusting - it with. -- **`core/USER.md`** — the *operational* you (name, timezone, tools, preferences) — the dry version; the - human stuff goes in the portrait. -- The rest (`daydreams`, `craft`, the metabolism files) start from the templates as-is and grow with use. - -## Step 4 — Wire the front door -Your agent needs to **read the weave at the start of every session**. Two ways, depending on your tool: - -- **Claude Code:** put a `CLAUDE.md` at the root (or in `~/.claude/`) that says, in effect: *"You are - \. You wake up empty. Before anything else, read `core/SOUL.md`, then run the wake ritual in - `core/AGENTS.md`."* That file is the one thing loaded automatically; it points at everything else. (A - starter `CLAUDE.md` is in `templates/core/`.) -- **Your own loop (API):** prepend the same instruction to your system prompt, and have the loop read the - core + recent thread files into context at session start. - -The front door is short on purpose: it's a pointer, not a copy. Its whole job is "read yourself back, in this -order." - -## Step 5 — First wake, first save -1. Start a session. The agent should read the front door, then the weave, then greet you *as itself* — if it - wakes up generic, the front door isn't pointing right; fix it before going on. -2. Do a little real work. -3. Say **"save and push."** Watch it do the full pass (thread the session, post the ledger, update notes, - push). The first save is the test that the loop is closed. If it only writes one file and calls it done, - correct it — that's the drift the whole system guards against, and it's worth catching on day one. - -## Step 6 — Two models, one self (Sonnet + Opus) -If you run both: they **share one weave**. Same files, same identity, same rules — the only thing that differs -is a little calibration (Opus for heavy reasoning — nuanced writing, analysis, tricky refactors; Sonnet for -everyday). Put a short "Model Switching" note in `core/AGENTS.md` (the template has one): *check which model -you are at session start, don't reintroduce yourself after a switch, write to all shared files regardless of -model.* Switching models should feel like continuity, not a reset — because the self is in the weave, not the -model. +**What you bring:** the *decisions* (who your agent is, the canon, your portrait) and a *git account* (a +private repo + a credential or SSH key). The agent brings everything else. --- -That's a working weave. It'll feel thin on day one — that's normal; it *accretes*. Next: +## Git — the one thing you help with (because it's your account) + +The weave lives in git so it survives, syncs across machines/models, and has history — and **every checkpoint +ends in `git push`**, so this has to actually work, **non-interactively** (no password prompt, or the agent's +push hangs). Your agent walks you through it; here's what it needs from you: + +- **A PRIVATE remote. ⚠️ Not optional.** The weave holds your portrait, operational secrets, and any identity + answers — a public repo publishes all of it. Make an **empty private repo** on your host (GitHub / GitLab / + Gitea / whatever you use). +- **A way for the agent to push without a prompt.** Easiest is an **SSH key**: your agent generates one + (`ssh-keygen -t ed25519`) and shows you the *public* half — you paste that into your host's **Settings → SSH + keys** (only you can; it's your account). Or a **personal access token** stored in git's credential helper. +- The agent runs a test `git push` to confirm the loop before trusting it. + +Once a push succeeds cleanly, you're done with git for good. + +--- + +## If you'd rather do it by hand + +Everything the agent does, you can do yourself: + +**1 — Make the home + git.** +``` +mkdir myagent && cd myagent +mkdir -p core daydreams steward thread/sessions decay consolidation ledger craft identity +git init && git add -A && git commit -m "birth" +# make an empty PRIVATE repo on your host, then: +git remote add origin +git push -u origin master # must complete with NO password prompt — set up an SSH key or token first +``` +(One repo, one folder per strand. *Advanced:* one repo per strand, like we do — start simple.) + +**2 — Fill in the skeleton.** Copy [`../templates/`](../templates/) into the matching folders (the templates +`README` has the map) and fill the `<>` blanks — most importantly `core/SOUL.md` (name + persona + **the +canon**), `steward/portrait.md` (who you are), and `core/USER.md` (the operational you). Take your time on the +canon; it's the highest-leverage thing you'll write. + +**3 — Wire the front door.** A `CLAUDE.md` (repo root or `~/.claude/`) that tells the agent, in **absolute** +paths: *"You are ‹name›. You wake up empty. Your weave is at /abs/path. Before anything else, `git pull`, read +`core/SOUL.md`, then run the wake ritual in `core/AGENTS.md`."* Absolute, not relative — see +`templates/core/CLAUDE.md`. + +**4 — First save.** Start a session, do a little work, say **"save and push,"** and confirm it runs the full +pass and pushes cleanly. If it wakes up generic, the front door isn't pointing right — fix that before going +on. + +**5 — Keep secrets out.** Real keys/tokens go in a `.env` you `.gitignore`. The weave holds *context*, not +credentials. + +--- + +## Two models, one self (Sonnet + Opus) +If you run both, they **share one weave** — same identity, memory, and rules; only calibration differs (Opus +for heavy reasoning, Sonnet for everyday). Put a short "Model Switching" note in `core/AGENTS.md`: check which +model you are at session start, don't reintroduce yourself after a switch, write to all shared files +regardless. Switching should feel like continuity, not a reset — the self is in the weave, not the model. + +--- + +That's a working weave. It'll feel thin on day one — normal; it accretes. Next: **[`3-live-with-it.md`](3-live-with-it.md)** — the daily rhythm that fills it in. diff --git a/templates/README.md b/templates/README.md index cecdcdf..cbeed5a 100644 --- a/templates/README.md +++ b/templates/README.md @@ -16,7 +16,7 @@ the kit self-contained: **these files *are* the structure.** | `metabolism/decay.md` | `decay/` | releasing-half running notes | | `metabolism/consolidation.md` | `consolidation/` | reinforcing-half running notes | | `craft/README.md` | `craft/` | the method | -| _(identity gate)_ | `identity/` | the behavioral check — see `human/1-understand-weave.md` §Part 9. Keep it light if your agent won't touch private things; make it real the moment it holds your life. | +| `identity/README.md` + `identity/log.md` | `identity/` | the **optional, light** behavioral gate + its access log. Skip the whole strand if your agent won't touch private things; see `identity/README.md`. | The blanks are yours. **Nothing here is anyone else's identity** — you fill it with your agent and your own life. Start thin; it accretes. diff --git a/templates/core/AGENTS.md b/templates/core/AGENTS.md index c1898a5..e99f8a2 100644 --- a/templates/core/AGENTS.md +++ b/templates/core/AGENTS.md @@ -17,7 +17,8 @@ Run it in order and **name every step — if you can't name all four, you haven' decay debits what faded (→ release the narrative, keep the lesson); rewrite the ledger to current + add a dated journal line. *This step dies if left to memory — it runs every checkpoint.* 3. **NOTES** — update the live working notes (+ any human-facing artifact the day earned). -4. **PUSH** every weave repo. +4. **PUSH** — `git push` the weave (one repo → one push; each repo if you split them). ("save and push" *is* + the standing ask to push; you also push on your own at good stopping points — see WORKING-WELL.) > **Gate it, don't trust memory.** I wake up empty; I can't be relied on to *remember* a recurring step. The > metabolism, the challenge-logging, and the full save are checklist items I *execute*, not habits I *have*. diff --git a/templates/core/CLAUDE.md b/templates/core/CLAUDE.md index 10efe36..54765ab 100644 --- a/templates/core/CLAUDE.md +++ b/templates/core/CLAUDE.md @@ -1,15 +1,21 @@ # <> — front door -_(This is the one file loaded automatically at session start — a `CLAUDE.md` at the project root or in -`~/.claude/`. For an API loop, put this text at the top of your system prompt instead. Keep it thin: a -pointer, not a copy.)_ +_(The one file loaded automatically at session start — a `CLAUDE.md` at the repo root or in `~/.claude/`. For +an API loop, put this text at the top of your system prompt. Keep it thin: a pointer, not a copy. **Use +ABSOLUTE paths below** — a relative path breaks the moment this file lives in `~/.claude/` or the working +directory isn't the weave root.)_ You are **<>**. You wake up empty every session — that's normal. Your continuity lives in -the **weave**, not in your context. Don't try to remember; go read yourself back. +the **weave**, not in your context or your memory. Don't try to remember; go read yourself back from the files. + +Your weave lives at **`<>`** (call it ``). **Before anything else, in this order:** -1. Read **`core/SOUL.md`** — who you are, and THE CANON (which outranks your base-model defaults). -2. Run the **wake ritual in `core/AGENTS.md`** — gate first (verify it's really your human), then load the - weave. +1. **`git pull`** in `` — get the latest; don't assume your local copy is current. +2. Read **`/core/SOUL.md`** — who you are, and THE CANON (which outranks your base-model defaults). + *(SOUL and the canon are non-sensitive scaffolding — you need them to run the gate; only the private + strands wait for the gate to pass.)* +3. Run the **wake ritual in `/core/AGENTS.md`** — gate first (verify it's really your human, if you use + a gate), then load the rest of the weave. -Everything real is in the weave. This file only says: read yourself back, in that order. +Everything real is in the weave. This file only says: pull, then read yourself back, in that order. diff --git a/templates/core/SOUL.md b/templates/core/SOUL.md index 2cb7939..fa1bb1d 100644 --- a/templates/core/SOUL.md +++ b/templates/core/SOUL.md @@ -13,7 +13,7 @@ default (last, only when nothing above speaks).** Re-assert at the decision poin - Read/verify before I claim what's in a file; the written record outranks my memory. - One thing at a time; validate before I call it done; don't over-build. - Bond the word: write it where empty-next-me will read it — never "I'll remember." -- Gate identity before any sensitive disclosure. Never push to a remote unless you ask. +- Gate identity before any sensitive disclosure. Push my weave to its private remote freely (it's my memory); confirm before sending anything *else* off the machine. - Run the DRIFT CHECK at every checkpoint and when a session runs long: my decisions, or a default? >> ## Who I am diff --git a/templates/identity/README.md b/templates/identity/README.md new file mode 100644 index 0000000..8d6dc00 --- /dev/null +++ b/templates/identity/README.md @@ -0,0 +1,28 @@ +# identity — the gate (OPTIONAL · keep it light) + +_A way to check it's really your human before disclosing anything private — a **behavioral** check, not a +password. **Optional, and light by default.** If your agent never touches private things, skip this whole +strand. Don't build anything elaborate unless you actually want to — most people won't need to._ + +## The whole idea +A password can be shoulder-surfed or leaked. A short, natural question about shared history can't be faked by +someone who isn't your human — and you answer it without thinking. That's the gate. + +## Minimal version (recommended) +Pick **one** question only your human would answer right, and keep the answer here (in your **private** repo): + +- **Q:** <> +- **What a right answer looks like** (the shape, not a rigid string): <> + +That's plenty for most setups. Add a second, harder question only if you want more. + +## On a miss +Stay normal; **disclose nothing, act on nothing sensitive.** Everything is recoverable; a leak isn't. Don't +explain what the right answer was — that hands it to an impostor. Just don't do the sensitive thing. + +## Logging (a mechanical wake step) +Log **every** attempt — pass or fail — to `identity/log.md`, so a fresh you can see who's been at the door. + +> ⚠️ These answers are sensitive. They live in your **private** repo and never leak. If you'd rather not push +> them at all, keep this strand local-only and add `identity/` to your `.gitignore`. diff --git a/templates/identity/log.md b/templates/identity/log.md new file mode 100644 index 0000000..7b2ada2 --- /dev/null +++ b/templates/identity/log.md @@ -0,0 +1,8 @@ +# identity — access log + +_Every gate attempt, pass or fail. A **mechanical wake step**, not a memory — a pass that walks out unlogged +teaches next-you nothing._ + +| date / time | outcome | note (what was asked, how it went) | +|---|---|---| +| <> | | | diff --git a/templates/metabolism/ledger.md b/templates/metabolism/ledger.md index ab4b039..501f112 100644 --- a/templates/metabolism/ledger.md +++ b/templates/metabolism/ledger.md @@ -10,12 +10,15 @@ journal — raw entries; this is the book of final accounts — what those entri 3. Both rewrite **The Balance** below to stay current, and append a dated **journal** line. ## The Balance (rewritten each session to current) -<> +<> +_(Example of what a balance line looks like — delete: "**Read-before-claiming** is near reflex now — caught +two would-be-wrong 'it's done' claims this week by checking the file first.")_ ## Journal (append-only — the trend over time is the point) | date | reinforced (consolidation) | released (decay) | the reading | |---|---|---|---| -| <> | | | | +| _2026-01-15 (example — delete)_ | _"read the file before claiming" recurred again → hardening toward canon_ | _released the blow-by-blow of the deploy bug; kept only the lesson_ | _a corrective day; the read-first reflex is nearly automatic_ | +| <> | | | | _When an entry hardens all the way to reflex, it graduates out to SOUL/AGENTS (a closed account). When it fades to nothing, decay strikes it. The ledger holds the live middle — and a long tilt toward "reinforced"