Two open, local-first tools that turn your own notes into a personal development guide — using your own AI assistant, on your own machine.
Status: generator core and structurer both work end-to-end locally (deterministic planner + adapter + hard-fail policy; folder- and per-file classification with mandatory quarantine, freshness, sidecar overrides, pluggable media extractors — see Roadmap below). The two optional invitation steps are also built (see below).
You bring your own notes (Obsidian, Notion export, plain files, your own database) and your own AI assistant (Claude, ChatGPT, Cursor, a local model — not required to be any specific vendor). guide-kit is two programs:
structurer/— walks your notes and classifies them: stable facts about you, a stream of events, domain knowledge, and everything that doesn't fit a structured type. Secrets and payment data are quarantined automatically. Someone else's personal data (PII) can't be reliably auto-detected — there's no identity source to tell "your own" from "someone else's" — so it's quarantined only once you flag it explicitly; nothing quarantined is fed into generation without your say-so.generator/— assembles a personal development guide (today's or this week's focus) from the structured output, using your AI assistant to write the text. A deterministic planner decides what to focus on; the LLM only writes, it never decides.
Everything runs locally. Your notes never leave your machine except through an explicit, opt-in call to your own LLM provider (BYOK) when the generator writes your guide's text. Classification itself never calls an LLM today.
guide-kit never assigns you a stage or a qualification degree, and never guesses one when it doesn't have it — see HOW-IT-WORKS.md for exactly which inputs shape your guide, and what you're responsible for tracking yourself if you're not subscribed to the platform.
Most personal-knowledge tools either lock you into their own AI, or lock your data into their own cloud. guide-kit does neither: the code is open, the method is documented, and nothing about it requires an account anywhere.
guide-kit is the standalone form of the same guide engine that runs IWE (a personal work environment built on top of Claude Code) and the hosted Aisystant platform — one engine, three ways to get it: use guide-kit on its own, get it bundled inside the IWE template, or use it hosted on the platform. Connecting to either of those is entirely opt-in (see Roadmap) — guide-kit works fully standalone with no account anywhere.
guide-kit/
├── structurer/ # classifies your notes into portable types, quarantines what shouldn't be indexed
└── generator/ # assembles the guide from structured output + your AI assistant
cd generator
cp ../guide-kit.config.yaml.example ../guide-kit.config.yaml # edit: pick a backend, set a key or point at a local model
python3 adapter.py --profile profile.yaml --config ../guide-kit.config.yamlNo profile.yaml? That's a valid cold start — you get a generic first plan instead of an error. No curriculum_path configured? The planner picks a generic practice on its own and marks it llm-assisted in the decision log instead of failing or inventing a source. A required fact with no source at all — not even an LLM attempt — produces a diagnostic YAML explaining what's missing, never a silently empty or made-up guide.
demo/ ships a handful of public-domain sample cards — enough to see a
real, non-empty guide before you've set up any content of your own:
GUIDE_KIT_CURRICULUM_PATH=../demo/curriculum python3 adapter.py \
--profile profile.yaml --config ../guide-kit.config.yamlSet cards_path: ../demo/cards in your config to get full card content
(not just the element's name) for the two sample practices included there.
The demo cards live under their own .D1-style IDs in the worldview
catalog and under the same production element IDs elsewhere — see
demo/README.md for why.
cd structurer
python3 classify.py --base /path/to/your/notes--base is the only required flag. homes.yaml (folder-based type rules) and
extractors.yaml (media transcription/OCR) are both optional and tolerant of
absence. Output goes to .structurer/type-index.json inside your base by
default, alongside a quarantine-report.md listing everything held back and
why — secrets, payment data, or PII you flagged as someone else's (always
written, even when nothing was quarantined). The generator doesn't read
type-index.json yet — today it
consumes profile.yaml directly (see Usage above). Wiring the two together
is open work, not yet scheduled.
The generated guide can end with two short invitation blocks — pure text, no
account, no code in guide-kit that decides anything on your behalf. guide-kit
never tracks or drives your onboarding state: whichever platform you connect
to is always asked for its own next step, and its answer is shown to you
as-is. Turn both off with onboarding_ctas: false in your config.
- Connect to the hosted platform — a pointer telling your AI agent to
ask the platform's own MCP server what to do next. Defaults to the hosted
Aisystant platform's public connector (
https://mcp.aisystant.com/mcp); overrideplatform_connect_urlto point at a different platform, or set it to""to drop just the link line (the invitation block itself still renders, with a warning logged). To remove both invitation blocks entirely, useonboarding_ctas: falseinstead. - Adopt the full IWE template — a pointer to
setup.shfor users whose AI agent is Claude Code.
work_section adds a "what's active" block to the guide, read-only and
LLM-free — a fact from a file, or honestly absent, never invented:
off(default) — no section.generic— lists any file the structurer typed2.2intype-index.json: title + link, no ranking (there's no portable, tool-agnostic notion of "priority" to sort by).iwe— this template's own convention: today'scurrent/DayPlan {date}.mdtable, as already ordered by whoever opened the day. No DayPlan for today yet → an empty section, not a guess.
Enabling iwe for a real installation is a decision made live with the
person running it, not something a config default or a self-written file
turns on — see DP.SC.053.
Core logic is being extracted from a working internal prototype in stages:
- ✅ Generator core (deterministic planner + thin LLM adapter, no cloud dependencies)
- ✅ Structurer (folder-based + per-file classification, mandatory quarantine)
- ✅ Two optional invitation steps (connect to a hosted service; adopt the full toolkit) — entirely opt-in, never required
- ✅ Demo catalog (see "Try it without your own catalog" above) + optional work section (see "Work section" above)
- Portability tests: your data must be exportable in under an hour, runnable on a new machine in under a day, and speak only open protocols (no vendor-locked APIs)
MIT — see LICENSE.