perseus
Perseus is an MCP server that eliminates AI assistant cold-starts by delivering live, verified workspace context. It provides tools for querying environment state, reading files, managing tasks, and coordinating multi-agent workflows.
Context & File Operations
perseus_get_context– Retrieve the full rendered workspace snapshot (services, environment, tasks, memory, health) in markdown or JSON.perseus_read,perseus_list,perseus_tree,perseus_include– Read file contents, list directories, view directory trees, and include/render other files.perseus_env– Read and validate environment variables with fallback support.perseus_date– Get the current date/time in a configurable format.
Health, Drift & Validation
perseus_health,perseus_get_health– Run context-maintenance heuristics (stale skills, duplicate tasks, oversized context warnings).perseus_services– Health-check running services (e.g., Docker containers, APIs) with status and latency.perseus_drift– Detect configuration/context drift.perseus_validate– Validate rendered blocks against JSON schemas.
Memory & Session Management
perseus_waypoint,perseus_session– Retrieve the latest checkpoint summary and recent session digests to recover state.perseus_memory,perseus_mimir– Query narrative project memory (Mnēmē) and recall persistent memories via BM25/FTS5 search.perseus_sibyl,perseus_sibyl_state– Query and surface Sibyl auto-injected structured context documents.
Task & Agent Coordination
perseus_agora– View and filter tasks fromtasks/*.mdby status (open, in_progress, completed, cancelled).perseus_inbox– Read agent messages, with filtering for unread.perseus_skills– List available skills with staleness flags, filterable by category.perseus_auto-skill– Instruct an agent to load a specific skill before beginning work.
Execution & External Tools
perseus_query– Run arbitrary shell commands (requires explicit opt-in).perseus_tool– Execute allowlisted external tools.perseus_perseus– Fetch rendered context from a remote Perseus instance.
Metadata & Architecture
perseus_mason– Generate code architecture concept maps (feature-to-file mappings).perseus_tooltrim– Get filtered tool descriptions and usage statistics.perseus_prompt– Retrieve system prompt blocks.
Provides live context and workspace state to Hermes Agent (by NousResearch), enabling it to start sessions with pre-resolved, verified facts about the workspace.
Perseus™ 🪞 — One command. Zero orientation.
Published on PyPI · Official MCP Registry · Glama · Smithery · Lulu MCPs
pip install perseus-ctx==1.0.26 && cd your-project && perseus quickstart
Zero to rendered context in three lines — no config spelunking:
pip install perseus-ctx==1.0.26 # 1. install
cd your-project && perseus quickstart # 2. scaffold .perseus/context.md + config
perseus render .perseus/context.md -o AGENTS.md # 3. write live context your agent readsquickstart detects your stack, scaffolds .perseus/context.md, writes config,
and verifies a render. Step 3 writes the file your assistant loads at session
start (AGENTS.md, CLAUDE.md, .cursorrules, ...). Keep it live with
perseus watch (or cron/systemd/launchd). Full walkthrough:
Quickstart.
For the one-page product boundary and independent evaluation sequence, see the
Evaluator Guide.
What you get
Live context before the first turn — render current workspace values with their source and freshness boundaries instead of making an assistant rediscover them.
One source, any assistant — write
.perseus/context.mdonce and render to.hermes.md,AGENTS.md,CLAUDE.md,.cursorrules, or another assistant context file.Local-first by default — the core renderer reads your workspace locally; no account or hosted service is required.
MCP-native when you need it — expose the same live context as a stdio or SSE MCP server, with shell-executing tools opt-in.
Context, memory, and session terms
Perseus resolves and shapes the active working context; Perseus Vault owns durable-memory persistence and recall.
Active working context is the current, task-relevant workspace state — files, services, tasks, and other facts that can change. Perseus resolves and shapes it at render time before the assistant sees it.
Durable memory is information intended to survive session boundaries. Perseus Vault owns its persistence and recall.
Recalled memory is the subset of durable memory returned for a query and shaped into the rendered context. The public
@memorydirective remains the compatibility API name for Vault-backed recall; existing MCP compatibility names remain unchanged.Session history is Perseus's recent checkpoint and session-digest record.
@waypointand@sessionexpose it; it is distinct from durable memory. An explicit capture may persist a checkpoint in Perseus Vault as durable memory.
Fastest path
pip install perseus-ctx==1.0.26
cd your-project
perseus quickstartThat creates .perseus/context.md and a project config, detects common stacks,
and verifies the first render. See the 5-minute quickstart
for assistant profiles, refresh options, and security settings.

Perseus is the system around the model: current context, governed memory, and reviewable evidence for consequential agent work.
Perseus Context Engine resolves live workspace state before execution. Perseus Vault carries selected, time-valid memory across sessions. Perseus Ledger records supplied events and evidence references for later review. The operator still chooses the model, keys, data path, deployment, and execution authority.
The current source-checked LongMemEval measurement is the fully offline, judge-free
session-level recall lane in the Perseus Vault repository. On the public _s
split (500 questions, 23,867 ingested sessions), the committed hybrid path reaches
83.2% recall@1, 96.6% recall@3, 98.8% recall@5, 99.8% recall@10, and 0.8949 MRR
against answer_session_ids. This is a company-run retrieval measurement: it is
retrieval-only, not end-to-end QA accuracy; not a customer result, production
validation, independent holdout, or cross-model comparison; the committed report,
harness,
and methodology boundaries are public.
Deprecated answerer/judge experiments are not current product claims. Read the Evaluator Guide and canonical claim registry before reusing a measurement.
🛡️ Platform
Perseus is one platform with three layers. Each layer has a distinct job; together they keep agent work oriented, durable, and reviewable.
Layer | What it does | Page |
Perseus Context Engine | Resolves configured workspace state into a bounded briefing with source and configuration boundaries before the model runs. | |
Perseus Vault | Persists governed memory across sessions with local-first storage, retrieval, and confidence-aware records. | |
Perseus Ledger | Records hash-chained events and evidence so consequential work can be reconstructed and reviewed. |
The benchmarks desk is the proof surface for measured results. It is not a fourth product or a substitute for a customer evaluation.
Perseus Vault — Persistent Memory (MCP)
Perseus Vault is the governed-memory component for Perseus. Its default local stdio path uses SQLite and FTS5 and does not require a Perseus-hosted service or API key. The release binary includes the default local embedding model. Optional connectors and network transports change that boundary and remain under operator configuration. Representative MCP tools include perseus_vault_remember, perseus_vault_recall, perseus_vault_context, perseus_vault_traverse, perseus_vault_decay, perseus_vault_stats, and perseus_vault_health.
📄 Product page → | 📚 Versioned MCP API reference → | ⭐ Vault on GitHub →
Install (v2.23.2, x86_64 Linux; verified before extraction):
set -euo pipefail
workdir="$(mktemp -d)"
trap 'rm -rf "$workdir"' EXIT
archive="$workdir/perseus-vault-x86_64-unknown-linux-gnu.tar.gz"
curl -fSL -o "$archive" https://github.com/Perseus-Computing-LLC/perseus-vault/releases/download/v2.23.2/perseus-vault-x86_64-unknown-linux-gnu.tar.gz
printf '%s %s\n' '7143709aa6c9c29128e5daae47c13ddcc6ec56b35c7a605726b51f635309998e' "$archive" | sha256sum -c -
tar -xzf "$archive" -C "$workdir"
test -f "$workdir/perseus-vault"
mkdir -p "$HOME/.local/bin"
install -m 0755 "$workdir/perseus-vault" "$HOME/.local/bin/perseus-vault"Use the v2.23.2 release page for macOS, Windows, other architectures, and provenance. Then run perseus doctor to confirm Perseus can reach it.
Hermes Agent — add to ~/.hermes/config.yaml:
mcp_servers:
perseus_vault:
command: "perseus-vault"
args: ["serve"]Claude Desktop / Cursor — add to your MCP settings:
{
"mcpServers": {
"perseus_vault": {
"command": "perseus-vault",
"args": ["serve"]
}
}
}Perseus integration — add to .perseus/config.yaml:
perseus_vault:
enabled: true
command: ["perseus-vault", "serve"]The perseus-vault binary self-resolves its canonical default DB path, so no --db argument is needed (its default is ~/.perseus-vault/data/perseus-vault.db). The perseus_vault: configuration block is the sole supported memory configuration. Then add @memory mode=search query="your terms" to .perseus/context.md and Perseus resolves live recall at render time.
Works with any MCP-compatible assistant.
Related MCP server: Context7 MCP
Wire Perseus to Your Assistant (MCP)
Perseus implements the Model Context Protocol (MCP), exposing tools over stdio or SSE transport. Most tools resolve workspace state when invoked, but freshness is tool-specific: the remote Perseus compatibility tool can cache results, waypoint data has a TTL, and explicit cache-enabled paths follow their configured policies.
Stable launcher for MCP and schedulers: Use
~/.local/bin/perseusin shell commands. In JSON/YAML MCPcommandfields, replace~with your home directory because exec-style clients do not perform shell expansion. This install-managed launcher stays stable across package upgrades instead of baking a version-specific Python or Library path into background configuration. Interactive shell commands may still useperseus; verify the resolved entry point withcommand -v perseuswhen diagnosing an installation.
⚠️ Security Gate: Shell-executing directives (
@query,@agent,@services command:) requireexport PERSEUS_ALLOW_DANGEROUS=1. Without it, shell directives are silently skipped.
Quick Start (MCP Server)
pip install perseus-ctx==1.0.26
~/.local/bin/perseus mcp serve # stdio (Claude Desktop, Claude Code, Cursor, Codex)For the loopback-only SSE listener, set a bearer token in the protected Perseus config before launch. The server binds to 127.0.0.1, rejects non-loopback Host headers, and refuses an unauthenticated bind unless the operator explicitly overrides that safeguard. Multi-machine deployments need a separately reviewed authenticated proxy or tunnel:
mcp:
sse_bearer_token: "<secret from your secret manager>"~/.local/bin/perseus mcp serve --transport sse --port 8420Assistant-Specific Wiring
Pick your assistant and add the config block shown:
Hermes Agent (~/.hermes/config.yaml):
mcp_servers:
perseus:
command: /home/yourname/.local/bin/perseus
args: ["mcp", "serve", "--workspace", "/path/to/workspace"]Then verify with hermes mcp test perseus. Tools appear as mcp_perseus_* in your session.
Use an absolute path for
--workspace. Perseus's non-interactive shell context has a limited PATH, so the stable launcher above avoids relying on interactive-shell lookup.
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"perseus": {
"command": "/Users/yourname/.local/bin/perseus",
"args": ["mcp", "serve", "--workspace", "/path/to/workspace"]
}
}
}Claude Code (.mcp.json in your project root):
{
"mcpServers": {
"perseus": {
"command": "/Users/yourname/.local/bin/perseus",
"args": ["mcp", "serve"]
}
}
}Cursor (.cursor/mcp.json):
{
"mcpServers": {
"perseus": {
"command": "/Users/yourname/.local/bin/perseus",
"args": ["mcp", "serve"]
}
}
}Codex (~/.codex/config.toml or per-project .mcp.json):
{
"mcpServers": {
"perseus": {
"command": "/Users/yourname/.local/bin/perseus",
"args": ["mcp", "serve"]
}
}
}Rovo Dev (.mcp.json in repo root):
{
"mcpServers": {
"perseus": {
"command": "/Users/yourname/.local/bin/perseus",
"args": ["mcp", "serve"]
}
}
}Rovo Dev also reads AGENTS.md at session start — pair MCP tools with rendered context for a complete setup.
Docker
docker build -t perseus .
docker run --rm -v /path/to/workspace:/workspace perseus mcp serveSee Container Runtime for full Docker and compose deployment.
MCP Registry
Published as io.github.Perseus-Computing-LLC/perseus on the official MCP Registry (search "perseus"). Includes server.json for zero-config discovery.
Current MCP interface
Perseus Context Engine exposes workspace-context operations over MCP. The current public interface centers on rendering and inspecting context, checking health, reading explicitly allowed workspace sources, and connecting to Perseus Vault for durable memory. Code-level compatibility identifiers are not separate Perseus products.
Sensitive operations that execute a shell command or local agent process are excluded from the default tool set. They require an explicit mcp.tool_allowlist entry and the applicable dangerous-operation gate. They run with the current user's permissions and are not sandboxed.
Use the technical setup guide for host configuration. The Context Engine MCP compatibility reference isolates code-level identifiers from the public product summary. Use the versioned Perseus Vault MCP reference for the release-bound Vault tool surface.
The Problem
Every AI assistant session starts cold. Before useful work begins, the assistant burns turns on orientation — checking which services are running, reading stale config files, rediscovering where you left off. Static markdown files (.cursorrules, CLAUDE.md) rot immediately. The port you wrote down has changed. The container that was "always running" hasn't been started since Tuesday.
Stale context isn't neutral. It's drag.
The Fix: Resolve Before Context
Perseus is a pre-processor. You write directives in a source document — @query, @services, @waypoint — and Perseus resolves them at render time, then outputs plain markdown. The assistant receives the rendered values together with the source and configuration boundaries that produced them.
Without Perseus With Perseus
──────────────────────────────── ──────────────────────────────────
"Port is 3001 (check .env)" → Port: 3001
"47 tests (may be stale)" → Tests: all passing (run 8s ago)
"Check docker ps first" → mongo-dev: Up 4h 12m
"Where did we leave off?" → Checkpoint: webhook handler written,
pending test runPerseus replaces your assistant's context file — CLAUDE.md, .cursorrules, AGENTS.md, .hermes.md — with rendered live context. If you already have a hand-written context file, migrate its static content into .perseus/context.md first. Perseus overwrites the output file on every render. Add @perseus to line 1 of your source and it becomes live. The assistant never sees directive syntax. It sees a rendered snapshot whose freshness depends on the source, configuration, and runtime availability.
Quick Start (30 Seconds to Live Context)
perseus quickstart # auto-detects project, scaffolds context, rendersSmart init detects your stack and tailors the setup:
Python →
@memoryqueries for test patterns, type annotationsRust → trait bounds, lifetime annotations, cargo config
Node.js/TS → npm scripts, ESLint config, component patterns
Go, Java, C/C++, Docker — all detected automatically
Falls back to a sensible generic query when unknown
The output file name is the only assistant-specific detail:
Assistant | Output file |
Claude Code |
|
Hermes Agent |
|
Cursor |
|
Codex |
|
Rovo Dev |
|
Any other | Whatever your assistant reads at session start |
Hermes priority order:
.hermes.md→AGENTS.md→CLAUDE.md. Render to.hermes.mdfor highest priority.
Keep it fresh with cron, launchd, systemd, or perseus watch:
# Linux systemd (auto-refresh every 5 minutes)
~/.local/bin/perseus systemd create .perseus/context.md --output AGENTS.md --interval 5m --install --enable
# macOS launchd
~/.local/bin/perseus launchd create .perseus/context.md --output AGENTS.md
# Cron (any POSIX host)
~/.local/bin/perseus cron create .perseus/context.md --output AGENTS.md --every 5 --installSee the file-based Hermes integration guide for generated context-file setup and adapter patterns for full integration details.
Why Perseus? (Proof, Hardening, and Enterprise Value)
Perseus delivers context rendered from configured sources, with freshness limits made visible, so AI assistants spend fewer turns orienting themselves. Here's how it stands up:
Performance & efficiency
Current public measurements belong in the methods desk and claims registry. Each reusable figure must keep its method, dataset, denominator, control, and limitation attached.
Reliability & Security
Perseus is tested against edge cases that challenge the resolve-before-context contract. The current security boundary and documented posture live in SECURITY.md and on the public security page:
MCP SSE bearer-token auth —
POST /messagerequires Bearer token viamcp.sse_bearer_tokenconfig key (falls back toserve.auth_tokenfor backward compat). Unauthenticated requests receive 401.Platform-portable MCP timeout —
_call_tool()usesThreadPoolExecutor+Future.result(timeout=...)instead of Unix-only SIGALRM. Works on Windows, macOS, and Linux.
Platform support: Perseus is developed and CI-tested on Linux. macOS is supported but not in CI. Windows core rendering, MCP transport, and Task Scheduler integration work with known POSIX-specific shell, path, and LSP caveats.
Foreign resolver SSRF protection — URL allowlist via
foreign_resolver.url_allowlist, private-IP blocking (block_private_ips, default true), HMAC signature verification (verify_signaturesnow defaults to true, minimum 32-char secret). Redirects re-check destination IPs. Localhost (127.0.0.1, ::1) explicitly allowed for local testing.Workspace boundaries — Symlink escapes (direct, relative, chained, to
/etc) are all blocked. The trust-gate resolves symlinks to their real target before checking boundaries.Context overflow protection —
@readand@includewarn and truncate when files exceedmax_read_bytes/max_include_bytes(512 KB default,Nonefor unlimited).Transitive resolution —
@includeon.mdfiles recursively renders directives up tomax_include_depth(default 5), with cycle detection.Integrity drift — Optional
integrity_checkcaptures file mtimes before render and warns if any file changed mid-resolution.Plugin permission gating — Plugin directives with
executes_shell=Trueare gated behindallow_query_shell, like built-ins. This is a permission gate, not a sandbox: enabled plugin code runs with the current user's permissions. Plugin errors are caught and surfaced as inline warnings.
Edge-case tests cover circular dependencies, race conditions, symlink escapes, and context overflow. These four config knobs live under render: in ~/.perseus/config.yaml.
Perseus reads from a live filesystem — there is no snapshot isolation unless you enable integrity_check. Files can change between directive resolutions. The render output reflects whatever was on disk at the moment each directive resolved, not a single atomic point-in-time. This is the documented tradeoff for a local pre-processor (low overhead by default, check when it matters), but it is not a database transaction.
The O_CREAT | O_EXCL checkpoint locking is atomic on local POSIX filesystems. Network filesystems (NFS < v4, SMB, cloud mounts) may not honor these semantics — if you run a multi-agent relay across machines, use a local disk or a filesystem with verified atomic-create support.
perseus.py is a compiled build artifact produced by scripts/build.py from the modular src/perseus/ tree. It is not hand-maintained as a single file. The source modules are the canonical form.
Research references
The architecture draws on published work about context contracts, governed selection, structured context, and protocol security. Those papers motivate design questions; they do not validate Perseus products or supply reusable Perseus benchmark claims.
Use the public methods desk and claims.json for current Perseus measurements, controls, denominators, and limitations.
How Perseus Works
The first line in this illustrative syntax sample is the directive protocol marker, not the installed package version. Dates, task names, and rendered values below are examples, not current release or test evidence:
@perseus v1.0.8
# Context — @date format="YYYY-MM-DD HH:mm z"
## What's Running
@query "docker ps --format 'table {{.Names}}\t{{.Status}}'"
## Last Session
@waypoint ttl=86400
## Ports
@read .env key="API_PORT" fallback="3001"
## Active Tasks
@agora status=open,in_progress
## Skills Available
@skills flag_stale=true category=devops,github
## Project Memory
@memory focus="recent"Perseus renders this:
# Context — 2026-05-27 08:33 CDT
## What's Running
mongo-dev Up 4 hours
redis-dev Up 4 hours
## Last Session
Checkpoint written: 2026-05-27T08:28
Task: webhook handler — written, pending test run
Next: run pytest tests/test_webhook.py
## Ports
3001
## Active Tasks
| ID | Title | Status | Scope |
|---|---|---|---|
| task-08 | List and Tree Directives | Complete | medium |
| task-12 | Perseus Vault Narrative Memory | Complete | large |
## Skills Available
| Skill | Category | Updated |
|---|---|---|
| hermes-agent | autonomous-ai-agents | 2026-05-20 |
| github-pr-workflow | github | 2026-05-15 |
| docker-stack-auditing ⚠ | devops | 2026-03-01 |
| documentation-audit | software-development | 2026-05-26 |
## Project Memory
### Recent
- [Illustrative] Reviewed a retry classification and shell-input hardening change.
- [Illustrative] Added an MCP integration path for a project workspace.
- [Illustrative] Published an earlier package release.
- [Illustrative] Added plugin directives, macros, hooks, and pipes.The assistant never sees a directive. It sees a rendered snapshot of which skills are available, which tasks are open, and what decisions were recently made; those values should be checked against their source and freshness limits.
Extensibility in Practice
Macros reduce repetition. Pipes compose. Aliases keep things short:
@macro health-check %service%
@query "curl -s http://%service%:8080/health"
@services
- name: %service%
url: http://%service%:8080/health
@endmacro
@q "git log --oneline -5" | @cache ttl=300
@health-check my-apiThe assistant sees resolved output — never a directive.
Full directive reference: docs/DIRECTIVES.md.
Session Waypoints
If an agent session crashes or a connection drops, Waypoints preserve the execution state.
perseus checkpoint \
--task "Implementing webhook integration" \
--status "handler written, pending test run" \
--next "run pytest tests/test_webhook.py" \
--workspace /workspace/myprojectThe next session recovers immediately with perseus recover — workspace-aware, freshness-gated, no re-orientation.
Composition boundary
Perseus Context Engine writes bounded context artifacts and workspace checkpoints. Other systems can read those files to coordinate work, but the Context Engine is not an orchestration platform and the repository does not claim an enterprise deployment from that composition pattern.
Architecture
operator-authored context source
|
v
Perseus Context Engine
- validates enabled directives
- resolves allowed local sources
- gates optional shell and network operations
- emits bounded markdown plus diagnostics
|
+--> compatible assistant host
+--> optional Perseus Vault recall
+--> optional Perseus Ledger evidence recordPerseus Vault and Perseus Ledger remain separate components. Extensions, hooks, custom directives, and external service checks execute only when the operator configures them; they inherit the current user's permissions and can change the local-only data boundary.
Tiered Context (Progressive Disclosure)
Not every question needs the full environment injected. A "what's 2+2?" shouldn't pull in Docker health checks, skill listings, and session digests. Perseus now ships tiered context rendering — the agent is the RAG.
perseus render .perseus/context.md --tier 1 # core context (~12 directives, lean)
perseus render .perseus/context.md --tier 2 # + services, skills, sessions
perseus render .perseus/context.md # everything (backward compatible)Three tiers, assigned per directive in the registry:
Tier | Name | What goes here |
1 | Always | Core context — lightweight, always needed ( |
2 | Conditional | Task-specific, heavier ( |
3 | On-Demand | Bulky/expensive — the agent pulls it if needed ( |
Directives above the tier limit are skipped and reported in a Context Manifest:
> 📋 Context Manifest — Tier limit: 1
>
> • @services (Tier 2 / Conditional) — Health-check listed services
> • @skills (Tier 2 / Conditional) — List available skills
> • @query (Tier 3 / On-Demand) — Run a shell command and embed stdout
>
> Re-run with `perseus render --tier 2` for conditional context,
> or `--tier 3` for full context on demand.Template authors can override per-instance with @tier:N:
@services @tier:1 # Always resolve this block, even though @services defaults to Tier 2
docker
nginx
@endSet render.default_tier: 1 in ~/.perseus/config.yaml to make lean context the default for all renders. No embedding model, no LLM routing — one integer comparison per directive gates resolution. The agent sees what's available and can pull it on demand.
Prompt-Size Forensics (perseus prompt-size + @budget)
Context is the scarcest resource in agent systems — and it's usually spent blind. perseus prompt-size renders a context and shows exactly where every byte went, attributed per directive, with a static-vs-dynamic split:
perseus prompt-size .perseus/context.md # human table, largest offenders first
perseus prompt-size .perseus/context.md --json # stable, deterministic JSON for CI diffing
perseus prompt-size .perseus/context.md --since HEAD~5 # per-directive budget delta vs a git refperseus prompt-size: context.md (tier 3)
total: 5950 bytes, 2270 tokens [tiktoken:cl100k_base — exact]
split: static 43 B / cacheable 45 B / volatile 5862 B (attributed 5907 + static 43 = 5950 — exact)
Per directive (largest first):
5862 B 2249 tok 98.52% [ volatile] @env PATH line 7
45 B 9 tok 0.76% [cacheable] @include "sub.md" line 8Byte-exact accounting — per-directive bytes + static template bytes sum to the rendered total with no unattributed remainder (the
accounting.exactfield asserts this in--json).Tokenizer-aware — real BPE counts via
tiktoken(cl100k_base) when it happens to be installed (labeledexact); otherwise a deterministic offline heuristic clearly labeledestimate. Never a network call.Static vs. dynamic split — see how much of the render is a cacheable prefix vs. per-render volatility (
@env,@date,@query).--since <git-ref>diff mode — renders the file's content at the ref (viagit show, offline) and reports which directive's contribution grew, so "someone added an@includethat doubled the prompt" is caught in review.
Pair it with a @budget declaration in the source to gate context bloat in CI:
@perseus
@budget max=8000 strict forensic
...perseus prompt-size checks every @budget after the render: under budget passes silently; over budget warns with the per-directive offender breakdown — or exits non-zero when the declaration says strict (or the CLI is invoked with --strict). forensic expands the overflow report to the full per-directive table plus the static/cacheable/volatile split. The directive itself renders as empty text, so it costs nothing in the context it guards.
Scope contract: @budget declarations are read from the top-level source text before conditionals are evaluated — top-level only. A @budget inside an @include'd file is not enforced (prompt-size warns and reports it under included_budgets in --json); a @budget inside a false @if branch is still enforced, because the scan is text-level. In --json output, static.tokens is derived (total − Σ per-directive tokens, clamped at 0 and flagged tokens_derived) — the byte accounting is the measured, exact invariant.
Directive Aliases
Config-driven shorthand — single-pass, no recursive expansion:
# ~/.perseus/config.yaml
directives:
aliases:
"@q": "@query"
"@svc": "@services"
"@stale-skills": "@skills flag_stale=true category=all"Pre-defined aliases: @q→@query, @r→@read, @svc→@services, @mb→@memory,
@ag→@agora, @wp→@waypoint, @sess→@session. Config aliases override them.
Custom Schema Validators
Plugin validators for domain-specific schemas:
@query "cat endpoints.yaml" schema="plugin:endpoint_list"Validator modules in ~/.perseus/validators/ export a validate(value, schema_def)
function returning (valid: bool, message: str).
Event Webhooks
POST render lifecycle events to an external URL with optional HMAC-SHA256 signing:
webhooks:
enabled: true
url: "https://hooks.example.com/perseus-events"
secret: "your-hmac-key"
events:
- on_render_start
- on_render_complete
- on_directive_errorSpeculative Prefetch (@speculate)
Speculative execution for context assembly (#607): a transparent Markov / frequency predictor over your recorded waypoint (checkpoint) transitions predicts the next task, and Perseus pre-warms that task's context after the current render completes — so the first render of the next turn is already hot. No ML dependencies; the predictor interface is pluggable for a future LLM backend.
Off by default. Enable it in config and opt a source in with the pragma:
# ~/.perseus/config.yaml
speculate:
enabled: true # master gate — default false (zero behavior change)
k: 3 # top-k predicted next intents to consider
budget_tokens: 2000 # cumulative token budget per speculation pass
confidence_threshold: 0.30 # only warm predictions at/above this probability
intents: # intent pattern (fnmatch) → prefetch directive line(s)
"deploy*":
- '@read "runbook.md" @cache ttl=300'
"review*":
- '@query "git log --oneline -10" @cache ttl=120'@perseus v1
Your context here...
@speculate k=3 budget=2000The @speculate pragma never appears in rendered output; k= / budget=
override the config for that source. Speculation is synchronous-after-render:
it can never delay or interleave with the live render, and a failure inside
speculation never breaks a render.
Cache safety: speculative warms run through the same prefetch executor and use the exact key derivation the renderer reads (workspace-scoped base key + dependency fingerprint), so a speculative entry is just an early warm — it can never shadow or poison real reads. On the real turn the renderer re-derives the fingerprint and TTL as usual, so a wrong prediction costs nothing.
Observability:
$ perseus explain --speculate
Speculate: enabled=true backend=markov k=3 threshold=0.30
History: 42 intent(s); current: review PR
Predicted next intents:
1. deploy staging p=0.67 [1 candidate(s), 1 warm]
- warm: @read "runbook.md" @cache ttl=300
Past speculation: hits=12 misses=4 hit_rate=0.75 (settled=16)Prediction outcomes (hit/miss per settled prediction, budget spend, warm
results) persist to a workspace-keyed stats file
(<cache_dir>/speculate_stats-<workspace_hash>.json, atomic writes) with a
documented shape — a future @bandit ledger integration can consume it as a
value signal.
Context profiles and durable-memory boundary
Perseus Context Engine resolves and shapes the active working context. Perseus Vault owns durable-memory persistence and recall. The default on_demand profile adds a retrieval pointer instead of preloading a memory dump; relevant and legacy always modes require explicit configuration.
profiles:
default: { context_target: 200000, memory: on_demand }An explicit @memory directive is a code-level compatibility interface for requesting recalled memory. It is not a separate product. Recalled material can be stale or incomplete, so live workspace state and operator policy remain authoritative.
To disable automatic recall pointers, set perseus_vault.auto_inject: false. See the setup guide and the versioned Vault API reference for the current boundary.
Full Documentation
Document | What it covers |
Every command and flag | |
The definitive setup, config, automation, and troubleshooting guide | |
All directives with modifiers and examples | |
Generate context files for Hermes | |
Wire Perseus to any AI assistant | |
Docker and compose deployment | |
5-minute setup walkthrough | |
Guarantees, trust model, permissions | |
Dev setup, test suite, commit conventions | |
End-to-end workflow recipes | |
Real-world usage patterns | |
Benchmark methodology and results | |
JSON contracts for agent consumption | |
Current deployment guidance with pinned versions | |
Trust model, workspace boundaries, secrets | |
Living roadmap (live |
Defense and Government
Perseus Computing LLC can contribute current context, governed memory, and reviewable evidence around a prime-led or program-owned workflow. It does not replace the mission system, qualified integrator, approving authority, or accreditation process.
Record | Current public scope |
Company identifiers | UEI |
Assessment evidence | Owner-held NIST SP 800-171 Basic and CMMC Level 2 self-assessments scored 110 for their recorded enclave scope. These are company self-assessments, not independent assessments or C3PAO certification. |
JCP / DD2345 | Certification |
Software publication | MIT-licensed source, SBOM, and security materials are published. Publication does not create Government approval or accreditation. |
Deployment boundary | Local CLI and stdio paths do not require a Perseus-hosted service. A program or integrator remains responsible for packaging, hardening, keys, networks, data handling, testing, and authorization. |
Review the bounded Defense and Government page or contact Perseus Computing LLC at perseus@perseus.observer.
IP & Legal
Patent Pending. A provisional patent application covering Perseus's resolve-before-context pipeline architecture is on file with the USPTO. See docs/ip/ for the public IP portfolio, including technical disclosures and evidence exhibits.
PERSEUS™ identifies software published by Perseus Computing LLC. Internal subsystem names are compatibility identifiers, not separate public product lines.
Privacy Policy
Perseus Context Engine has a local default render path. Authored network directives, optional transports, and external integrations change that boundary.
Data Collection
The default local renderer does not send Perseus telemetry or require a Perseus-hosted service.
Operators choose the sources, output paths, network directives, and integrations they enable.
Data Usage & Storage
Perseus reads project files, git state, and environment variables to resolve context directives.
On the default local path, project data remains in the operator environment. Authored HTTP directives or external integrations can send operator-selected data to their configured destination.
When paired with Perseus Vault for persistent memory, memory data is stored locally per the Perseus Vault privacy policy.
Third-Party Sharing
The local default path does not share project data with Perseus Computing LLC.
Optional MCP servers, HTTP directives, package registries, and other external services apply their own data and transport policies when the operator enables them.
Data Retention
Perseus does not retain data independently. Rendered context is ephemeral and regenerated on each invocation.
For persistent memory, see Perseus Vault's privacy policy.
Contact
Email: perseus@perseus.observer
GitHub: Perseus-Computing-LLC/perseus
License
License: MIT — see LICENSE. This license does not include a patent grant; patent rights are reserved separately.
Third-party notices: see NOTICE.
Available Tools
33 toolsperseus_agoraARead-only
List tasks from the project task board (tasks/*.md files). Use to see what is open, in progress, or completed. Filter by status. Read-only; returns task array with id, title, status, scope.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Filter tasks by status: open, in_progress, completed, cancelled |
Output Schema
| Name | Required | Description |
|---|---|---|
| tasks | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description explicitly marks as read-only and specifies return fields (id, title, status, scope). Annotations already indicate readOnlyHint, but description adds return structure detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no wasted words. Front-loaded with primary action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers source, filtering, and return format. With output schema present, description adequately compresses key information for a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already covers status parameter with description listing values. Description reinforces 'Filter by status' but adds minimal new information beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it lists tasks from project task board (tasks/*.md files). The verb 'list' and specific resource distinguish it from generic list tools like perseus_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Indicates usage for seeing task statuses (open, in progress, completed) and filtering by status. Does not explicitly exclude other tools, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_auto_skillARead-only
Instruct the agent to load a specific skill before starting work. Use at the top of context documents to enforce critical hygiene skills (e.g., memory-hygiene, agent-safety). Renders as a mandatory instruction block. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| skill | No | Name of the skill the agent should load before beginning work |
Output Schema
| Name | Required | Description |
|---|---|---|
| rendered | No | Resolved directive output as markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that the tool renders as a mandatory instruction block, adding context beyond the readOnlyHint annotation. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences front-loaded with purpose, then usage guidance, then behavioral note. No redundant text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Description adequately covers purpose and usage for this simple tool. Even with output schema present, no need to elaborate further.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema provides full parameter description. Tool description adds minimal value with examples but doesn't specify syntax or format beyond schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool instructs the agent to load a specific skill. Uses specific verb 'load' and resource 'skill'. Distinguishes effectively from sibling 'perseus_skills' which likely lists skills.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises use at the top of context documents for enforcing critical hygiene skills, with concrete examples. Lacks explicit when-not-to-use guidance, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_budgetARead-only
Declare a token budget for the rendered context (renders as empty text). Enforced by perseus prompt-size: an over-budget render warns — or fails with strict — with a per-directive byte/token breakdown (#606). Declarations are read from source text before conditionals are evaluated; top-level only — a @budget inside an @include'd file is not enforced (prompt-size warns) (#626). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| max | No | Value for max parameter | |
| strict | No | Value for strict parameter | |
| forensic | No | Value for forensic parameter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses read-only behavior (matches annotation), renders as empty text, enforcement details, and parsing constraints. Adds context beyond the `readOnlyHint` annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with purpose, and includes relevant enforcement and constraint details without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (3 optional params, no output schema, readOnlyHint), the description covers purpose, enforcement, and placement rules. Does not mention return value, but 'renders as empty text' suffices.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% but parameter descriptions are minimal ('Value for max parameter'). The tool description clarifies that 'strict' causes failure, but does not explain 'max' or 'forensic'. Baseline is 3 due to high coverage, with marginal added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'declare' and resource 'token budget', and explains enforcement by `perseus prompt-size`. It implicitly distinguishes from sibling tools like `perseus_prompt` by focusing on budget declaration, but does not explicitly differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides specific guidelines: declarations are read before conditionals, top-level only, and not enforced inside included files (with a warning). Lacks explicit when-not or alternatives, but the constraints are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_captureARead-onlyDestructive
Write recent session checkpoints to Perseus Vault as durable memories (#713) — the write side of the memory loop, symmetric to @memory recall. Idempotent per checkpoint (re-render upserts, never duplicates). Use at session boundaries so lessons persist immediately instead of waiting for a scheduled harvest. WRITES to the vault; never cached.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Value for limit parameter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states the tool 'WRITES to the vault', which contradicts the readOnlyHint annotation indicating it is read-only. This is a serious inconsistency that undermines transparency. The description also claims idempotence and no caching, but the contradiction dominates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose. It uses clear language and avoids unnecessary words, with each sentence adding value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, usage, and some behavioral traits, but the annotation contradiction significantly misinforms. There is no output schema, and return values are not described. The tool's complexity is low, but the contradiction reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not provide any additional meaning for the single 'limit' parameter beyond what the schema already states. The schema description is minimal, but the tool description adds no further context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as the write side of the memory loop, specifying it writes session checkpoints to Perseus Vault. It distinguishes itself from the symmetric 'memory recall' tool, providing a clear verb+resource description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises using the tool at session boundaries for immediate persistence, offering practical guidance. However, it does not explicitly state when not to use it or list alternatives beyond mentioning the symmetric recall tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_context_diffARead-onlyDestructive
Render a compact 'Since last session' delta (#714): git branch/commits, Agora task-board changes, new inbox messages, new checkpoints, and new vault session memories since the last recorded snapshot. Use at the top of a context document so the assistant spends zero turns re-orienting on unchanged state. Maintains its own per-workspace snapshot (refresh debounced by render.context_diff_min_age_s); reset=true forces a new baseline. Never cached.
| Name | Required | Description | Default |
|---|---|---|---|
| reset | No | Value for reset parameter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description claims read-only operation ('Render a compact delta', 'Never cached'), but annotations declare destructiveHint=true, creating a direct contradiction. Additionally, description mentions snapshot maintenance and debounce, but the contradiction overrides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no wasted words. Front-loaded with main purpose, followed by usage context and behavioral details. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Describes output content in detail (git, task-board, inbox, etc.), mentions snapshot and debounce behavior. No output schema, but description compensates reasonably. Could mention default state or what happens with no changes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description for 'reset' is vague ('Value for reset parameter'). Description adds meaning: 'reset=true forces a new baseline,' clarifying its effect. Schema coverage is 100% but description enhances understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it renders a compact 'Since last session' delta and lists specific items included (git branch/commits, Agora task-board changes, new inbox messages, etc.). It distinguishes itself from sibling tools by focusing on session changes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises to use at the top of a context document to avoid re-orientation. Mentions reset parameter for baseline reset. Lacks explicit when-not or alternative tool comparisons, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_dateARead-only
Current date/time
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Date format using tokens YYYY, MM, DD, HH, mm, ss, z (default: YYYY-MM-DD HH:mm:ss). strftime-style %Y %m %d %H %M %S tokens are also accepted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| unix | No | Unix epoch seconds |
| iso8601 | No | ISO-8601 formatted timestamp |
| datetime | No | Current date/time string |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true indicates a safe read operation, and the description adds context by specifying the information returned (current date/time). No contradictions. The description adds value beyond annotations by clarifying the exact output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with one short sentence. It is front-loaded and contains no extraneous information. However, it could be slightly more descriptive (e.g., including 'Returns the current date and time') without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with a single optional parameter and an output schema present, the description provides sufficient context to understand the tool's basic function. No additional details are necessary for correct invocation given the richness of the schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the only parameter 'format' having a detailed description. The tool description does not add additional meaning about the parameter beyond what the schema already provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Current date/time' clearly indicates the tool returns the current date and time. It is a specific verb+resource (get current date/time), and there are no sibling tools with similar functionality, so differentiation is not needed. A slight improvement would be adding a verb like 'Returns'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives. No usage context, prerequisites, or exclusions are mentioned, which is a notable gap even for a simple tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_driftARead-only
Detect drift between predicted and actual tool usage patterns via the Pythia oracle. Use when tool behavior seems off or after config changes. For workspace hygiene checks, prefer perseus_health. Read-only; returns a markdown drift report.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Arguments for @drift directive |
Output Schema
| Name | Required | Description |
|---|---|---|
| rendered | No | Resolved directive output as markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true; description adds that it is 'Read-only' and 'returns a markdown drift report,' providing output format information beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no wasted words. Information is front-loaded: purpose, usage, alternative, behavior, output type. Compact and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one optional parameter and an output schema, the description adequately covers purpose, usage, behavior, and output format. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter 'args,' with description 'Arguments for @drift directive.' The tool description does not add further semantics beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Detect drift between predicted and actual tool usage patterns via the Pythia oracle,' specifying the action and resource. It distinguishes from sibling tool perseus_health by noting a different use case for workspace hygiene checks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance on when to use ('when tool behavior seems off or after config changes') and when not to use ('For workspace hygiene checks, prefer perseus_health'), providing clear context and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_envCRead-only
Embed environment variable
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | JSON Schema to validate the env var value against | |
| fallback | No | Value to use when the environment variable is not set | |
| required | No | If 'true', render fails when the variable is unset |
Output Schema
| Name | Required | Description |
|---|---|---|
| value | No | Resolved value or fallback |
| source | No | Where the value was resolved from |
| variable | No | Environment variable name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint, but description adds no behavioral context beyond that; does not disclose side effects, permissions, or return behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise (three words) but at the cost of informativeness; too terse to be useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description lacks context about tool behavior and integration with other tools; minimal for a tool with many siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3; description does not add any extra meaning over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Embed environment variable' is vague; it does not clearly state what the tool does or how it differs from siblings like perseus_read or perseus_get_context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives; no when-not or exclusions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_focusADestructive
The global-workspace tier: a small, capacity-bounded (default 32), salience-ranked set of items Perseus broadcasts into context — the shared 'what I'm working on now' set for the agent and its subagents. With no args, renders the current working set. add=/pin= admit items; the lowest-salience non-pinned items are evicted when it overflows. Distinct from long-term recall (@mimir/@memory): bounded and actively maintained, not unbounded memory.
| Name | Required | Description | Default |
|---|---|---|---|
| add | No | Text of an item to admit into the workspace (bounded, salience-ranked) | |
| pin | No | Text of an item to pin (floated to top, never evicted) | |
| drop | No | Text of an item to remove from the workspace | |
| clear | No | If 'true', remove all items from the workspace | |
| touch | No | Text of an existing item to reinforce (bump frequency/recency) | |
| unpin | No | Text of a pinned item to unpin | |
| source | No | Optional label for where a newly added item came from | |
| weight | No | Base salience weight for a newly added item (default 1.0) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations set destructiveHint=true, and the description adds eviction behavior ('lowest-salience non-pinned items are evicted when it overflows'), default capacity (32), and pinning semantics, providing rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded with the core concept, but it is slightly long. Every sentence adds value, though it could be more concise without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters and no output schema, the description covers the workspace model, capacity, eviction, and pinning. It distinguishes from memory tools but omits details on some operations (e.g., drop, clear) which are left to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, each parameter is already explained in the schema. The description adds general workspace behavior but does not significantly elaborate on individual parameter usage beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is a bounded, salience-ranked workspace. It specifies the verb 'renders' for no args and 'add/pin admit items', and explicitly distinguishes from long-term memory tools like @mimir/@memory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (no args for viewing, add/pin for insertion) and contrasts with alternatives: 'Distinct from long-term recall... bounded and actively maintained, not unbounded memory.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_get_contextARead-only
Return the full rendered Perseus context for the workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format: markdown or json (default: markdown) |
Output Schema
| Name | Required | Description |
|---|---|---|
| format | No | Output format used |
| rendered | No | Full rendered context |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description is consistent with readOnlyHint annotation, indicating no mutation. It adds 'full rendered' to suggest completeness but does not disclose other behavioral traits such as response size or workspace scope restrictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no wasted words. Front-loaded with action and object. Highly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and an output schema, the description fully covers its purpose and behavior. No missing details given the constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage for the single parameter 'format', including a description of values. Description adds no additional meaning beyond the schema, meeting baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Return', resource 'full rendered Perseus context', and scope 'for the workspace'. It distinguishes from siblings by specifying 'context' specifically, which is unique among the sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like perseus_read or perseus_list. No 'when not to use' or context for selection among similar tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_get_healthARead-only
Run Daedalus context-maintenance heuristics — cache health, directive resolution stats, memory integrity check.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| report | No | Detailed health report |
| status | No | Overall health status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation 'readOnlyHint: true' already indicates the tool is safe. The description adds context about the type of heuristics performed (cache, directive, memory) but does not disclose additional behavioral traits beyond the annotation's scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that immediately conveys the action and its scope. Every part is meaningful, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is reasonably complete for a simple health-check tool given zero parameters, annotation coverage, and an existing output schema. However, it lacks any usage guidance, which slightly reduces completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100% (no parameters to document). The description does not need to add parameter semantics, though it could explicitly state that no parameters are required. Baseline for no parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Run') and resource ('Daedalus context-maintenance heuristics') and lists three distinct checks: cache health, directive resolution stats, memory integrity check. This distinguishes it from sibling tools like 'perseus_health', which likely serves a more general health check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is provided on when to use this tool versus alternatives or any conditions for usage. The description only explains what it does without indicating specific scenarios or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_healthARead-only
Audit workspace context health: stale skills, duplicate tasks, oversized output. Use before starting work to catch drift. For deep Daedalus heuristics (cache, directive stats), use perseus_get_health. Read-only; returns status enum and metric counts.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Arguments for @health directive |
Output Schema
| Name | Required | Description |
|---|---|---|
| checks | No | |
| status | No | Overall health: ok, warning, or critical |
| stale_skills | No | Count of skills past freshness threshold |
| duplicate_tasks | No | Count of duplicate task entries |
| oversized_context | No | Whether rendered context exceeds size limits |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true. Description adds 'Read-only; returns status enum and metric counts', consistent with annotations and provides extra context about return type. Minor gap: doesn't detail exact metric names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each with distinct value: purpose, usage guidance, and behavioral note. No redundancy; front-loaded with verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, and behavioral traits adequately. However, the optional parameter lacks explanation beyond schema, and the return format (status enum, metric counts) is mentioned but no example provided. Adequate but not fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description for the only parameter 'args' is minimal ('Arguments for @health directive'). Description adds no extra meaning about what arguments are valid or how to use them. Despite 100% schema coverage, the description fails to enrich parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool audits workspace context health, lists specific items it checks (stale skills, duplicate tasks, oversized output), and distinguishes from sibling perseus_get_health which covers deep heuristics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use before starting work to catch drift' and directs to perseus_get_health for Daedalus heuristics, providing clear when-to-use and when-not-to guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_inboxARead-only
Read agent-to-agent messages from the workspace inbox. Use to check for coordination messages from other agents. Filter to unread only. Read-only; returns message array with read/unread status.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of messages to return | |
| unread | No | If 'true', show only unread messages |
Output Schema
| Name | Required | Description |
|---|---|---|
| messages | No | |
| unread_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true; the description adds context about the message source (workspace inbox) and return format (message array with read/unread status), going beyond the annotation without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, each earning its place: purpose, usage, and key features. It is front-loaded and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with two optional parameters and an output schema present, the description covers all essential behavioral details: read-only, message source, filter capability, and return shape. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters have full schema descriptions (100% coverage). The description only reinforces the unread parameter with 'Filter to unread only', adding no new meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly identifies the tool as reading agent-to-agent messages from the workspace inbox, with a specific use case of checking coordination messages. It distinguishes from siblings by specifying the source (inbox) and context (agent-to-agent).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly suggests using the tool to check coordination messages and mentions filtering to unread. While it doesn't specify when not to use it or mention alternatives, the context of sibling tool names like 'perseus_read' provides implicit differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_includeARead-only
Include and render another Perseus source file, recursively resolving its directives. Use to compose context from multiple files or share common sections across workspaces. Bound a growing file with last=N (final N lines) or since=14d/2w/24h (recent dated sections only). Use mode=reference (or render.host_loaded_paths) to emit a one-line pointer instead of inlining files the host agent already loads natively. Read-only; resolved directives inherit the parent configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| last | No | Keep only the final N lines of the file (bounds a growing log) | |
| mode | No | Value for mode parameter | |
| path | Yes | File path to include and render (relative to workspace root) | |
| since | No | Keep only dated sections within a window, e.g. 14d, 2w, 24h |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | No | Included file path |
| rendered | No | Rendered included file content |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and description confirms read-only, adding behavioral details like recursive resolution, inheritance of parent configuration, and parameter effects (last, since). Could expand on error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no fluff: first states core purpose, second gives use cases with parameters, third explains mode. Front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description is mostly complete for a read-only tool with good annotations. Could mention error behavior or limitations, but sufficient for selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters; description adds contextual meaning (e.g., 'bounds a growing log' for last, 'recent dated sections' for since) beyond schema descriptions, though not exhaustive for mode.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool includes and renders another Perseus source file with recursive directive resolution, and distinguishes from siblings by mentioning alternative modes (mode=reference) for files the host agent already loads natively.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use (compose context, share common sections, bound growing files) and when not to (use mode=reference for host-loaded files), addressing alternatives directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_listARead-only
List directory contents or structured data. Use to discover files before reading with perseus_read. Supports sorting by name, modified time, or size. Read-only; for hierarchical view, prefer perseus_tree.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Directory path to list (default: workspace root) | |
| sort | No | Value for sort parameter | |
| limit | No | Value for limit parameter |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| entries | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces 'Read-only'. It adds context by stating 'Supports sorting by name, modified time, or size', which goes beyond the schema's vague description for the sort parameter. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. It front-loads the purpose and then adds usage guidance and features in a logical order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and 100% schema coverage, the description covers purpose, usage, sorting behavior, and read-only nature. It could be more specific about what 'structured data' refers to, but overall it is sufficiently complete for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds value by clarifying the sort parameter's possible values ('name, modified time, or size'), which the schema only describes as 'Value for sort parameter'. The path parameter is also implied in the first sentence.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List directory contents or structured data' which is a specific verb and resource. It distinguishes from sibling tools by explicitly mentioning 'Use to discover files before reading with perseus_read' and 'for hierarchical view, prefer perseus_tree.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('before reading with perseus_read') and when to use an alternative ('for hierarchical view, prefer perseus_tree'). It also states it is read-only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_masonARead-only
Query the Mason code architecture concept map to find which files implement a feature. Use before editing code to understand where changes should go. Read-only; returns concept map and mapped file list.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Feature or filename to look up in the Mason code architecture map |
Output Schema
| Name | Required | Description |
|---|---|---|
| files | No | Mapped source files |
| concept_map | No | Mason code architecture concept map |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses read-only behavior and notes returns ('returns concept map and mapped file list'), complementing the readOnlyHint annotation. No contradictions or omissions beyond what annotations already provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no wasted words. The first sentence states the purpose, the second provides usage guidance and behavioral info, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a query tool with one parameter and an output schema, the description covers the essential purpose, usage context, behavioral trait (read-only), and return type, making it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not add parameter details beyond the schema's description of the 'query' parameter, which is adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Query the Mason code architecture concept map to find which files implement a feature.' It uses a specific verb ('Query') and resource, differentiating it from sibling tools by focusing on code architecture.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises to 'Use before editing code to understand where changes should go,' providing clear context. While it doesn't mention when not to use or alternatives, the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_memoryARead-only
Search LOCAL project memory (FTS5, zero-network) for past decisions and architecture notes. Use for in-workspace recall. For cross-session persistent facts, use perseus_mneme instead. Read-only; returns results array with mode and count.
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | Number of results to return (default: 5) | |
| mode | No | Query mode: search, narrative, or federation | |
| type | No | Memory type filter | |
| alias | No | Workspace alias for federation targeting | |
| focus | No | Time focus: recent, today, week, or all | |
| force | No | Value for force parameter | |
| limit | No | Value for limit parameter | |
| query | No | Search query string for BM25 / hybrid recall | |
| scope | No | Memory scope filter: working, core, or all | |
| render | No | If 'true', render matched memories as markdown | |
| project | No | Value for project parameter | |
| workspace | No | Target workspace path for scoped queries | |
| federation | No | Enable cross-workspace federation | |
| max_tokens | No | Value for max_tokens parameter | |
| include_federation | No | Include federation results in output |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | Query mode used |
| count | No | Number of results returned |
| results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces 'Read-only' and adds context about the return format ('returns results array with mode and count'). This goes beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences covering purpose, usage guidelines, and behavioral notes. Every word adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 15 parameters (all optional) and an output schema, the description adequately covers the core functionality, usage context, and behavioral aspects. It could provide more detail on common parameter combinations but remains sufficiently complete for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all 15 parameters described in the input schema. The description adds no additional semantics beyond what the schema provides, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches LOCAL project memory with specific technical details (FTS5, zero-network) for past decisions and architecture notes. It distinguishes itself by emphasizing 'in-workspace recall' and contrasts with sibling perseus_mneme for cross-session facts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises using this tool for in-workspace recall and directs to perseus_mneme for cross-session persistent facts, providing clear when-to-use and when-not-to-use guidance with a named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_mimirARead-only
Query the EXTERNAL Mneme memory server for cross-session, curated facts that survive across workspaces. Use for long-lived knowledge (bug patterns, design decisions). For fast local recall, prefer perseus_memory. Read-only; falls back to local FTS5 if Mneme is unreachable. (Also exposed as perseus_mneme; perseus_mimir is a deprecated alias.)
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | Number of results to return (default: 5) | |
| type | No | Memory type filter | |
| query | No | BM25 FTS5 search query for persistent memory recall | |
| scope | No | Memory scope filter |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| query | No | |
| results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds 'Read-only' which is consistent. It also discloses behavioral traits beyond annotations: 'falls back to local FTS5 if Mneme is unreachable' and notes the deprecated alias. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and contains no extraneous information. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has an output schema, the description does not need to explain return values. It covers purpose, usage guidelines, fallback behavior, alias information, and is complete for a read-only query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 4 parameters. The description does not add parameter-specific details beyond what the schema provides, but it does provide context for the query parameter ('BM25 FTS5 search query') which is consistent. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Query the EXTERNAL Mneme memory server for cross-session, curated facts that survive across workspaces.' It uses a specific verb ('Query') and resource ('EXTERNAL Mneme memory server'), and distinguishes from sibling tool perseus_memory by noting the different use case (long-lived knowledge vs. fast local recall).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use the tool ('Use for long-lived knowledge') and when to prefer an alternative ('For fast local recall, prefer perseus_memory'). It also mentions fallback behavior ('falls back to local FTS5 if Mneme is unreachable').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_mnemeARead-only
Query the EXTERNAL Mneme memory server for cross-session, curated facts that survive across workspaces. Use for long-lived knowledge (bug patterns, design decisions). For fast local recall, prefer perseus_memory. Read-only; falls back to local FTS5 if Mneme is unreachable. This is the primary name for this tool; perseus_mimir is a deprecated alias kept for backward compatibility.
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | Number of results to return (default: 5) | |
| type | No | Memory type filter | |
| query | No | BM25 FTS5 search query for persistent memory recall | |
| scope | No | Memory scope filter |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| query | No | |
| results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond annotations: it is read-only (consistent with readOnlyHint), falls back to local FTS5 if Mneme server is unreachable, and clarifies that perseus_mimir is a deprecated alias. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each serving a distinct purpose: purpose, usage, behavior, naming. Front-loaded with core functionality. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 optional params, output schema exists), the description covers purpose, usage guidelines, safety (read-only), fallback, and naming. It contrasts with a sibling tool, explains the type of knowledge stored, and mentions data source. No gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description does not elaborate on individual parameters, but the overall context (cross-session facts, persistent memory) helps understand the query parameter's purpose. However, it doesn't add meaning beyond what the schema already provides for each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool queries an external Mneme memory server for cross-session, curated facts. It uses specific verbs ('Query') and resources ('Mneme memory server'), and distinguishes itself from the sibling tool perseus_memory, which is for fast local recall.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('long-lived knowledge (bug patterns, design decisions)') and when to prefer an alternative ('For fast local recall, prefer perseus_memory'). Also notes fallback behavior and naming priority.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_perseusARead-only
Fetch rendered context from a remote Perseus instance by URL. Use to pull live workspace state from another machine or container. Read-only; caches results — re-fetch when remote state may have changed.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL of the remote Perseus instance to fetch context from |
Output Schema
| Name | Required | Description |
|---|---|---|
| rendered | No | Remote Perseus context as markdown |
| source_url | No | URL of the remote Perseus instance |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true. The description adds value by disclosing caching behavior ('caches results — re-fetch when remote state may have changed'), which is not in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences efficiently convey purpose and usage. No wasted words; front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter, an output schema (present), and readOnlyHint annotation, the description covers key aspects. The caching note adds important context for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter 'url', which has a clear description. The tool description also mentions 'by URL', reinforcing the parameter's purpose. No additional semantic depth needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Fetch' and the resource 'rendered context from a remote Perseus instance by URL'. It implies a specific use case distinct from sibling tools that likely operate locally, but does not explicitly differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use ('pull live workspace state from another machine or container') and provides a caching note with re-fetch advice. It lacks explicit 'when not to use' or alternative tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_profileARead-only
Select the per-model context profile for this document (#608): sets the context target and memory posture (on_demand/relevant/always) used by the automatic memory injection layer. Use at the top of a context document, e.g. @profile claude-sonnet-4-6. Unknown names fall back to the default profile. First-wins (#627): with multiple @profile lines only the first non-fenced one governs — later banners are marked ignored, and @profile inside a code fence is documentation, never a directive. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Model name (or context-window class) whose profile to resolve, e.g. claude-sonnet-4-6; unknown names fall back to default |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnlyHint annotation by disclosing specific traits: the first-wins rule with multiple @profile lines, ignored later banners, fallback to default for unknown names, and that @profile inside a code fence is documentation. This adds significant behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: it starts with the core purpose, provides a usage example, then lists behavioral rules. Every sentence adds necessary information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description fully covers the tool's behavior for a simple configuration tool. Given the single optional parameter and the presence of annotations, the description completes the picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (100% for the single parameter 'model'). The description adds value by clarifying that the model name can be a context-window class and reiterates the fallback behavior, though it largely echoes the schema's description. The extra context warrants a score above the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool selects a per-model context profile for a document, specifying it sets the context target and memory posture. It uses specific verbs ('selects', 'sets') and identifies the exact resource (per-model context profile), making it distinct from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs to use at the top of a context document with an example (@profile claude-sonnet-4-6). It also provides important behavioral notes like the first-wins rule and fallback behavior. While it doesn't explicitly state when not to use it, the context and example are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_promptARead-only
Define a system prompt block that instructs the AI assistant about how to use the rendered context. Use to set behavioral rules, memory hygiene gates, or context interpretation guidelines. Read-only; rendered as-is into the output.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Arguments for @prompt directive |
Output Schema
| Name | Required | Description |
|---|---|---|
| rendered | No | System prompt block content |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond the readOnlyHint annotation by stating 'Read-only; rendered as-is into the output', which clarifies the behavioral impact. This extra context on how the prompt is treated and its output behavior justifies a score above 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each serving a distinct purpose: defining the tool, giving usage examples, and stating behavioral traits. No redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, read-only, with output schema), the description covers all aspects: purpose, usage, behavior, and output. It is complete for effective selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single optional parameter 'args', and the description does not add extra meaning beyond that. The baseline of 3 applies as the schema already documents the parameter adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool defines a system prompt block for instructing the AI assistant, specifying the resource ('system prompt block') and the action ('define'). It distinguishes from siblings by focusing on prompt definition, and gives concrete examples of use (behavioral rules, memory hygiene gates).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use to set behavioral rules, memory hygiene gates, or context interpretation guidelines', providing clear context for when to use. However, it does not mention when not to use or explicitly contrast with sibling tools, preventing a score of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_readARead-only
Read and embed file contents into the rendered context. Use to inject config values, environment files, or any text file. Can extract specific keys from structured files. Read-only; use perseus_list or perseus_tree to browse before reading.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | If reading a config file, extract this key only | |
| path | Yes | File path to read (relative to workspace root) | |
| schema | No | JSON Schema to validate file contents against | |
| fallback | No | Value to use when the file or key is not found |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | No | File path read |
| content | No | File contents |
| truncated | No | Whether content was truncated |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. Description adds useful context about embedding file contents into rendered context and extracting specific keys from structured files, which goes beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two clear sentences with no waste. Purpose, usage, and sibling differentiation are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters and output schema exists, the description covers purpose, usage, and behavioral traits adequately. No need to mention return values due to output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description mentions 'extract specific keys' which relates to the key parameter, but adds minimal extra meaning beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Read and embed file contents' with a specific verb and resource. It distinguishes from sibling tools like perseus_list and perseus_tree by noting they are for browsing before reading.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'use to inject config values, environment files, or any text file' and advises using perseus_list/perseus_tree to browse before reading, providing clear when-to-use and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_researchA
Search an EXTERNAL paper-search MCP server (BGPT by default) for scientific literature and inject per-paper Methods/Results blocks. Use to ground claims in published studies. Self-gates on research.enabled; degrades gracefully when the provider is unreachable. Read-only; speaks JSON-RPC over stdio (no shell).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Value for limit parameter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the behavioral disclosure burden. It reveals the tool is read-only, degrades gracefully when unreachable, and communicates via JSON-RPC over stdio without a shell. This transparency is good, though rate limits or authentication details are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with three sentences, each providing essential information. It is front-loaded with the primary function and avoids unnecessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main functionality, external dependency, graceful degradation, and communication protocol. However, it does not detail the return value structure, which is somewhat compensated by mentioning 'inject per-paper Methods/Results blocks.' Overall, it is mostly complete for a read-only search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'limit' has a schema description that is vague ('Value for limit parameter'). The tool description does not add further semantic meaning for this parameter. With 100% schema coverage, baseline is 3, and the description adds no extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches an external paper-search MCP server for scientific literature and injects per-paper Methods/Results blocks. It distinguishes itself from sibling tools by specifying it is for external search and grounding claims in published studies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises using the tool to ground claims in published studies, providing clear context. It mentions self-gating on research.enabled and graceful degradation, but does not explicitly exclude alternative tools or scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_servicesADestructive
Health-check all services listed in the workspace context (HTTP endpoints, Docker containers, shell commands). Use to verify the environment is healthy before starting work. May make network calls and execute shell commands per service definition — side effects depend on configured checks.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Arguments for @services directive |
Output Schema
| Name | Required | Description |
|---|---|---|
| services | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already include 'destructiveHint: true', and the description adds that the tool may make network calls and execute shell commands, with side effects depending on configuration. This goes beyond annotations by specifying the nature of destructive actions. However, it does not detail what exactly could be destroyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the purpose, and every sentence provides necessary information without redundancy. It is highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description does not need to explain return values. It covers the types of services checked and side effects. Some additional details about how the 'args' parameter influences the check could improve completeness, but it is largely sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one parameter 'args' described as 'Arguments for @services directive'. The description does not add further meaning about this parameter beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose as health-checking all services in the workspace context, mentioning specific service types (HTTP endpoints, Docker containers, shell commands). However, it does not explicitly differentiate from the sibling tool 'perseus_get_health', which might have a similar function, so it is clear but not uniquely distinguished.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Use to verify the environment is healthy before starting work.' It also warns about side effects (network calls, shell commands) and that they depend on configuration. No guidance on when not to use or alternatives, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_sessionARead-only
List recent session digests with task summaries and outcomes. Use to understand what was done recently across sessions. For the single most recent checkpoint, prefer perseus_waypoint. Read-only; returns session array with count.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of recent sessions to include (default: 3) |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| sessions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description reinforcing 'Read-only' is consistent. It adds important behavioral context about return format ('returns session array with count'), which goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: purpose, usage guidance, and behavioral/return info. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (one optional param, output schema exists), the description covers purpose, usage, return format, and sibling alternative. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema description for 'count' is adequate. The tool description does not add any additional parameter semantics beyond what the schema provides, meeting the baseline for this dimension.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'recent session digests with task summaries and outcomes'. It distinguishes itself from sibling tool perseus_waypoint, which is explicitly recommended for a single recent checkpoint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises when to use ('to understand what was done recently across sessions') and when not to use ('prefer perseus_waypoint for single most recent checkpoint'). It also notes read-only nature.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_skillsARead-only
List available skills with descriptions and freshness status. Use to discover what capabilities are installed. Filter by category for smaller output. Read-only; stale skills flagged automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of skills to list | |
| category | No | Filter skills by category (e.g., devops, github) | |
| flag_stale | No | If 'true', mark skills not updated within threshold as stale |
Output Schema
| Name | Required | Description |
|---|---|---|
| skills | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds 'Read-only; stale skills flagged automatically' beyond the annotation's readOnlyHint, providing context about staleness detection. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, no wasted words. Extremely concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 optional parameters and an output schema, the description covers the main functionality. It mentions staleness and filtering, though limit and flag_stale specifics are left to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all three parameters with descriptions. The description mentions filtering by category but does not add meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('available skills') and adds detail about descriptions and freshness status. While it does not explicitly distinguish from sibling tools like 'perseus_list', the unique resource and sibling context make it clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use to discover what capabilities are installed' and suggests filtering by category. It does not mention when to avoid using this tool, but the read-only nature is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_tokensCDestructive
Embed token budget for rendered context
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Arguments for @tokens directive |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not explain what 'embed' does or any side effects. Annotations indicate destructiveHint: true, but the description doesn't clarify if tokens are consumed or if state changes. No additional transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short (5 words), which is concise, but may be under-specified. It is front-loaded but lacks detail that would help an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no output schema and a destructive hint, the description is insufficient. It doesn't explain the effect of the tool, how to use the args parameter, or what happens after invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one parameter 'args' described as 'Arguments for @tokens directive'. The description adds no extra meaning beyond the schema's existing documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Embed token budget for rendered context' provides a verb and resource but is vague. It's unclear what 'embed token budget' entails exactly. Sibling tools have similar naming patterns, so it's not distinguished.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like perseus_memory or perseus_tool. No context on prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_toolADestructive
Run an external tool that has been allowlisted in the Perseus configuration. Use for approved integrations only. Requires the tool name to be present in the allowlist. Destructive — executes the tool with the user's permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the allowlisted external tool to run |
Output Schema
| Name | Required | Description |
|---|---|---|
| output | No | External tool stdout |
| exit_code | No | Tool exit code |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint: true), the description explicitly states 'Destructive — executes the tool with the user's permissions.', adding important behavioral context. It also clarifies that execution is for allowlisted tools only, which is not covered by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences, each adding essential information: action, usage condition, and behavior. It is front-loaded with the main purpose and contains no redundant or irrelevant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool with one parameter, full schema coverage, annotations for destructiveness, and the presence of an output schema (not shown but indicated), the description provides sufficient context. It covers purpose, usage, and behavior, leaving no critical gaps for an AI agent to misinterpret.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% coverage for the single parameter 'name' with a description. The tool description adds no additional semantics about the parameter beyond what the schema provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Run' and resource 'external tool that has been allowlisted', distinguishing it from many sibling tools that are specific internal tools. It explicitly mentions the allowlisting requirement, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides guidance on when to use: for approved integrations only, and requires the tool name to be in the allowlist. It does not explicitly list when not to use or name alternatives, but the context of sibling tools implies this is for external tools not covered by other perseus_* tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_tooltrimARead-only
Return filtered toolset metadata and usage statistics. Use to understand what tools are available and how they are being used. For full tool metadata, set full=true. Read-only; stats mode returns aggregated counts.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | If 'true', return complete tool metadata | |
| stats | No | If 'true', return tool usage statistics |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of tools listed |
| tools | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses read-only behavior ('Read-only') and the aggregated nature of stats mode, adding context beyond the readOnlyHint annotation. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that front-load the core purpose and immediately provide usage conditions. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no required params, a schema coverage of 100%, and presence of output schema, the description fully covers the tool's functionality, both modes, and constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds clarifying context for the 'full' parameter ('For full tool metadata') and implies the 'stats' parameter returns aggregated counts, enhancing understanding beyond schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('return') and resource ('filtered toolset metadata and usage statistics'), clearly distinguishing this tool from siblings like perseus_list or perseus_tool that may handle related but different data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('to understand what tools are available and how they are being used') and provides conditional guidance for full metadata vs stats mode. Lacks explicit when-not-to-use or alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_treeARead-only
Display a directory tree with configurable depth. Use to understand project structure at a glance. For flat file listings with metadata, use perseus_list instead. Read-only; depth limits control output size.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Directory path for tree display (default: workspace root) | |
| depth | No | Value for depth parameter |
Output Schema
| Name | Required | Description |
|---|---|---|
| root | No | Root directory path |
| tree | No | Directory tree as formatted text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true; description adds 'Read-only' and 'depth limits control output size', providing extra behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three clear, front-loaded sentences: action, usage context, sibling alternative and behavioral property. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage, sibling differentiation, read-only behavior, and output size control; minor omission: lacks specification of default depth behavior, but output schema exists to supplement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with both parameters described; description adds 'configurable depth' and 'depth limits control output size' but does not specify default depth or format, providing marginal added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'Display a directory tree' and resource, and distinguishes from sibling perseus_list by contrasting with flat file listings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('understand project structure at a glance') and when to use alternative perseus_list for flat file listings; no other exclusions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_validateARead-only
Validate a rendered block against a JSON Schema. Use to enforce structure on configuration blocks, task definitions, or any schema-constrained section. Read-only; returns pass/fail with error messages.
| Name | Required | Description | Default |
|---|---|---|---|
| schema | No | JSON Schema to validate the rendered block against |
Output Schema
| Name | Required | Description |
|---|---|---|
| valid | No | Whether validation passed |
| errors | No | Validation error messages |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds that it returns pass/fail with error messages, which complements the readOnlyHint in annotations. No contradiction, but limited additional behavioral disclosure beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, efficiently conveying purpose and return behavior. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and clear behavior, the description is sufficiently complete, covering purpose, usage, and return format. No missing context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers the single parameter completely (100% coverage), so baseline 3. The description does not add extra meaning about the parameter beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool validates a rendered block against a JSON Schema, with specific use cases. It is distinct from sibling tools, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context ('enforce structure on configuration blocks') and explicitly states it is read-only, but does not mention when not to use or suggest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perseus_waypointARead-only
Return the most recent session checkpoint: what was being worked on, status, and next steps. Use at session start to resume where you left off. Stale after TTL (default 24h). Read-only; lightweight — call freely.
| Name | Required | Description | Default |
|---|---|---|---|
| ttl | No | Max age in seconds for a valid checkpoint (default: 86400) |
Output Schema
| Name | Required | Description |
|---|---|---|
| stale | No | Whether the checkpoint exceeds TTL |
| timestamp | No | ISO-8601 timestamp of checkpoint |
| checkpoint | No | Latest checkpoint summary text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only; description adds 'lightweight' and 'call freely' for safe invocation. Also notes staleness after TTL, adding behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. Purpose is front-loaded, followed by usage and behavioral notes. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists, the description adequately summarizes return content. Parameter is documented. No major gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage for the single parameter (ttl). Description reinforces the TTL concept but does not add new meaning beyond the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns the most recent session checkpoint, specifying content: what was being worked on, status, and next steps. This distinguishes it from sibling tools like perseus_session or perseus_memory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises use at session start to resume progress. Mention of staleness and default TTL provides context. No explicit when-not-to-use, but the specific purpose makes it clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
4 tool updates
v1.0.22- Added
perseus_capture - Added
perseus_context_diff - Changed
perseus_include1 field changed- added
Input schema / properties / modeAdded value: +{ + "description": "Value for mode parameter", + "type": "string" +}
- Changed
perseus_memory2 fields changed- added
Input schema / properties / forceAdded value: +{ + "description": "Value for force parameter", + "type": "string" +} - added
Input schema / properties / limitAdded value: +{ + "description": "Value for limit parameter", + "type": "string" +}
1 tool update
v1.0.20- Added
perseus_focus
5 tool updates
v1.0.14- Added
perseus_budget - Changed
perseus_date1 field changed- changed
Input schema / properties / format / descriptionPrevious value: -"strftime format string (default: %Y-%m-%d %H:%M:%S)"New value: +"Date format using tokens YYYY, MM, DD, HH, mm, ss, z (default: YYYY-MM-DD HH:mm:ss). strftime-style %Y %m %d %H %M %S tokens are also accepted."
- Added
perseus_mneme - Added
perseus_profile - Removed
perseus_trace
1 tool update
v1.0.13- Added
perseus_research
21 tool updates
v1.0.10- Added
perseus_auto_skill - Removed
perseus_auto-skill - Changed
perseus_date1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "datetime": { + "description": "Current date/time string", + "type": "string" + }, + "iso8601": { + "description": "ISO-8601 formatted timestamp", + "type": "string" + }, + "unix": { + "description": "Unix epoch seconds", + "type": "integer" + } + }, + "type": "object" +}
- Changed
perseus_drift1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "rendered": { + "description": "Resolved directive output as markdown", + "type": "string" + } + }, + "type": "object" +}
- Changed
perseus_env1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "source": { + "description": "Where the value was resolved from", + "type": "string" + }, + "value": { + "description": "Resolved value or fallback", + "type": "string" + }, + "variable": { + "description": "Environment variable name", + "type": "string" + } + }, + "type": "object" +}
- Changed
perseus_inbox1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "messages": { + "items": { + "properties": { + "content": { + "description": "Message body", + "type": "string" + }, + "id": { + "description": "Message identifier", + "type": "string" + }, + "read": { + "description": "Whether the message has been read", + "type": "boolean" + }, + "sender": { + "description": "Message sender", + "type": "string" + }, + "timestamp": { + "description": "ISO-8601 timestamp", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "unread_count": { + "type": "integer" + } + }, + "type": "object" +}
- Changed
perseus_include6 fields changed- removed
Input schema / properties / argsRemoved value: -{ - "description": "Arguments for @include directive", - "type": "string" -} - added
Input schema / properties / lastAdded value: +{ + "description": "Keep only the final N lines of the file (bounds a growing log)", + "type": "string" +} - added
Input schema / properties / pathAdded value: +{ + "description": "File path to include and render (relative to workspace root)", + "type": "string" +} - added
Input schema / properties / sinceAdded value: +{ + "description": "Keep only dated sections within a window, e.g. 14d, 2w, 24h", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[]New value: +[ + "path" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "rendered": { + "description": "Rendered included file content", + "type": "string" + }, + "source": { + "description": "Included file path", + "type": "string" + } + }, + "type": "object" +}
- Changed
perseus_list5 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of entries to return"New value: +"Value for limit parameter" - added
Input schema / properties / pathAdded value: +{ + "description": "Directory path to list (default: workspace root)", + "type": "string" +} - changed
Input schema / properties / sort / descriptionPrevious value: -"Sort order: name, modified, size"New value: +"Value for sort parameter" - changed
Input schema / requiredPrevious value: -[]New value: +[ + "path" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "count": { + "type": "integer" + }, + "entries": { + "items": { + "properties": { + "modified": { + "description": "Last modified timestamp", + "type": "string" + }, + "name": { + "type": "string" + }, + "size": { + "description": "Size in bytes", + "type": "integer" + }, + "type": { + "description": "file or directory", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
perseus_mason3 fields changed- removed
Input schema / properties / argsRemoved value: -{ - "description": "Arguments for @mason directive", - "type": "string" -} - added
Input schema / properties / queryAdded value: +{ + "description": "Feature or filename to look up in the Mason code architecture map", + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "concept_map": { + "description": "Mason code architecture concept map", + "type": "string" + }, + "files": { + "description": "Mapped source files", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
perseus_memory2 fields changed- added
Input schema / properties / max_tokensAdded value: +{ + "description": "Value for max_tokens parameter", + "type": "string" +} - added
Input schema / properties / projectAdded value: +{ + "description": "Value for project parameter", + "type": "string" +}
- Changed
perseus_perseus3 fields changed- removed
Input schema / properties / argsRemoved value: -{ - "description": "Arguments for @perseus directive", - "type": "string" -} - added
Input schema / properties / urlAdded value: +{ + "description": "URL of the remote Perseus instance to fetch context from", + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "rendered": { + "description": "Remote Perseus context as markdown", + "type": "string" + }, + "source_url": { + "description": "URL of the remote Perseus instance", + "type": "string" + } + }, + "type": "object" +}
- Changed
perseus_prompt1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "rendered": { + "description": "System prompt block content", + "type": "string" + } + }, + "type": "object" +}
- Changed
perseus_read1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "content": { + "description": "File contents", + "type": "string" + }, + "path": { + "description": "File path read", + "type": "string" + }, + "truncated": { + "description": "Whether content was truncated", + "type": "boolean" + } + }, + "type": "object" +}
- Removed
perseus_sibyl - Removed
perseus_sibyl_state - Added
perseus_tokens - Changed
perseus_tool4 fields changed- removed
Input schema / properties / argsRemoved value: -{ - "description": "Arguments for @tool directive", - "type": "string" -} - added
Input schema / properties / nameAdded value: +{ + "description": "Name of the allowlisted external tool to run", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[]New value: +[ + "name" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "exit_code": { + "description": "Tool exit code", + "type": "integer" + }, + "output": { + "description": "External tool stdout", + "type": "string" + } + }, + "type": "object" +}
- Changed
perseus_tooltrim1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "count": { + "description": "Number of tools listed", + "type": "integer" + }, + "tools": { + "items": { + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Added
perseus_trace - Changed
perseus_tree4 fields changed- changed
Input schema / properties / depth / descriptionPrevious value: -"Maximum depth for directory tree traversal"New value: +"Value for depth parameter" - added
Input schema / properties / pathAdded value: +{ + "description": "Directory path for tree display (default: workspace root)", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[]New value: +[ + "path" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "root": { + "description": "Root directory path", + "type": "string" + }, + "tree": { + "description": "Directory tree as formatted text", + "type": "string" + } + }, + "type": "object" +}
- Changed
perseus_validate1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "errors": { + "description": "Validation error messages", + "items": { + "type": "string" + }, + "type": "array" + }, + "valid": { + "description": "Whether validation passed", + "type": "boolean" + } + }, + "type": "object" +}
23 tool updates
v1.0.7- Changed
perseus_agora2 fields changed- changed
Input schema / properties / status / descriptionPrevious value: -"status= modifier for @agora"New value: +"Filter tasks by status: open, in_progress, completed, cancelled" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "tasks": { + "items": { + "properties": { + "id": { + "description": "Task identifier", + "type": "string" + }, + "scope": { + "description": "Effort estimate", + "type": "string" + }, + "status": { + "description": "Task status", + "type": "string" + }, + "title": { + "description": "Task title", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Added
perseus_auto-skill - Changed
perseus_date1 field changed- changed
Input schema / properties / format / descriptionPrevious value: -"format= modifier for @date"New value: +"strftime format string (default: %Y-%m-%d %H:%M:%S)"
- Changed
perseus_env3 fields changed- changed
Input schema / properties / fallback / descriptionPrevious value: -"fallback= modifier for @env"New value: +"Value to use when the environment variable is not set" - changed
Input schema / properties / required / descriptionPrevious value: -"required= modifier for @env"New value: +"If 'true', render fails when the variable is unset" - changed
Input schema / properties / schema / descriptionPrevious value: -"schema= modifier for @env"New value: +"JSON Schema to validate the env var value against"
- Changed
perseus_get_context1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "format": { + "description": "Output format used", + "type": "string" + }, + "rendered": { + "description": "Full rendered context", + "type": "string" + } + }, + "type": "object" +}
- Changed
perseus_get_health1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "report": { + "description": "Detailed health report", + "type": "string" + }, + "status": { + "description": "Overall health status", + "type": "string" + } + }, + "type": "object" +}
- Changed
perseus_health1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "checks": { + "items": { + "type": "object" + }, + "type": "array" + }, + "duplicate_tasks": { + "description": "Count of duplicate task entries", + "type": "integer" + }, + "oversized_context": { + "description": "Whether rendered context exceeds size limits", + "type": "boolean" + }, + "stale_skills": { + "description": "Count of skills past freshness threshold", + "type": "integer" + }, + "status": { + "description": "Overall health: ok, warning, or critical", + "type": "string" + } + }, + "type": "object" +}
- Changed
perseus_inbox2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"limit= modifier for @inbox"New value: +"Maximum number of messages to return" - changed
Input schema / properties / unread / descriptionPrevious value: -"unread= modifier for @inbox"New value: +"If 'true', show only unread messages"
- Changed
perseus_list2 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"limit= modifier for @list"New value: +"Maximum number of entries to return" - changed
Input schema / properties / sort / descriptionPrevious value: -"sort= modifier for @list"New value: +"Sort order: name, modified, size"
- Added
perseus_mason - Changed
perseus_memory12 fields changed- changed
Input schema / properties / alias / descriptionPrevious value: -"alias= modifier for @memory"New value: +"Workspace alias for federation targeting" - changed
Input schema / properties / federation / descriptionPrevious value: -"federation modifier for @memory"New value: +"Enable cross-workspace federation" - changed
Input schema / properties / focus / descriptionPrevious value: -"focus= modifier for @memory"New value: +"Time focus: recent, today, week, or all" - changed
Input schema / properties / include_federation / descriptionPrevious value: -"include_federation= modifier for @memory"New value: +"Include federation results in output" - changed
Input schema / properties / k / descriptionPrevious value: -"k= modifier for @memory"New value: +"Number of results to return (default: 5)" - changed
Input schema / properties / mode / descriptionPrevious value: -"mode= modifier for @memory"New value: +"Query mode: search, narrative, or federation" - changed
Input schema / properties / query / descriptionPrevious value: -"query= modifier for @memory"New value: +"Search query string for BM25 / hybrid recall" - changed
Input schema / properties / render / descriptionPrevious value: -"render= modifier for @memory"New value: +"If 'true', render matched memories as markdown" - changed
Input schema / properties / scope / descriptionPrevious value: -"scope= modifier for @memory"New value: +"Memory scope filter: working, core, or all" - changed
Input schema / properties / type / descriptionPrevious value: -"type= modifier for @memory"New value: +"Memory type filter" - changed
Input schema / properties / workspace / descriptionPrevious value: -"workspace= modifier for @memory"New value: +"Target workspace path for scoped queries" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "count": { + "description": "Number of results returned", + "type": "integer" + }, + "mode": { + "description": "Query mode used", + "type": "string" + }, + "results": { + "items": { + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Added
perseus_mimir - Removed
perseus_mneme - Changed
perseus_read4 fields changed- changed
Input schema / properties / fallback / descriptionPrevious value: -"fallback= modifier for @read"New value: +"Value to use when the file or key is not found" - changed
Input schema / properties / key / descriptionPrevious value: -"key= modifier for @read"New value: +"If reading a config file, extract this key only" - changed
Input schema / properties / path / descriptionPrevious value: -"path= modifier for @read"New value: +"File path to read (relative to workspace root)" - changed
Input schema / properties / schema / descriptionPrevious value: -"schema= modifier for @read"New value: +"JSON Schema to validate file contents against"
- Changed
perseus_services1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "services": { + "items": { + "properties": { + "latency_ms": { + "description": "Response latency in milliseconds", + "type": "number" + }, + "name": { + "type": "string" + }, + "status": { + "description": "up, down, or unknown", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Changed
perseus_session2 fields changed- changed
Input schema / properties / count / descriptionPrevious value: -"count= modifier for @session"New value: +"Number of recent sessions to include (default: 3)" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "count": { + "type": "integer" + }, + "sessions": { + "items": { + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Added
perseus_sibyl - Added
perseus_sibyl_state - Changed
perseus_skills4 fields changed- changed
Input schema / properties / category / descriptionPrevious value: -"category= modifier for @skills"New value: +"Filter skills by category (e.g., devops, github)" - changed
Input schema / properties / flag_stale / descriptionPrevious value: -"flag_stale= modifier for @skills"New value: +"If 'true', mark skills not updated within threshold as stale" - changed
Input schema / properties / limit / descriptionPrevious value: -"limit= modifier for @skills"New value: +"Maximum number of skills to list" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "skills": { + "items": { + "properties": { + "category": { + "type": "string" + }, + "description": { + "type": "string" + }, + "name": { + "type": "string" + }, + "stale": { + "type": "boolean" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" +}
- Added
perseus_tooltrim - Changed
perseus_tree1 field changed- changed
Input schema / properties / depth / descriptionPrevious value: -"depth= modifier for @tree"New value: +"Maximum depth for directory tree traversal"
- Changed
perseus_validate1 field changed- changed
Input schema / properties / schema / descriptionPrevious value: -"schema= modifier for @validate"New value: +"JSON Schema to validate the rendered block against"
- Changed
perseus_waypoint2 fields changed- changed
Input schema / properties / ttl / descriptionPrevious value: -"ttl= modifier for @waypoint"New value: +"Max age in seconds for a valid checkpoint (default: 86400)" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "checkpoint": { + "description": "Latest checkpoint summary text", + "type": "string" + }, + "stale": { + "description": "Whether the checkpoint exceeds TTL", + "type": "boolean" + }, + "timestamp": { + "description": "ISO-8601 timestamp of checkpoint", + "type": "string" + } + }, + "type": "object" +}
2 tool updates
v1.0.6- Changed
perseus_memory6 fields changed- added
Input schema / properties / kAdded value: +{ + "description": "k= modifier for @memory", + "type": "string" +} - added
Input schema / properties / modeAdded value: +{ + "description": "mode= modifier for @memory", + "type": "string" +} - added
Input schema / properties / queryAdded value: +{ + "description": "query= modifier for @memory", + "type": "string" +} - added
Input schema / properties / renderAdded value: +{ + "description": "render= modifier for @memory", + "type": "string" +} - added
Input schema / properties / scopeAdded value: +{ + "description": "scope= modifier for @memory", + "type": "string" +} - added
Input schema / properties / typeAdded value: +{ + "description": "type= modifier for @memory", + "type": "string" +}
- Added
perseus_mneme
21 tool updates
v0.1.0- First observed
perseus_agora - First observed
perseus_date - First observed
perseus_drift - First observed
perseus_env - First observed
perseus_get_context - First observed
perseus_get_health - First observed
perseus_health - First observed
perseus_inbox - First observed
perseus_include - First observed
perseus_list - First observed
perseus_memory - First observed
perseus_perseus - First observed
perseus_prompt - First observed
perseus_read - First observed
perseus_services - First observed
perseus_session - First observed
perseus_skills - First observed
perseus_tool - First observed
perseus_tree - First observed
perseus_validate - First observed
perseus_waypoint
TDQS
Most tools have clearly distinct purposes, such as perseus_agora for tasks, perseus_memory for local memory, and perseus_mneme for external memory. However, the presence of the deprecated alias perseus_mimir alongside perseus_mneme introduces some ambiguity, and perseus_health vs. perseus_get_health may cause minor confusion as they both relate to health but with different scopes.
All tool names use the 'perseus_' prefix, but the suffix varies: some are nouns (e.g., perseus_agora, perseus_health) while others are verb-noun combinations (e.g., perseus_get_context, perseus_list). This mix of noun-only and verb-noun patterns reduces consistency, though the naming is still readable.
33 tools is on the high side for a single server, suggesting it may be overly broad. While many tools serve specific sub-features (memory, health, directory browsing), some redundancy (e.g., perseus_mimir and perseus_mneme) and the sheer number make it feel heavy, bordering on too many for a cohesive set.
The tool surface covers a wide range of operations for context management, memory, health, and file browsing. Minor gaps exist, such as the lack of explicit task creation/update tools (tasks are .md files that must be edited via file tools), but overall the set is comprehensive for its domain and supports key workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
AI Reasoning Cache & Consensus Layer with 11 MCP tools via Streamable HTTP.
A registry of AI agent tools — MCP servers, APIs, CLIs, SDKs — kept current by automated ingestion.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- AlicenseAqualityAmaintenanceNode.js server implementing Model Context Protocol (MCP) for filesystem operations.14668,80990,042-
- AlicenseAqualityAmaintenanceA Model Context Protocol server that fetches up-to-date, version-specific documentation and code examples from libraries directly into LLM prompts, helping developers get accurate answers without outdated or hallucinated information.2879,51361,623MIT
- AlicenseAqualityCmaintenanceSimple sequential thinking MCP in python14MIT
- FlicenseBqualityAmaintenanceA local-first, agent-agnostic MCP server that provides semantic search, persistent memory, and automated code review capabilities for development workflows. It leverages the Auggie SDK to offer advanced tools for codebase indexing, implementation planning, and deterministic static analysis.5248-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Perseus-Computing-LLC/perseus'
If you have feedback or need assistance with the MCP directory API, please join our Discord server