v0.7.0 — Safe personalization scaffold
vibe-council v0.7.0 — Safe personalization / project-profile scaffold
Ready for the v0.7.0 tag — not yet tagged. The version bump (
backend/__init__.py,
pyproject.toml,uv.lock) and the datedCHANGELOG.mdsection are done
(chore: prepare v0.7.0 release); the repo now reports0.7.0. The git tag and the GitHub
Release are still a separate, manual step — see §"Final release checklist" below and
docs/release-checklist.md.
The safe personalization / project-profile release. On top of the v0.6.x cross-project onboarding
arc, this bundles the v0.7 A–D personalization slice: a council-in-the-loop planning brief, a
public-safe project profile/preferences scaffold, and advisory pointers to that scaffold from
vibe project doctor, vibe context export, and vibe guide. Everything here is advisory,
read-only, and local, and tighten-only: personalization can never loosen a security/safety/
no-stage/trust rule. No model/provider/network call, no Workbench trust-boundary change, no
/council command (vibe is the real CLI), no new dependency. Based on and crediting
karpathy/llm-council.
No commercial-clearance claim. License/provenance remains an unresolved "Question 0"
commercial gate; noLICENSEis added.
What this release adds
v0.7 personalization / project-profile planning brief
docs/fable/v0.7-personalization-and-project-profile-plan.md
— the council-in-the-loop source brief for the phase: purpose, non-goals, the Markdown-first
memory model, the tighten-only principle (personalization may tighten but never loosen a
guardrail), the layered data model, the council-in-the-loop production workflow, an A–E PR breakdown,
open questions, and a copy-paste future-Fable architecture prompt.- A balanced council review was performed on the brief; its highest-value, in-scope refinements
were folded in (profile-never-sent-to-model, a concrete "tighten-only" definition, schema-stability
and public-safe open questions). The brief explicitly rules out a vector DB / database / hosted
stack for v0.7.
Project profile/preferences scaffold (PR A)
- Public-safe, committed, Markdown vault files under
docs/context/project/:
PROFILE.md(project identity/shape, local-first stance,
release state),PREFERENCES.md(review-preset policy,
Fable-usage policy, implementation style, no-stage policy, tighten-only principle), and
AGENT-ROLES.md(per-agent role expectations, the
MODEL: OPUS/SONNET CODE/MODEL: FABLE CODEheader convention, the council-in-the-loop workflow). - Each file carries a safe-to-commit boundary, a never-store list, and the tighten-only
principle. RootAGENTS.mdis deliberately not used as the canonical preference source (the
balanced review flagged a write-target/read-source corruption risk); role preferences live in the
vaultAGENT-ROLES.md. Public-safe committed files only — no secrets, raw outputs, runtime
payloads, or private data.
Project doctor awareness (PR B)
vibe project doctorgains an advisory "Personalization scaffold" section for
PROFILE.md/PREFERENCES.md/AGENT-ROLES.md: present →[ok ], missing →[warn]with a
next step (never a doctor failure). RootAGENTS.mdis not required; if present, an advisory
[warn]points to the vault convention. Dangerous staged files still fail as before, and
READY/NOT-READY still depends solely on the required vault/core docs + the dangerous-staged check.
Still read-only: writes no files, creates no.council/, makes no model/provider/network call.
Context-export profile pointers (PR C)
vibe context export --for {claude|codex|fable} [--role <role>]gains a "Project profile &
preferences" section with pointers to the three scaffold files — pointers only, no full
scaffold dump. It notes tighten-only, that rootAGENTS.mdis not the canonical preference source,
and recommendsvibe project doctor. The export never reads.council/profile.*, inlines no
distinctive file content, degrades gracefully if the scaffold is absent, stays deterministic (no
timestamp), and remains read-only (stdout by default;--output FILEstill never overwrites).
Guide profile pointers (PR D)
vibe guide {claude|codex|fable} [--role <role>] [--write [FILE]]output now carries the same
"Project profile & preferences" pointer section in base, role, and--writeguides. It is
static/deterministic — it parses/applies no preferences and reads no local/private
profile — and the existing--writeappend + marker-skip behavior is unchanged (no duplication on
re-run).
Safety posture — advisory, tighten-only, unchanged trust boundary
- Personalization is advisory and tighten-only — a project preference may make a rule stricter
but can never loosen a security / safety / no-stage / trust rule. Preferences are advice to
read, not commands to execute; the deterministic trust boundary ignores them entirely. - No model / provider / API / network call from any of the new/changed commands.
- No Workbench trust-boundary change — approval stays separate from execution, the deterministic
trust boundary remains authoritative, the auditor stays advisory, and there is no auto-execution.
The Workbench / importer / panel / executor are untouched. /councilis not a real command — it stays a documented future host-command idea;vibe
remains the real CLI.- No dependency changes (the only
uv.lockchange is thevibe-councilself-version line);
redaction lint remains 0 critical;context checkand MCP health remain 21/21.
Explicit non-goals (deferred, not started in this release)
No vector DB · no PostgreSQL / Redis / Docker / Next.js / LangGraph adoption · no hosted / SaaS · no
cloud sync · no secret storage · no local .council/profile.* implementation yet · no preference
parser / application engine yet · no redaction rule implementation yet · no root AGENTS.md
preference source · no project init / interactive launcher / vibe council start. The v0.7 surface is
a set of advisory pointers + a documented scaffold, not a personalization runtime.
Release checklist (must be clean before tagging)
-
uv run python -m unittest discover -s tests -t .is green (784 tests). -
uv run python -m backend.cli --versionprintsvibe-council 0.7.0. -
vibe lint --redactionreports 0 critical findings. -
vibe decisions lintpasses. -
vibe project doctorreports READY. -
vibe context checkscores 21/21. -
vibe mcp inspect --context --healthscores 21/21. -
uv syncproduces nouv.lockdiff beyond the intentional self-version sync in this PR. - No
.council/artifact (including.council/runtime/payloads/and.council/profile.*)
staged/committed; no rootAGENTS.md; no private/local plan file staged.
Final release checklist (manual steps, after this PR merges)
These are not automated by this PR — a maintainer performs them once the checklist above is clean
on master:
- Merge this PR (
chore: prepare v0.7.0 release) intomaster. - On the merged
master, re-confirm: tests green,vibe --versionreportsvibe-council 0.7.0,
redaction lint 0 critical, decisions lint passes,vibe project doctorREADY,context check
21/21, MCP health 21/21, anduv syncshows no drift. - Verify
git status --shortand the merged diff carry no private/local artifacts
(.council/,.council/profile.*, the two untracked private plan files,.env/.venv//data/,
secrets, generated packs/exports, rootAGENTS.md). - Create an annotated git tag:
git tag -a v0.7.0 -m "vibe-council v0.7.0"on the merge
commit, thengit push origin v0.7.0. - Create the GitHub Release for
v0.7.0manually, using this document
(docs/releases/v0.7.0.md) as the release-notes body.
Known limitations
- Personalization is advisory/documentation —
vibe project doctor/context export/guide
only point to the scaffold; nothing reads, parses, or enforces the profile/preferences yet. - The scaffold is curated, committed Markdown — not a database, not an Obsidian dependency, and
there is no local.council/profile.*store yet. - Intentionally local-only — the Workbench binds
127.0.0.1; agent intake is file/CLI only. - No hosted/team/mobile/voice yet — deferred to later phases.
Next after v0.7.0
Cut the v0.7.0 tag/GitHub Release, then scope the next slice per
docs/fable/v0.7-personalization-and-project-profile-plan.md
and docs/fable/04-roadmap.md: remaining personalization work (e.g. a local
.council/profile.* store and a preference reader/applier — all still tighten-only), with
mobile/LAN/voice (v0.8) and hosted/team (v0.9+) deferred behind the local core.