Sandbox proxy enforcing per-session limits for playground.dakera.ai (DAK-6713). Sits between the public playground frontend and the Dakera engine, enforcing per-session sandbox limits: rate limit, memory cap, session TTL, endpoint allow-list, CORS, and health endpoint. Injects server-side root API key so clients never hold it.
This is a proxy server forwarding requests to an upstream Dakera engine. Tool definitions are inferred from an allowlist rather than explicitly registered via MCP tool registration. Schemas are present but minimal (agent_id, query strings, array parameters). Descriptions are present but generic and repetitive ('Forwarded to upstream Dakera engine with session namespace injection' appears in 18+ tools). No error handling guidance, no output schemas documented, no parameter constraints (enums, ranges). Tool names lack clear verb-noun structure (e.g., 'POST /v1/memory/store' instead of 'store_memory'). No evidence of idempotency, pagination, or composition patterns. Security model relies on server-side namespace injection but no audit trail or permission gate documentation.
Proxy's own health endpoint for container healthcheck and monitoring liveness. Returns status, service name, version, active session count, and uptime.
List memories for a specific agent. Read-only operation (API explorer + multi-agent scenario). Forwarded to upstream Dakera engine with session namespace injection.
Knowledge graph path traversal. Read-only operation. Forwarded to upstream Dakera engine with session namespace injection.
Knowledge graph query. Read-only operation. Forwarded to upstream Dakera engine with session namespace injection.
Get knowledge graph for a specific memory. Read-only operation. Forwarded to upstream Dakera engine with session namespace injection.
Get knowledge graph path for a specific memory. Read-only operation. Forwarded to upstream Dakera engine with session namespace injection.
Tool names use HTTP method + path syntax instead of verb_noun convention. LLMs cannot parse 'POST /v1/memory/store' as clearly as 'store_memory'. This violates the action-verb naming pattern and forces LLMs to reason about HTTP semantics.
18 of 24 tools have identical boilerplate descriptions ('Forwarded to upstream Dakera engine with session namespace injection'). These descriptions do not explain WHAT the tool does, WHEN to use it, or what it returns. LLMs cannot distinguish between recall, search, and hybrid without reading parameter names.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., memory_id, session_id) without knowing response structure. This breaks tool composition and forces agents to guess.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 40 | 2026-07-28+ | v2 |
Get a specific memory by ID. Read-only operation. Forwarded to upstream Dakera engine with session namespace injection.
Get ChatMemorySession details. Read-only operation. Forwarded to upstream Dakera engine with session namespace injection.
CORS preflight handler. Responds to OPTIONS requests with appropriate CORS headers. Never forwarded to upstream.
Build knowledge graph. Forwarded to upstream Dakera engine with session namespace injection.
Build full knowledge graph (KG Explorer). Forwarded to upstream Dakera engine with session namespace injection.
Knowledge graph query via POST (convenience alias). Converts JSON body to GET query string. Read-only operation. Forwarded to upstream Dakera engine with session namespace injection.
Extract entities from already-stored memories. Read-only operation (Entity Extraction scenario). Forwarded to upstream Dakera engine with session namespace injection.
Recall memories for multiple queries in batch. Read-only operation. Forwarded to upstream Dakera engine with session namespace injection.
Store multiple memories in batch. Counts against the per-session memory cap (req #2). Forwarded to upstream Dakera engine with session namespace injection.
Hybrid search with vector weight tuning. Forwarded to upstream Dakera engine with session namespace injection and path rewriting to /v1/namespaces/{ns}/hybrid.
Update memory importance score. Scenario 5 (memory decay) operation. Forwarded to upstream Dakera engine with session namespace injection.
Recall memories matching a query. Read-only operation. Forwarded to upstream Dakera engine with session namespace injection.
Search memories. Read-only operation. Forwarded to upstream Dakera engine with session namespace injection.
Store a single memory. Counts against the per-session memory cap (req #2). Forwarded to upstream Dakera engine with session namespace injection.
LLM side-by-side comparison (DAK-6845). Calls the same free OpenRouter model twice in parallel — once with no context (raw question) and once with relevant Dakera memories injected as a system prompt. Returns responses from both variants so users can see memory-augmented AI vs. plain LLM.
Routing demo (read-only classifier). Forwarded to upstream Dakera engine with session namespace injection.
Start a ChatMemorySession. Forwarded to upstream Dakera engine with session namespace injection.
End a ChatMemorySession. Forwarded to upstream Dakera engine with session namespace injection.
Parameters lack constraints. 'top_k' and 'vector_weight' have no min/max bounds; 'query' strings have no length limits. Unbounded numeric parameters let LLMs pass absurd values (top_k=999999) that break APIs or cause timeouts.
No error handling guidance. If a memory recall returns empty results or a session fails to start, the LLM has no recovery path. Descriptions do not indicate which errors are retryable, which require user input, or which are fatal.