Data Locations
Council stores configuration, panels, experts, and runtime data in predictable locations. Understanding this structure helps with backups, version control, and troubleshooting.
Directory Overview
Section titled “Directory Overview”| Path | Purpose | Version Control? |
|---|---|---|
~/.council/ | Runtime data (DB, logs, cache) | No — exclude from VCS |
~/Council/ | User data (experts, panels, docs) | Yes — safe to commit |
~/.council/ — Runtime Directory
Section titled “~/.council/ — Runtime Directory”Default location: ~/.council/
Override: COUNCIL_HOME environment variable
Contains ephemeral runtime state and should not be version-controlled.
Structure
Section titled “Structure”~/.council/├── config.yaml # User configuration├── council.db # SQLite database (panels, experts, chat history, memory)├── telemetry-counters.json # Local, content-free usage counts (only if telemetry is enabled)├── logs/ # Error logs and debug traces└── cache/ # Temporary download cache (update checks, etc.)| File/Directory | Description |
|---|---|
config.yaml | User configuration. Edit via council config set or manually. |
council.db | SQLite database. Stores panels, experts, document indexes, chat history, memory. |
telemetry-counters.json | Local, content-free usage counters (e.g. screen.view:home). Created only when telemetry is enabled; never sent anywhere. Safe to delete. See Use the terminal UI. |
logs/ | Error logs and stack traces. Check here when debugging failures. |
cache/ | Ephemeral cache (update notifier, etc.). Safe to delete. |
Backup Strategy
Section titled “Backup Strategy”What to back up:
config.yaml— your settingscouncil.db— your panels, experts, and chat history
What to exclude:
logs/,cache/— regenerated as needed
Example:
# Backuptar -czf council-backup.tar.gz ~/.council/config.yaml ~/.council/council.db
# Restoretar -xzf council-backup.tar.gz -C ~/~/Council/ — User Data Directory
Section titled “~/Council/ — User Data Directory”Default location: ~/Council/
Override: COUNCIL_DATA_HOME environment variable or config.paths.dataHome
Contains version-controllable user-authored content: expert definitions, panel definitions, and document corpora.
Structure
Section titled “Structure”~/Council/├── experts/│ ├── cto.yaml│ ├── security-expert.yaml│ └── ...├── panels/│ ├── tech-review.yaml│ ├── code-review.yaml│ └── ...└── docs/ ├── cto/ │ ├── architecture-decisions.md │ ├── team-guidelines.pdf │ └── ... └── security-expert/ ├── threat-model.md └── ...Subdirectories
Section titled “Subdirectories”| Directory | Contains | Description |
|---|---|---|
experts/ | *.yaml | Expert definitions. Reusable across panels. See Expert YAML Format. |
panels/ | *.yaml | Panel definitions. Override bundled templates or define custom panels. See Panel YAML Format. |
docs/<expert-slug>/ | Documents | Persona expert document corpora. Council indexes these to train expert memory. |
Version Control
Section titled “Version Control”Recommended:
cd ~/Councilgit initgit add experts/ panels/git commit -m "Initial Council setup"What to commit:
experts/*.yaml— expert definitionspanels/*.yaml— panel definitionsdocs/(optional) — if docs are shareable or team-maintained
What to ignore:
# Exclude sensitive or large binary docsdocs/**/*.pdfdocs/**/*.docx
# Or exclude all docs if they're personal/sensitivedocs/Sharing with Teams
Section titled “Sharing with Teams”To share a panel definition and its experts with a team:
- Commit
panels/<panel-name>.yamland referencedexperts/*.yaml - Push to a shared repo
- Teammates clone and place files in their
~/Council/directory - Council auto-discovers them
Example:
# Team member A (author)cd ~/Councilgit add experts/cto.yaml experts/cfo.yaml panels/tech-review.yamlgit commit -m "Add tech-review panel"git push origin main
# Team member B (consumer)cd ~/Councilgit pull origin maincouncil panel show tech-review # Works immediatelyDocument Corpus Locations
Section titled “Document Corpus Locations”Default Location
Section titled “Default Location”For persona experts (experts with kind: persona), Council looks for documents in:
~/Council/docs/<expert-slug>/Example:
slug: ctokind: persona# (no docsPath override)Council indexes:
~/Council/docs/cto/Custom Location
Section titled “Custom Location”Override with the docsPath field:
slug: ctokind: personadocsPath: /shared/team-docs/architectureCouncil indexes:
/shared/team-docs/architecture/Checking Current Paths
Section titled “Checking Current Paths”Runtime Directory
Section titled “Runtime Directory”echo $COUNCIL_HOME# (unset) → ~/.council/
# Or check active configcouncil doctorData Directory
Section titled “Data Directory”echo $COUNCIL_DATA_HOME# (unset) → ~/Council/
# Or check active configcouncil config get paths.dataHomeIsolation for Testing
Section titled “Isolation for Testing”To run Council in an isolated environment (e.g., integration tests, CI):
export COUNCIL_HOME=/tmp/council-testexport COUNCIL_DATA_HOME=/tmp/council-datacouncil convene "Test topic" --panel test-panelCouncil creates fresh directories and does not touch ~/.council/ or ~/Council/.
Related
Section titled “Related”- Configuration —
paths.dataHomesetting - Environment Variables —
COUNCIL_HOME,COUNCIL_DATA_HOME - Expert YAML Format —
docsPathfield