Skip to content

v0.8.0 — Agent onboarding launcher

Choose a tag to compare

@EfeAydinalp EfeAydinalp released this 06 Jul 22:24
· 34 commits to master since this release
c347e2d

vibe-council v0.8.0 — Agent onboarding launcher (vibe init-agent)

Ready for the v0.8.0 tag — not yet tagged. The version bump (backend/__init__.py,
pyproject.toml, uv.lock) and the dated CHANGELOG.md section are done
(chore: prepare v0.8.0 release); the repo now reports 0.8.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 agent onboarding launcher release, opening the v0.8.x "Solidify the core, local-first"
line. It adds a single onboarding entry point — vibe init-agent — that composes the existing
vibe project doctor / vibe guide machinery into a report + guarded write, plus a mandatory
localhost-only test guard. Everything is local-first, read-only-by-default, and append-only when
writing
: no preference behavior, no .council/profile.* store, no network/LAN/hosted surface, no
new dependency. Based on and crediting
karpathy/llm-council.

No commercial-clearance claim. License/provenance remains an unresolved "Question 0"
commercial gate; no LICENSE is added.

How v0.8.x was planned (council-backed + Fable architecture)

  • Council-backed planning (docs-only): v0.8.x-council-debate.md
    weighed candidate directions and the council (two vibe review --preset balanced passes)
    rejected "preference behavior as the headline" as premature;
    v0.8.x-phase-brief.md captured the resolved theme; and
    v0.8.x-fable-input.md was the curated handoff.
  • Fable architecture plan (docs-only, version-line — not patch-by-patch, architecture-only, no
    implementation): v0.8.x-architecture-plan.md preserved the
    council's "Solidify the core, local-first" pivot and resolved the open questions into a 9-PR
    sequence. v0.8.0 is the first three implementation PRs below.

What this release adds

vibe init-agent report mode (PR 1)

  • A deterministic, read-only onboarding report: a vibe project doctor readiness summary,
    then per agent (claude/codex/fable) exactly what vibe guide … --write would do to the
    fixed files (would create / would append / already-present-would-skip), plus the recommended next
    commands (vibe project doctor, vibe guide …, vibe context export …).
  • States that vibe is the real CLI and /council is not (a future host-command idea only), that
    the profile/preferences are documentation/advice only, and that personalization may tighten
    but never loosen
    a safety/security/no-stage/trust rule.
  • Writes nothing, creates no .council/, runs no commands, makes no model/provider/network call.
    No path argument; operates only on the current working directory.

vibe init-agent --write guarded append mode (PR 2)

  • vibe init-agent --write --agent {claude|codex|fable}... [--role <role>] --yes appends the
    selected agents' guide sections to the fixed per-topic files — Claude → CLAUDE.md, Codex →
    AGENTS.md, Fable → FABLE.md — via the existing _guide_append machinery.
  • Append-only, marker-skip idempotent (re-runs byte-identical; existing content preserved; an
    already-present section is skipped, not duplicated); the appended section is byte-identical to
    vibe guide <agent> --role <role> --write (shared helper — no divergence; no guide subprocess).
  • Safety: --write requires --yes (a deterministic confirmation) and an explicit --agent
    (a bare --write never writes three files); no path/target argument (the fixed defaults are the
    whole write surface — no traversal/injection); a target that exists as a non-regular file fails
    cleanly; creates no .council/.

Localhost-only guard (PR 3)

  • A tests-only guardrail (tests/test_localhost_guard.py) that locks the local-first
    invariant — no production change (the Workbench panel already enforces it): the panel binds
    loopback only, non-local hosts (0.0.0.0, ::, representative LAN/external IPs, empty) are
    rejected, a runtime check confirms every observed socket.bind is loopback,
    host_header_is_local accepts only loopback Host headers, and a static "no second listener"
    scan asserts no module outside backend/workbench_panel.py constructs a listening socket/server.
  • No LAN/hosted mode, no host-header/state-token change.

Safety posture — unchanged from v0.7.1

  • No arbitrary shell, no auto-execution, no Workbench trust-boundary loosening, no command
    allowlist expansion. Approval stays separate from execution; the deterministic trust boundary
    remains authoritative.
  • No preference parsing/application, no .council/profile.* local store, no preference applier —
    personalization stays advisory/pointer-only and tighten-only.
  • No vector DB / database / hosted stack, no model/provider/network call from the new commands,
    no new dependency (the only uv.lock change is the vibe-council self-version line). Redaction
    lint stays 0 critical (30 warnings); context check and MCP health stay 21/21.

Explicit non-goals (deferred, not started in this release)

No v0.8.1 RELEASES.md / vault-polish work yet · no v0.8.2 preference schema/validator yet · no local
.council/profile.* store · no preference applier · no named profiles · no Workbench-UX changes · no
/council real command · no hosted / network / LAN / mobile mode. v0.8.0 is the launcher + localhost
guard only.

Release checklist (must be clean before tagging)

  • uv run python -m unittest discover -s tests -t . is green (849 tests).
  • uv run python -m backend.cli --version prints vibe-council 0.8.0.
  • vibe lint --redaction reports 0 critical (30 warnings, expected).
  • vibe decisions lint passes.
  • vibe project doctor reports READY.
  • vibe context check scores 21/21.
  • vibe mcp inspect --context --health scores 21/21.
  • uv sync produces no uv.lock diff beyond the intentional self-version sync in this PR.
  • No .council/ artifact (incl. .council/runtime/payloads/ and .council/profile.*)
    staged/committed; no root CLAUDE.md/AGENTS.md/FABLE.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.8.0 release) into master.
  • On the merged master, re-confirm: tests green, vibe --version reports vibe-council 0.8.0,
    redaction lint 0 critical (30 warnings), decisions lint passes, vibe project doctor READY,
    context check 21/21, MCP health 21/21, and uv sync shows no drift.
  • Verify git status --short and the merged diff carry no private/local artifacts
    (.council/, .council/profile.*, the two untracked private plan files, .env/.venv//data/,
    secrets, generated packs/exports, root CLAUDE.md/AGENTS.md/FABLE.md).
  • Create an annotated git tag: git tag -a v0.8.0 -m "vibe-council v0.8.0" on the merge
    commit, then git push origin v0.8.0.
  • Create the GitHub Release for v0.8.0 manually, using this document
    (docs/releases/v0.8.0.md) as the release-notes body.

Known limitations

  • vibe init-agent composes existing generators — it does not seed the vault, run a model, or
    initialize a project beyond appending guide blocks to the fixed files.
  • Intentionally local-only — the Workbench binds 127.0.0.1; agent intake is file/CLI only; the
    localhost guard is a code-drift tripwire, not a runtime sandbox.
  • Personalization is still advisory/documentation — no preference is read or applied yet.
  • No hosted/team/mobile/voice — deferred to later phases.

Next after v0.8.0

Cut the v0.8.0 tag/GitHub Release, then continue the v0.8.x line per
docs/fable/v0.8.x-architecture-plan.md: v0.8.1 (capped
RELEASES.md + a documented STATUS-trimming workflow) and v0.8.2 (the tighten-only preference
schema + a read-only validator in vibe project doctor, full review; no application). Preference
application, a .council/profile.* store, mobile/LAN/voice, and hosted/team stay deferred to v0.9.x
behind their own gated designs.