Thanks for your interest. This repo is public under Apache-2.0 and external contributions are welcome — but the project has strong opinions about what belongs in it. Read this before opening a PR.
The dedicated knowledge base, vault, and developer-tooling stack for Chio — Backbay's capability-based agent runtime. The full design lives in PLAN.md; the charter in decisions/ADR-0000-charter.md. Read both first.
There are five hard rules (lifted verbatim from AGENTS.md — they apply to humans and agents alike):
- Never write to Graphiti directly. The vault-sync daemon is the only writer to Graphiti. To add an episode, write
vault/episodes/<id>.md. - Never duplicate code into the vault. Source code lives in arc / platform / opus / etc. and is referenced by stable path + symbol.
kb-engine/cannot importchio_*. The boundary is enforced by CI (Phase 1+).- Vault frontmatter is a contract. Every note has
id,type,status. Bad frontmatter fails CI. - The retrieval eval is the regression floor. Overall A required across the 9 categories from PR #599. If
make kb-evaldrops below A, revert; don't patch.
If your change conflicts with one of these rules, the rule wins. File an ADR if you genuinely think the rule is wrong — that's how it changes.
High-value contributions:
- New playbooks (operational runbooks for Chio operations).
- Worked specs (one per Chio concept, mirroring
vault/spec/capability-revocation.md). - Phase 0 outcome-eval fixtures and runners (see Phase 0 milestone).
- Bug fixes to
ops/scripts/andchio-pack/. - Improvements to the four vault templates (
vault/_meta/templates/). - New Dataview queries under
vault/_meta/queries/.
Lower-value contributions (please discuss before opening a PR):
- New top-level vault folders. Requires an ADR per PLAN.md "Vault layout".
- New Obsidian community plugins added to
.obsidian/community-plugins.json. Plugin choices are an ADR-level decision. - Changes to the engine ↔ pack boundary. Always opens with an ADR.
- Adjustments to outcome-eval targets in
chio-pack/eval/outcomes.yml. These are decisions about what "the carve-out works" means and need an ADR.
- Search existing issues first.
- For Phase 0 work, check the Phase 0 milestone — most outcome-eval work is already tracked there.
- For new feature ideas, open a discussion-style issue (no template required) before writing code.
This repo enforces branch protection on main:
- Direct pushes to
mainare blocked for non-admins. - PRs require 1 approving review before merging.
- Force-pushes are blocked universally (including admins).
The flow:
- Fork the repo (external contributors) or create a branch (internal Backbay contributors with write access).
- Open an issue first for non-trivial changes. Briefly describe what you're proposing and why.
- Make your change on a feature branch. One coherent change per PR.
- Run
make kb-eval-outcomeslocally before pushing. The CI workflow (eval.yml) runs this on every PR; you'll get a comment with the eval-outcomes table. - Open the PR with a description that:
- Links the related issue.
- States which (if any) ADR the change requires or modifies.
- Reports the local
make kb-eval-outcomesresult.
- Address review feedback. Maintainers may ask for an ADR if the change touches load-bearing infrastructure — that's not pushback, it's the contract.
The engine ↔ pack and pack ↔ pack boundaries (hard rule #3 above) are enforced in CI by ops/ci/check-imports.py. To catch a violation before pushing, run make check-boundary locally. The same check is collected by pytest (chio-pack/tests/test_check_imports.py::test_repo_clean) so it also fires on every uv run pytest invocation. To wire it as a git pre-commit hook (no .pre-commit-config.yaml is shipped — plugin choices are an ADR call), drop the following one-liner into .git/hooks/pre-commit and chmod +x it:
#!/bin/sh
exec make check-boundaryThat's it. The hook is local-only (not versioned) and entirely opt-in.
CI runs make kb-eval-outcomes on every PR. Once Phase 0 is complete (per ADR-0002 acceptance), the gate becomes blocking. Until then, it's informational — but PRs that visibly degrade an outcome eval will be asked to either revert or document the trade-off in an ADR.
The gate has an explicit escape hatch (Phase 2A+) for cases where a regression is intentional:
kb-gate: ack
> reason: revocation-window guard intentionally relaxed; ADR-NNNN
kb-gate: ack requires a reason. Reasons without a linking ADR are rejected.
- Workflow questions ("how do I add an episode?"): start with
vault/playbooks/onboard-a-chio-developer.md. - Architecture questions ("why does X exist?"): the ADRs in
decisions/and the seed episodes invault/episodes/(post-migration) are the source of truth. - Spec questions ("what does the protocol require?"): the worked specs in
vault/spec/— start withcapability-revocation.md,receipt-commitment.md,guard-pipeline.md. - Anything else: open an issue.
- Markdown: match the conventions in existing files. Frontmatter must validate against
chio_pack/frontmatter.py(Phase 1+). - Python: target Python 3.11+. The two scripts under
ops/scripts/and thechio_pack/eval/runner.pyskeleton are the style guides. - TypeScript (Obsidian plugins): match
episode-promoter/src/main.ts. - Comments: lean toward "no comment" by default. Add a comment when the why is non-obvious — never to explain what well-named code already shows.
This project is licensed under Apache-2.0. By submitting a pull request, you agree your contribution is licensed under the same terms. We don't currently require a separate Contributor License Agreement (CLA) or DCO sign-off, but reserve the right to add one if the project grows.
- PLAN.md — the design
- AGENTS.md — rules for humans and agents alike
- README.md — quickstart
- decisions/ — ADRs (start at ADR-0000)
- vault/playbooks/onboard-a-chio-developer.md — Day-1 orientation
- vault/playbooks/adopt-chio-developer-base.md — for second-adopter teams (platform / opus / alpha)