* Fix: Deprecate database command templates (#231) Database command templates still influenced routing and /command-invoke, preventing file-based commands from fully replacing them. Changes: - Remove template routing, handlers, and DB module - Add .archon/commands fallback for /command-invoke - Drop template table from schema/migrations and update docs/tests Fixes #231 * docs: update CLAUDE.md and README.md for template deprecation Remove all references to deprecated database command templates: - Update table count from 8 to 7 tables - Remove command_templates table from database schema sections - Remove "Command Templates (Global)" section from README - Remove /template-add, /template-delete, /templates command docs - Update "Custom command templates" to "Custom commands" - Remove references to global templates stored in database * Fix review findings: error handling, tests, migration guidance - Fix commandFileExists to only catch ENOENT, throw on unexpected errors (permissions, I/O) instead of silently returning false - Add test for file read failure after successful existence check - Add test for path traversal rejection via isValidCommandName - Add test for registered command taking precedence over fallback - Add migration guidance comments for users with existing templates
6.6 KiB
Configuration Guide
Archon supports a layered configuration system with sensible defaults, optional YAML config files, and environment variable overrides.
Directory Structure
User-Level (~/.archon/)
~/.archon/
├── workspaces/ # Cloned repositories
│ └── owner/repo/
├── worktrees/ # Git worktrees for isolation
│ └── repo-name/
│ └── branch-name/
├── archon.db # SQLite database (when DATABASE_URL not set)
└── config.yaml # Global configuration (optional)
Repository-Level (.archon/)
.archon/
├── commands/ # Custom commands
│ └── plan.md
├── workflows/ # Future: workflow definitions
└── config.yaml # Repo-specific configuration (optional)
Configuration Priority
Settings are loaded in this order (later overrides earlier):
- Defaults - Sensible built-in defaults
- Global Config -
~/.archon/config.yaml - Repo Config -
.archon/config.yamlin repository - Environment Variables - Always highest priority
Global Configuration
Create ~/.archon/config.yaml for user-wide preferences:
# Default AI assistant
defaultAssistant: claude # or 'codex'
# Streaming preferences per platform
streaming:
telegram: stream # 'stream' or 'batch'
discord: batch
slack: batch
github: batch
# Custom paths (usually not needed)
paths:
workspaces: ~/.archon/workspaces
worktrees: ~/.archon/worktrees
# Concurrency limits
concurrency:
maxConversations: 10
Repository Configuration
Create .archon/config.yaml in any repository for project-specific settings:
# AI assistant for this project (used as default provider for workflows)
assistant: claude
# Commands configuration
commands:
folder: .archon/commands
autoLoad: true
# Worktree settings
worktree:
baseBranch: main # Optional: Base branch for workspace sync (default: auto-detect)
copyFiles: # Optional: Additional files to copy to worktrees
- .env.example -> .env # Rename during copy
- .vscode # Copy entire directory
# Defaults configuration
defaults:
loadDefaultCommands: true # Load app's bundled default commands at runtime
loadDefaultWorkflows: true # Load app's bundled default workflows at runtime
copyDefaults: false # Deprecated: use loadDefaultCommands/loadDefaultWorkflows instead
Default behavior: The .archon/ directory is always copied to worktrees automatically (contains artifacts, plans, workflows). Use copyFiles only for additional files like .env or .vscode.
Defaults behavior: The app's bundled default commands and workflows are loaded at runtime and merged with repo-specific ones. Repo commands/workflows override app defaults by name. Set defaults.loadDefaultCommands: false or defaults.loadDefaultWorkflows: false to disable runtime loading.
Base branch behavior: Before creating a worktree, the canonical workspace is synced to the latest code:
- If
worktree.baseBranchis set: Uses the configured branch. Fails with an error if the branch doesn't exist (no silent fallback). - If
worktree.baseBranchis omitted: Auto-detects the default branch viagit symbolic-ref(falls back tomainormaster).
Environment Variables
Environment variables override all other configuration:
| Variable | Description | Default |
|---|---|---|
DATABASE_URL |
PostgreSQL connection (optional) | SQLite at ~/.archon/archon.db (recommended for single-developer use) |
ARCHON_HOME |
Base directory for Archon | ~/.archon |
DEFAULT_AI_ASSISTANT |
Default AI assistant | claude |
TELEGRAM_STREAMING_MODE |
Telegram streaming | stream |
DISCORD_STREAMING_MODE |
Discord streaming | batch |
SLACK_STREAMING_MODE |
Slack streaming | batch |
GITHUB_STREAMING_MODE |
GitHub streaming | batch |
MAX_CONCURRENT_CONVERSATIONS |
Concurrency limit | 10 |
.env File Locations
Infrastructure configuration (database URL, platform tokens) is stored in .env files:
| Component | Location | Purpose |
|---|---|---|
| CLI | ~/.archon/.env |
Global infrastructure config |
| Server | <archon-repo>/.env |
Platform tokens, database |
Important: The CLI loads .env only from ~/.archon/.env, not from the current working directory. This prevents conflicts when running Archon from projects that have their own database configurations.
Best practice: Use ~/.archon/.env as the single source of truth. If running the server, symlink or copy to the archon repo:
# Create global config
mkdir -p ~/.archon
cp .env.example ~/.archon/.env
# Edit with your values
# For server, symlink to repo
ln -s ~/.archon/.env .env
Docker Configuration
In Docker containers, paths are automatically set:
/.archon/
├── workspaces/
└── worktrees/
Environment variables still work and override defaults.
Command Folder Detection
When cloning or switching repositories, Archon looks for commands in this priority order:
.archon/commands/- Always searched first- Configured folder from
commands.folderin.archon/config.yaml(if specified)
Example .archon/config.yaml:
commands:
folder: .claude/commands/archon # Additional folder to search
autoLoad: true
Examples
Minimal Setup (Using Defaults)
No configuration needed! Archon works out of the box with:
~/.archon/for all managed files- Claude as default AI assistant
- Platform-appropriate streaming modes
Custom AI Preference
# ~/.archon/config.yaml
defaultAssistant: codex
Project-Specific Settings
# .archon/config.yaml in your repo
assistant: claude # Workflows inherit this provider unless they specify their own
commands:
autoLoad: true
Docker with Custom Volume
docker run -v /my/data:/.archon ghcr.io/dynamous-community/remote-coding-agent
Troubleshooting
Config Parse Errors
If your config file has invalid YAML syntax, you'll see error messages like:
[Config] Failed to parse global config at ~/.archon/config.yaml: <error details>
[Config] Using default configuration. Please fix the YAML syntax in your config file.
Common YAML syntax issues:
- Incorrect indentation (use spaces, not tabs)
- Missing colons after keys
- Unquoted values with special characters
The application will continue running with default settings until the config file is fixed.