Add a tool
- Add one file under
src/tools/. - Implement
BaseTool. - Define JSON Schema parameters.
- Add metadata or rely on
metadata_for_tool(). - Register it in
src/runtime/tooling.py. - Add route policy classification if it creates a new risk or capability.
- Add tests.
- Document the setting, tool, and privacy boundary.
NETWORK_TOOLS_ENABLED.
OS, shell, UI, app/window, LaunchAgent, and clipboard-write tools must be gated by OS_TOOLS_ENABLED.
Add a command
- Add the command to
_COMMANDSinsrc/runtime/live_session.py. - Handle it in the local command path.
- Keep it out of model routing.
- Add tests in
tests/test_runtime.pyor a focused test file. - Update Commands.
Add a setting
- Add the dataclass field in
src/utils/settings.py. - Load and validate it in
Settings.load_from_env(). - Add it to
.env.example. - Update Settings.
- Add tests for parsing and behavior.
Add a provider
No provider class is needed when the provider speaks OpenAI-compatible/v1/chat/completions.
Document the required API_BASE_URL, API_KEY, and model names. Preflight should keep failures human-readable.
Add a connector type or connector behavior
Usesrc/runtime/connectors/ when Eyra needs to hand work to an external worker while keeping route policy, approval, logs, artifacts, and cancellation in Eyra.
Required pieces:
- Manifest validation in
manifest.py. - Structured contracts in
types.py. - Registry snapshots and acceptance state in
registry.py. - Bounded execution in
runner.py. - Terminal and Web command/API wiring.
- Route execution class and capability mapping.
- Redaction, sandbox, timeout, and output-cap tests.
- Certification rows when the behavior is release-critical.
- Updates to Connectors, Settings, Commands, and Web endpoints.
Add a long-running capability
Use background tasks when work can outlive the immediate turn. Required pieces:- Route policy.
- Capability and risk classification.
- Cancellation.
- Timeout.
- Logs or artifacts.
- Privacy boundary.
- Tests.
- Documentation.
- Certification coverage when release-critical.