Cross-cutting Concepts
Threat Model (STRIDE)
|
Warning
|
No STRIDE threat model exists in the code base. The threats below are
candidate threats, derived in Phase 2 from the code-visible risk
surfaces (see [section-technical-risks]). The completeness of this
catalogue and the validation of each threat are deferred to the
Architect and Operations — see ADR review and |
| T-ID | STRIDE | Candidate Threat | Risk |
|---|---|---|---|
T-001 |
Tampering, Elevation |
The LLM emits a destructive shell command and |
R-001 |
T-002 |
Information Disclosure |
A file tool reads a secret file such as |
R-002 |
T-003 |
Tampering |
A file write or patch lands outside the working directory [vibe/core/tools/utils.py:64-125]. |
R-003 |
T-004 |
Information Disclosure |
|
R-002 |
T-005 |
Elevation of Privilege |
An untrusted project’s |
R-004 |
T-006 |
Spoofing, Information Disclosure |
The Mistral API key leaks from disk [vibe/setup/auth/api_key_persistence.py:14-16]. |
R-005 |
T-007 |
Tampering |
A malicious hook command runs as a shell subprocess [vibe/core/hooks/executor.py:11-55]. |
R-006 |
Security
Every mitigation references the T-IDs it closes.
| Mechanism | Description | Closes |
|---|---|---|
Tiered tool permissions |
Each tool resolves to |
T-001, T-004 |
Command allow/deny lists + arity |
|
T-001 |
Sensitive-pattern gating |
File and search tools treat |
T-002 |
Working-directory boundary |
File tools require paths inside the working directory (or an
|
T-003 |
Trust-folder gate |
A folder containing |
T-005 |
Secret storage |
API keys are stored in |
T-006 |
Read-only agent profiles |
The |
T-001, T-003 |
Experimental-hooks gate |
Hooks are disabled unless |
T-007 |
Test
The test concept is a pytest suite (pytest + pytest-asyncio
respx + pytest-textual-snapshot) with test doubles named Fake* in
tests/stubs/ [AGENTS.md:84-92]. CI runs the suite plus strict pyright
and ruff [.github/workflows/ci.yml].
|
Warning
|
Tests are not traced to use cases or business rules, and the pyramid
shape (unit / integration / end-to-end proportions) is not declared.
Establishing per-use-case traceability — each test naming the
|
Observability
-
Tracing. OpenTelemetry spans wrap the agent invocation and each tool execution, with the conversation id propagated as OTEL baggage; the OTLP exporter is enabled only when telemetry and OTEL config are present [vibe/core/tracing.py:23-137].
-
Logging. Structured stdlib logging writes to
~/.vibe/logs/vibe.log; level and rotation size are env-configurable [AGENTS.md:68-69]. -
Usage telemetry. Usage events go to the Mistral datalake, gated by
enable_telemetryand the presence of an API key [vibe/core/telemetry/send.py:58-95]. -
ACP message log. When
VIBE_ACP_LOGGING_ENABLEDis set, every ACP protocol message is recorded [vibe/acp/acp_logger.py:17-59].
Error Handling
-
Retry and backoff. The Mistral backend retries transient failures — 500 ms initial delay, 1.5x exponent, 300 s cap [vibe/core/llm/backend/mistral.py:212-222].
-
Distinct LLM failures. Rate-limit and context-too-long errors are caught and surfaced distinctly rather than as generic failures [vibe/core/agent_loop.py:1365-1374].
-
Hook retry limit. Hooks retry at most three times before being reported as failed [vibe/core/hooks/manager.py:28-53].
-
Fail-open experiments. The GrowthBook client returns defaults on any error so a flag-service outage never blocks a session [vibe/core/experiments/client.py:43-76].
-
Cancellation.
asyncio.CancelledErroris handled explicitly so user interruption ends a turn cleanly [vibe/core/agent_loop.py:1170-1178]. -
Exception discipline. Module-local exception hierarchies are chained with
raise … from e[AGENTS.md:71].
Configuration
Configuration is layered and merge-aware: project .vibe/config.toml
directories are walked breadth-first (up to four levels) and then the
user ~/.vibe/config.toml layer is applied; layers merge field-by-field
with declared strategies (replace, concat, union, shallow, conflict)
[vibe/core/config/builder.py:24-122, vibe/core/paths/_local_config_walk.py:132-168].
VIBE_HOME relocates the entire user state directory
[vibe/core/paths/_vibe_home.py:19-25]. This concept is listed because
the system genuinely has a configuration concern that crosses every
building block.
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.