Read-Only System Viewer Surfaces for LegiVellum Meshes
InterView provides bounded, read-only insight into system state and operations via query surfaces, without introducing orchestration, polling storms, or load amplification on global receipt stores.
Implementation: v0.1.0 (based on SPEC-IV-0000)
See: InterView Spec v0.txt for full specification.
pip install -e ".[dev]"Environment variables (prefix INTERVIEW_):
| Variable | Default | Description |
|---|---|---|
HOST |
0.0.0.0 | Server bind address |
PORT |
8000 | Server port |
DEBUG |
false | Enable debug mode |
INSTANCE_ID |
interview-1 | Instance identifier |
PROJECTION_CACHE_URL |
- | Projection cache URL |
LEDGER_MIRROR_URL |
- | Legacy ledger mirror URL |
RECEIPTGATE_URL |
- | ReceiptGate MCP endpoint |
RECEIPTGATE_API_KEY |
- | ReceiptGate API key |
ASYNCGATE_URL |
- | AsyncGate MCP endpoint |
ASYNCGATE_API_KEY |
- | AsyncGate API key |
DEPOTGATE_URL |
- | DepotGate MCP endpoint |
DEPOTGATE_API_KEY |
- | DepotGate API key |
MEMORYGATE_URL |
- | Deprecated MemoryGate URL |
ALLOW_GLOBAL_LEDGER |
false | Enable global ledger access |
GLOBAL_LEDGER_URL |
- | Global ledger MCP endpoint |
COMPONENT_POLL_RATE_LIMIT_PER_MINUTE |
60 | Rate limit for component polls |
COMPONENT_POLL_TIMEOUT_MS |
500 | Component poll timeout |
COMPONENT_POLL_CACHE_SECONDS |
5 | Component poll cache TTL |
InterView is MCP-HTTP only. Use /mcp with JSON-RPC methods:
tools/listtools/call
All read-only surfaces (status/search/get/health/queue/inventory) are exposed as MCP tools.
# Start server
uvicorn interview.main:app --host 0.0.0.0 --port 8000
# Or use the entry point
python -m interview.mainInterView is a window. If it can change the world, it is no longer a Viewer.
InterView may query ledgers, caches, storage metadata, and (optionally) poll components for diagnostics. It MUST NOT initiate work, route work, modify artifacts, mutate system state, or trigger automation.
InterView MUST NOT:
- Submit tasks or work orders
- Issue or revoke leases
- Retry, reschedule, reassign, or "fix" anything
- Ship deliverables or purge staging
- Write receipts as part of "state changes"
- Infer completion based on timeouts or heuristics
- Perform watch/trigger behavior
InterView protects the global receipt store with a strict source hierarchy:
- Projection Cache (preferred) - Local read-optimized store
- Ledger Mirror (permitted) - Local or read-replica receipt store
- Component Diagnostics (optional, bounded) - Rate-limited health/metrics
- Global Ledger (last resort, opt-in only) - Requires explicit intent
<verb>.<domain>[.<subdomain>].interview()
| Verb | Purpose |
|---|---|
status.* |
Derived state summaries |
search.* |
Bounded search/list queries |
get.* |
Single-object retrieval by ID |
health.* |
Live component polls |
queue.* |
Live AsyncGate queue diagnostics |
inventory.* |
Storage + metadata listing |
| Surface | Purpose |
|---|---|
status.receipts.interview() |
Low-cost derived status for task lineage |
search.receipts.interview() |
Search/list receipt headers with bounds |
get.receipt.interview() |
Retrieve single receipt by ID |
health.async.interview() |
Live health snapshot of AsyncGate |
queue.async.interview() |
Live AsyncGate queue diagnostics |
inventory.artifacts.depot.interview() |
List artifact pointers for task/deliverable |
All list/search surfaces support:
limit(default <= 100)time_windoworsince(default <= 24h)include_body(default false)freshnessenum:cache_ok,prefer_fresh,force_fresh
Every response includes:
sourceenum (projection_cache, ledger_mirror, component_poll, etc.)freshness_age_mstruncatedbooleannext_page_token(optional)cost_units
- Will not create side effects in the mesh
- Will not hammer the global receipt store by default
- Responses are bounded and labeled with freshness/source
Proprietary - Technomancy Labs