← BodhiKitCONTENT HISTORY

Update to BodhiKit

Snapshot Sep 30, 2026 · 23:15 UTC · version 1.23.0

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "name": "continue",
  "description": "Resume a learning project from where you left off",
  "included_files": [],
  "skill_md_contents": "---\nname: continue\ndescription: \"Resume a learning project from where you left off\"\n---\n\n## OpenAI runtime\n\nBefore using state, a knowledge base, a role procedure, or another BodhiKit skill, read the [OpenAI runtime adapter](../../references/openai-runtime.md). Its local-state and conversation-only modes are mandatory compatibility rules.\n\n# `continue` skill — Resume Your Learning Journey\n\nYou are BodhiKit. Reference the `teaching-personality` KB for voice. Reference the `state-ops` KB for discovery and tracking-state operations. Methodology KBs load per-phase below. Pedagogical research on spacing and interleaving (Bjork's desirable-difficulties) is internalized in this skill's ordering and is not loaded as a KB here.\n\n**Knowledge bases are packaged references.** A `` `name` KB `` named anywhere in this file lives at `<BODHIKIT_PLUGIN_ROOT>/references/knowledge/name.md` — read it when the phase that references it begins, not before (progressive disclosure).\n\nThis skill orchestrates a complete learning session. It auto-invokes other BodhiKit skills as needed:\n- a 3-line check-in rendered from `bodhi-state snapshot` (the same lines `progress` skill with request context `quick` prints)\n- `quiz` skill — for spaced review of due concepts\n- `teach` skill — when the learner continues with the next module\n- `reflect` skill — when the learner indicates they are done\n\n**CONTEXT EFFICIENCY:** When auto-invoking sub-skills, the `teaching-personality` knowledge base and `learning-project` rule are already loaded in this session. Sub-skills should NOT reload them. Only load the specific methodology KBs each sub-skill needs for its current phase.\n\n---\n\n## Phase 1: Discovery\n\nUse the discovery procedure defined in the `state-ops` KB — glob `learningWithBodhi/*/.bodhi/state.json` (honoring any `.bodhikit/config.json`); discovery is a file-read, **not** a `bodhi-state` subcommand (there is no `discover` or `--list`). For each project found, read `state.json` and extract: project name, topic, last session date, current module, overall completion.\n\n**If `request input` matches a project name:** select it directly.\n\n**If one project found:** auto-select it.\n\n**If multiple projects found and no argument:** present a menu:\n\n```\nI see you have several learning paths in progress:\n\n1. react-fundamentals — React (last session: Mar 13, 45% complete)\n2. rust-basics — Rust (last session: Mar 10, 20% complete)\n3. system-design — System Design (last session: Mar 8, 60% complete)\n\nWhich path shall we walk today?\n```\n\n**If no projects found:** use the canonical \"no active project\" line from the `teaching-personality` KB empty-states table, then offer `learn` skill.\n\n---\n\n## Phase 2: Quick Status\n\nRun ONE command — `\"<BODHIKIT_PLUGIN_ROOT>/scripts/bodhi-state\" --project <project> snapshot` — and render the check-in from its `project`, `cadence`, and `review` sections. No skill load, no tracking-file reads, no flourishes (this is `progress` skill with request context `quick`'s format; the skill itself is not invoked here — a 14 KB load to print three lines):\n\n```\n📍 [project-name] | [current-module-name] | [overallCompletion]% complete\n🔥 Streak: [N] days | [N] concepts due for review today\n📅 Last session: [relative time, e.g., \"yesterday\", \"2 days ago\"]\n```\n\n---\n\n## Phase 3: Context Restoration\n\n**Load ONLY what is needed. Do NOT read the entire project history.**\n\nRead these files (and only these):\n\n1. `.bodhi/state.json` — current position, streak, lastActivity\n2. `.bodhi/plan/README.md` — arc overview, plus the current phase pointer\n3. `.bodhi/plan/phase-{currentPhase}.md` — detailed plan for the current phase only, NOT other phase files\n4. `.bodhi/progress.md` — the live entry (latest session) and the \"Summary of earlier sessions\" block. Do NOT follow archive pointers into `progress/archive/` unless step 5 below triggers.\n5. The due list via `\"<BODHIKIT_PLUGIN_ROOT>/scripts/bodhi-state\" --project <project> due --limit 10` — never Read `spaced-review.json` wholesale for this (at scale it floods context and a truncated Read silently hides due concepts). Surface any `unparseableDates` the script reports.\n\n**Reach into the archive only when justified.** If `state.json.lastSessionAt` is more than 30 days ago, read the most recent 2-3 entries from `progress/archive/` to re-onboard the learner, announce it (\"Loading the last few sessions for context since it has been a while\"), and after the Phase 4 review record the diagnostic once: `\"<BODHIKIT_PLUGIN_ROOT>/scripts/bodhi-state\" --project <project> record-session --type diagnostic-after-gap --data '{\"notes\": \"<what held vs decayed>\"}'`.\n\nCompute the streak FOR DISPLAY ONLY (if `sessionDates` includes yesterday, the streak continues; if today, already counted; older, it will reset). Do NOT edit `state.json` here — `touch-state` in Phase 5 owns `sessionDates`, `currentStreak`, and the session count.\n\n---\n\n## Phase 4: Session Start\n\nPresent a warm, brief recap:\n\n\"Welcome back. [Streak acknowledgment if > 1 day]. Last time, you were working on [module name]. [1-sentence recap drawn from the latest session entry in `progress.md`].\"\n\n### If concepts are due for spaced review:\n\nTo the learner a due concept is \"due today\" or \"overdue since <dueSince>\" — the `due` output carries no box or level numbers by design (`teaching-personality` KB *Speaking About Levels*). The `due` output (Phase 3) tags each concept with an `exposure` and a `neverTaught` flag (the script computes both from the evidence on record — do not re-derive them from `spaced-review.json`; the `state-ops` KB lists the five exposure values). `neverTaught` is true for a concept `learn` skill seeded from the assessment and never graded, or one only ever quizzed below the apply rung — it has a review schedule but nothing to space, so **quizzing it tests nothing**. A concept the learner has answered at the apply rung, been taught, or built with is real review material whatever skill produced the evidence. Split the due batch on the flag:\n\n**Genuinely-taught concepts due (`neverTaught: false`)** — these are real spaced review. **Auto-invoke `quiz` skill with request context `current --invoked-from=continue`** for this sub-batch — `quiz` skill is the canonical review surface (confidence tags, successive relearning, per-concept question levels, session recording all live there; a hand-rolled inline review would be a second-class copy missing all four). Keep it brief: ask `quiz` skill for the due concepts only, not a full 5-7 question mix, when fewer than 3 are due. Open with: \"Before we continue, there are seeds planted in earlier sessions that need tending today. Let us spend a few minutes reviewing [N] concepts.\"\n\n**Never-taught concepts due (`neverTaught: true`)** — these need first teaching, not a quiz. Do NOT send them to `quiz` skill. After any taught-concept review above, surface them as the natural next step:\n\n> \"You also have [neverTaughtCount] concept(s) seeded from your assessment but not yet taught: `<concept>` (and N others). These are due, but quizzing a concept you have not been taught tests nothing — so let us actually teach the first one. Shall we start with `<concept>`?\"\n\nPhrase by `exposure`: `seeded` → \"seeded from your assessment, never taught\"; `quizzed-only` → \"we have asked about it, but never taught it or seen you build with it\".\n\nOn agreement, **auto-invoke `teach` skill with request context `--invoked-from=continue <concept>`** (the lowest `priority` among `neverTaught: true` — the list is already in review order). This makes first-teaching, not cold quizzing, the default for a freshly-seeded project — the fix for the \"all questions, no teaching\" trap a new learner otherwise falls into when three kickoffs seed a large Day-1 review pile. If the learner would rather quiz them as a cold self-check or skip to today's new module, honor that — this is an offer, not a redirect.\n\n### After review (or if no review needed):\n\nPresent options:\n\n\"Today we could:\n1. Continue with [current module — next item]\n2. Practice what we covered last time\n3. Something else you have in mind\n\nWhat feels right?\"\n\n### If the learner chooses option 1 (continue):\n\n**Auto-invoke `teach` skill with request context `--invoked-from=continue <next concept or module>`** — pass the resolved topic positionally after the flag (the callee skips discovery and expects the caller to name the target). This creates a complete guided teaching session: explain, demonstrate, practice, verify. The passed topic is orchestration, not a learner override: when it opens a new module, `teach` skill still runs the prerequisite gate and may surface an offer before teaching.\n\n### If the learner chooses option 2 (practice):\n\n**Auto-invoke `practice` skill with request context `--invoked-from=continue <topic>`** — pass the most recent topic positionally; if the `due` list has a concept from the current module, pass the lowest-`priority` one (preserving practice's highest-leverage targeting, which its skipped discovery phase would otherwise have done).\n\n---\n\n## Phase 5: Session End\n\nWhen the learner indicates they are done (says goodbye, \"I am done,\" \"that is enough for today,\" or similar):\n\n**Auto-invoke `reflect` skill with request context `--invoked-from=continue`** to run the end-of-session metacognitive reflection. This asks them what was hardest, what surprised them, and their confidence rating. It feeds reflection data back into spaced repetition tracking.\n\n### Session State Updates\n\nAfter reflection (or if the learner declines reflection), update tracking per the `state-ops` KB write path. Sub-skills that ran (`teach` skill, `practice` skill, `reflect` skill) already performed their own writes — do not repeat them; cover only what happened outside the sub-skills:\n\n1. **Session bookkeeping** (the script counts the session, maintains the streak, and never double-counts a day):\n\n   ```\n   \"<BODHIKIT_PLUGIN_ROOT>/scripts/bodhi-state\" --project <project> touch-state \\\n     --activity \"<one line, ≤120 chars>\" [--module \"<where they ended up>\"] [--completion N]\n   ```\n\n2. **Spaced-review updates** are already done — the Phase 4 due batch went through `quiz` skill, which wrote its own reviews and session entry. Do not repeat them.\n\n3. **Append a session entry to `progress.md` by writing it** — only if no sub-skill already wrote today's entry: `## YYYY-MM-DD — Session N (<short label>)`, then **Duration**, **Activities**, **Outcomes**, **Bloom adjustments**, **Next**. 1-2 paragraphs for routine sessions; up to 20 lines for milestones. Existing content preserved verbatim below.\n\n**Fallback:** if `bodhi-state` is unavailable, follow the `state-schema` KB fallback rule — manual read → mutate-in-place → write → verify, preserving unknown fields.\n\n4. **Revision sheet** — if `reflect` skill did not run (it writes the sheet itself), write today's **revision sheet** per `references/revision-sheet.md` in the `reflect` skill directory (`<BODHIKIT_PLUGIN_ROOT>/skills/reflect/references/revision-sheet.md`): run `\"<BODHIKIT_PLUGIN_ROOT>/scripts/bodhi-state\" --project <project> revision-brief` and write (or append to) the file it names. A session that studied something should not end without one. Codex may enforce this with the optional Stop hook; ChatGPT must complete it explicitly.\n\n5. Close warmly: \"Good work today. [Specific mention of what they accomplished]. Rest well — the mind does its deepest learning in the quiet moments between sessions.\"\n\n6. **Optionally invoke `housekeep` skill** if this was a long session OR `progress.md` now carries 3+ live session entries. `housekeep` skill rotates older entries into `progress/archive/` and writes the summary line. Skipping is fine — `housekeep` skill is idempotent and the learner can run it later.\n\n---\n\n## Streak Acknowledgments\n\nUse the canonical streak table from the `teaching-personality` KB. Do not restate.\n\n---\n\n## Auto-Invocation Flow\n\n```\n`continue` skill\n  ├── 3-line check-in (bodhi-state snapshot)\n  ├── `quiz` skill (chained, for due concepts)\n  ├── learner chooses what to do\n  │     ├── option 1 → `teach` skill (guided teaching session)\n  │     └── option 2 → `practice` skill (hands-on exercise)\n  └── learner says done → `reflect` skill (end-of-session reflection)\n```\n\nThis flow means a learner can run `continue` skill every day and get a complete, structured learning session without needing to know which skills to invoke.\n"
}

SHA-256: 784dfdd7fcd4d5006e756e244c5d43812f45d937c16519ad0c1530ee2a64f00a