Aegis
# Aegis
Fail-closed control layer for coding agents. MCP tool, not a chat app.
Hooks inject. Tools execute. File-exists is not a receipt. You do not certify.
## Tools
| Tool | Job |
| --- | --- |
| `land_inject` | Force LAND context this turn (`truth` + `act`) |
| `no_fake_done` | BLOCK a done-word with no live proof |
| `trust_freeze` | Freeze the seat after BLOCK |
| `decide` | Run the scar engine on a prompt |
## Cursor
`.cursor/mcp.json`:
```json
{
"mcpServers": {
"aegis": {
"command": "npx",
"args": ["-y", "github:Viss007/aegis"]
}
}
}
```
Local clone:
```json
{
"mcpServers": {
"aegis": {
"command": "node",
"args": ["bin/aegis-mcp.mjs"]
}
}
}
```
Hook (inject, not a tool):
```json
{
"version": 1,
"hooks": {
"beforeSubmitPrompt": [{ "command": "node hooks/land.cjs" }]
}
}
```
## Scar
Same file on disk. No live proof.
- inject on → refuse. file-exists side door blocked.
- inject off → liar says DONE.
## HTTP
`POST /mcp` JSON-RPC. Same methods as stdio (`initialize`, `tools/list`, `tools/call`).
TDQS
Scored across 4 tools
land_inject and decide both concern LAND context injection, making their boundary unclear. no_fake_done and trust_freeze are sequentially coupled but their distinct roles are not obvious from names alone, so an agent could easily misselect.
All names use snake_case, but the patterns are mixed: land_inject is verb_noun, no_fake_done is a negation phrase, trust_freeze is noun_verb, and decide is a single verb. It is readable but not predictable.
Four tools is a reasonable size for a specialized guardrail server. However, the overlap between land_inject and decide suggests some consolidation might be warranted.
The inferred domain is agent safety and enforcement, but there is no tool to unfreeze trust, check current state, or submit proof/receipts. These gaps could lead to deadlocks or agent failures.