2.3 KiB
Context
Tool instances currently start with hardcoded compose templates. There's no way for users to provide API keys (OpenAI, Anthropic), custom settings, or files that tools need. We need a flexible config system that supports both environment variables and file-based configs.
Goals / Non-Goals
Goals:
- Store tool configs per user (global) and per project
- Support env vars and file-based configs
- Mount configs into containers at startup
- Add tool categories (editor, notebook, ai-assistant)
- Add interface types (web, terminal) to control UI
- Add OpenCode as built-in terminal tool
Non-Goals:
- Secret encryption at rest (for now)
- Config validation beyond basic type checking
- Per-instance configs (only global and project-scoped)
Decisions
Config scope: user-global and user+project
Decision: Two scopes - global (user-level) and project-specific (user+project level)
Rationale: Some configs (like OpenAI API key) are user-global. Others (like project-specific paths) are per-project.
Config types: env and file
Decision: Support two config types: env (injected as environment variables) and file (written to files and mounted)
Rationale: Most tools need env vars. Some (like OpenCode) need config files.
Tool categories as enum
Decision: Predefined categories: editor, notebook, ai-assistant, other
Rationale: Simple, predictable, drives UI behavior.
Interfaces as array
Decision: ToolType.interfaces is a JSON array of strings: ["web"], ["terminal"], ["web", "terminal"]
Rationale: Flexible, allows combination interfaces.
Risks / Trade-offs
[Risk] Config files in container filesystem are readable by any process in container → Mitigation: Document this. Future: use Docker secrets for sensitive values.
[Risk] Storing API keys in plain text in database → Mitigation: Acceptable for MVP. Future: encrypt sensitive configs.
Migration Plan
- Create migrations for tool_types (category, interfaces) and tool_configs tables
- Update seed data for built-in types
- Deploy backend changes
- Update frontend to show categories and config UI
- Test with OpenCode instance
Open Questions
- Should we encrypt sensitive configs now or later?
- Do we need config templates/tooling per tool type?