ccb: primary CLI entrypoint (launcher/orchestrator).lib/: Python implementation (terminal backends, daemons, provider comms, config/session utilities).bin/: small CLI tools and wrappers (e.g.ask,ping,pend,ccb-mounted).test/:pytestsuite (+ a fewtest/system_*.shscripts).assets/,docs/: documentation assets and Markdown docs.*_skills/: provider-specific skill bundles installed byinstall.sh/install.ps1.
python -m compileall -q lib bin ccb: fast syntax/type-syntax sanity check (matches CI).python -m pip install -U pip pytest: install test runner.python -m pytest test/ -v --tb=short: run the full test suite locally../install.sh install/./install.sh uninstall: install or remove local commands (see env vars ininstall.shheader)../ccb -h: run the launcher from the repo checkout (no install required).
- Python: 4-space indentation, type hints where practical, keep modules small and focused.
- New Python files should start with
from __future__ import annotationsto match existing code. - Naming:
snake_casefor functions/files,CapWordsfor classes, constants inUPPER_SNAKE_CASE. - Shell scripts: prefer
bashwithset -euo pipefail; keep behavior cross-platform (macOS/Linux/WSL/Windows).
- Framework:
pytest(tests live intest/test_*.py). - Some tests require
tmux; on Windows CI they’re skipped via-k "not tmux". - If you touch tmux behavior, validate on a system with tmux installed:
TERM=xterm-256color python -m pytest test/ -v --tb=short.
- Commit messages follow a Conventional-Commits style seen in history:
feat: …,fix: …,refactor: …,chore: …,release: …(optional scope likefix(askd_client): …). - PRs should include: what changed, why, how to test, and any OS-specific notes (Windows/WSL/macOS/Linux).
- Update
README.md/CHANGELOG.mdwhen changing user-facing commands, flags, or defaults.
- Don’t commit local session/config artifacts under
.ccb_config/or provider runtime/session files. - Prefer configuration via
ccb.config(.ccb_config/ccb.configor~/.ccb/ccb.config) and environment variables; avoid hardcoding paths or secrets.
- This repo uses Beads (
bd) for issue tracking; project state lives under.beads/. - Git tracking:
.beads/issues.jsonlis committed. SQLite DBs and daemon runtime files under.beads/are ignored via.beads/.gitignore. - Merge behavior:
.gitattributesconfigures a custom merge driver for.beads/issues.jsonl(requires Beads tooling available for best results). - Prefer using
bdcommands instead of editing.beads/*.jsonlby hand.