Skip to main content
Glama

Perseus™ 🪞 — One command. Zero orientation.

Test Suite PyPI version PyPI downloads License: MIT Glama MCP Marketplace

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 reads

quickstart 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.md once 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 @memory directive 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. @waypoint and @session expose 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 quickstart

That 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 demo — before/after cold-start

CI PyPI MCP Registry License: MIT Status: Patent Pending perseus.observer →

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.observer/context-engine

Perseus Vault

Persists governed memory across sessions with local-first storage, retrieval, and confidence-aware records.

perseus.observer/vault

Perseus Ledger

Records hash-chained events and evidence so consequential work can be reconstructed and reviewed.

perseus.observer/ledger

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/perseus in shell commands. In JSON/YAML MCP command fields, 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 use perseus; verify the resolved entry point with command -v perseus when diagnosing an installation.

⚠️ Security Gate: Shell-executing directives (@query, @agent, @services command:) require export 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 8420

Assistant-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 serve

See 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 run

Perseus 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, renders

Smart init detects your stack and tailors the setup:

  • Python@memory queries for test patterns, type annotations

  • Rust → 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

CLAUDE.md

Hermes Agent

.hermes.md (top priority) or AGENTS.md

Cursor

.cursorrules or .cursor/context.md

Codex

AGENTS.md

Rovo Dev

AGENTS.md

Any other

Whatever your assistant reads at session start

Hermes priority order: .hermes.mdAGENTS.mdCLAUDE.md. Render to .hermes.md for 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 --install

See 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 authPOST /message requires Bearer token via mcp.sse_bearer_token config key (falls back to serve.auth_token for backward compat). Unauthenticated requests receive 401.

  • Platform-portable MCP timeout_call_tool() uses ThreadPoolExecutor + 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_signatures now 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@read and @include warn and truncate when files exceed max_read_bytes / max_include_bytes (512 KB default, None for unlimited).

  • Transitive resolution@include on .md files recursively renders directives up to max_include_depth (default 5), with cycle detection.

  • Integrity drift — Optional integrity_check captures file mtimes before render and warns if any file changed mid-resolution.

  • Plugin permission gating — Plugin directives with executes_shell=True are gated behind allow_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-api

The 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/myproject

The 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 record

Perseus 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 (@date, @memory, @waypoint, @health, @env)

2

Conditional

Task-specific, heavier (@services, @skills, @session, @agora, @inbox)

3

On-Demand

Bulky/expensive — the agent pulls it if needed (@query, @read, @include, @tree, @list)

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
@end

Set 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 ref
perseus 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 8
  • Byte-exact accounting — per-directive bytes + static template bytes sum to the rendered total with no unattributed remainder (the accounting.exact field asserts this in --json).

  • Tokenizer-aware — real BPE counts via tiktoken (cl100k_base) when it happens to be installed (labeled exact); otherwise a deterministic offline heuristic clearly labeled estimate. 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 (via git show, offline) and reports which directive's contribution grew, so "someone added an @include that 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_error

Speculative 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=2000

The @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

CLI Reference

Every command and flag

Setup & Config Guide

The definitive setup, config, automation, and troubleshooting guide

Directives Reference

All directives with modifiers and examples

File-based Hermes integration

Generate context files for Hermes

Adapter Patterns

Wire Perseus to any AI assistant

Container Runtime

Docker and compose deployment

Quickstart

5-minute setup walkthrough

Product Contract

Guarantees, trust model, permissions

Contributing

Dev setup, test suite, commit conventions

Examples

End-to-end workflow recipes

Use Cases

Real-world usage patterns

Performance

Benchmark methodology and results

Agent Surfaces

JSON contracts for agent consumption

Deployment

Current deployment guidance with pinned versions

Security

Trust model, workspace boundaries, secrets

Roadmap

Living roadmap (live @perseus source)


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 PJS2LW7HAK35; CAGE 22JC5. Verify current SAM status before proposal, subcontract, or award use.

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 0092893, approved 2026-08-18 through 2031-08-18, supports requests for unclassified export-controlled military technical data. It does not grant data access, classified access, facility clearance, an ATO, or cross-domain approval.

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.


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

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 tools
perseus_agoraA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoFilter tasks by status: open, in_progress, completed, cancelled

Output Schema

ParametersJSON Schema
NameRequiredDescription
tasksNo

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_skillA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
skillNoName of the skill the agent should load before beginning work

Output Schema

ParametersJSON Schema
NameRequiredDescription
renderedNoResolved directive output as markdown

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_budgetA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
maxNoValue for max parameter
strictNoValue for strict parameter
forensicNoValue for forensic parameter

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_captureA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoValue for limit parameter

TDQS

A3.5/5.0
Behavior1/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_diffA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
resetNoValue for reset parameter

TDQS

A3.8/5.0
Behavior1/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_dateA
Read-only

Current date/time

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoDate 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

ParametersJSON Schema
NameRequiredDescription
unixNoUnix epoch seconds
iso8601NoISO-8601 formatted timestamp
datetimeNoCurrent date/time string

TDQS

A3.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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_driftA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoArguments for @drift directive

Output Schema

ParametersJSON Schema
NameRequiredDescription
renderedNoResolved directive output as markdown

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_envC
Read-only

Embed environment variable

ParametersJSON Schema
NameRequiredDescriptionDefault
schemaNoJSON Schema to validate the env var value against
fallbackNoValue to use when the environment variable is not set
requiredNoIf 'true', render fails when the variable is unset

Output Schema

ParametersJSON Schema
NameRequiredDescription
valueNoResolved value or fallback
sourceNoWhere the value was resolved from
variableNoEnvironment variable name

TDQS

C2.2/5.0
Behavior2/5

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.

Conciseness2/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose2/5

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.

Usage Guidelines2/5

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_focusA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
addNoText of an item to admit into the workspace (bounded, salience-ranked)
pinNoText of an item to pin (floated to top, never evicted)
dropNoText of an item to remove from the workspace
clearNoIf 'true', remove all items from the workspace
touchNoText of an existing item to reinforce (bump frequency/recency)
unpinNoText of a pinned item to unpin
sourceNoOptional label for where a newly added item came from
weightNoBase salience weight for a newly added item (default 1.0)

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_contextA
Read-only

Return the full rendered Perseus context for the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoOutput format: markdown or json (default: markdown)

Output Schema

ParametersJSON Schema
NameRequiredDescription
formatNoOutput format used
renderedNoFull rendered context

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_healthA
Read-only

Run Daedalus context-maintenance heuristics — cache health, directive resolution stats, memory integrity check.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
reportNoDetailed health report
statusNoOverall health status

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_healthA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoArguments for @health directive

Output Schema

ParametersJSON Schema
NameRequiredDescription
checksNo
statusNoOverall health: ok, warning, or critical
stale_skillsNoCount of skills past freshness threshold
duplicate_tasksNoCount of duplicate task entries
oversized_contextNoWhether rendered context exceeds size limits

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_inboxA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of messages to return
unreadNoIf 'true', show only unread messages

Output Schema

ParametersJSON Schema
NameRequiredDescription
messagesNo
unread_countNo

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_includeA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
lastNoKeep only the final N lines of the file (bounds a growing log)
modeNoValue for mode parameter
pathYesFile path to include and render (relative to workspace root)
sinceNoKeep only dated sections within a window, e.g. 14d, 2w, 24h

Output Schema

ParametersJSON Schema
NameRequiredDescription
sourceNoIncluded file path
renderedNoRendered included file content

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_listA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesDirectory path to list (default: workspace root)
sortNoValue for sort parameter
limitNoValue for limit parameter

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
entriesNo

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_masonA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoFeature or filename to look up in the Mason code architecture map

Output Schema

ParametersJSON Schema
NameRequiredDescription
filesNoMapped source files
concept_mapNoMason code architecture concept map

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_memoryA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kNoNumber of results to return (default: 5)
modeNoQuery mode: search, narrative, or federation
typeNoMemory type filter
aliasNoWorkspace alias for federation targeting
focusNoTime focus: recent, today, week, or all
forceNoValue for force parameter
limitNoValue for limit parameter
queryNoSearch query string for BM25 / hybrid recall
scopeNoMemory scope filter: working, core, or all
renderNoIf 'true', render matched memories as markdown
projectNoValue for project parameter
workspaceNoTarget workspace path for scoped queries
federationNoEnable cross-workspace federation
max_tokensNoValue for max_tokens parameter
include_federationNoInclude federation results in output

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeNoQuery mode used
countNoNumber of results returned
resultsNo

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_mimirA
Read-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.)

ParametersJSON Schema
NameRequiredDescriptionDefault
kNoNumber of results to return (default: 5)
typeNoMemory type filter
queryNoBM25 FTS5 search query for persistent memory recall
scopeNoMemory scope filter

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
queryNo
resultsNo

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_mnemeA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kNoNumber of results to return (default: 5)
typeNoMemory type filter
queryNoBM25 FTS5 search query for persistent memory recall
scopeNoMemory scope filter

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
queryNo
resultsNo

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_perseusA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoURL of the remote Perseus instance to fetch context from

Output Schema

ParametersJSON Schema
NameRequiredDescription
renderedNoRemote Perseus context as markdown
source_urlNoURL of the remote Perseus instance

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_profileA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNoModel name (or context-window class) whose profile to resolve, e.g. claude-sonnet-4-6; unknown names fall back to default

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_promptA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoArguments for @prompt directive

Output Schema

ParametersJSON Schema
NameRequiredDescription
renderedNoSystem prompt block content

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_readA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNoIf reading a config file, extract this key only
pathYesFile path to read (relative to workspace root)
schemaNoJSON Schema to validate file contents against
fallbackNoValue to use when the file or key is not found

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathNoFile path read
contentNoFile contents
truncatedNoWhether content was truncated

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoValue for limit parameter

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_servicesA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoArguments for @services directive

Output Schema

ParametersJSON Schema
NameRequiredDescription
servicesNo

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_sessionA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of recent sessions to include (default: 3)

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNo
sessionsNo

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_skillsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of skills to list
categoryNoFilter skills by category (e.g., devops, github)
flag_staleNoIf 'true', mark skills not updated within threshold as stale

Output Schema

ParametersJSON Schema
NameRequiredDescription
skillsNo

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_tokensC
Destructive

Embed token budget for rendered context

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoArguments for @tokens directive

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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_toolA
Destructive

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the allowlisted external tool to run

Output Schema

ParametersJSON Schema
NameRequiredDescription
outputNoExternal tool stdout
exit_codeNoTool exit code

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_tooltrimA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
fullNoIf 'true', return complete tool metadata
statsNoIf 'true', return tool usage statistics

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoNumber of tools listed
toolsNo

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_treeA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesDirectory path for tree display (default: workspace root)
depthNoValue for depth parameter

Output Schema

ParametersJSON Schema
NameRequiredDescription
rootNoRoot directory path
treeNoDirectory tree as formatted text

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_validateA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
schemaNoJSON Schema to validate the rendered block against

Output Schema

ParametersJSON Schema
NameRequiredDescription
validNoWhether validation passed
errorsNoValidation error messages

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_waypointA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ttlNoMax age in seconds for a valid checkpoint (default: 86400)

Output Schema

ParametersJSON Schema
NameRequiredDescription
staleNoWhether the checkpoint exceeds TTL
timestampNoISO-8601 timestamp of checkpoint
checkpointNoLatest checkpoint summary text

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 4 tool updatesv1.0.22
    • Addedperseus_capture
    • Addedperseus_context_diff
    • Changedperseus_include1 field changed
      • addedInput schema / properties / mode
        Added value: +{
        +  "description": "Value for mode parameter",
        +  "type": "string"
        +}
    • Changedperseus_memory2 fields changed
      • addedInput schema / properties / force
        Added value: +{
        +  "description": "Value for force parameter",
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Value for limit parameter",
        +  "type": "string"
        +}
  2. 1 tool updatev1.0.20
    • Addedperseus_focus
  3. 5 tool updatesv1.0.14
    • Addedperseus_budget
    • Changedperseus_date1 field changed
      • changedInput schema / properties / format / description
        Previous 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."
    • Addedperseus_mneme
    • Addedperseus_profile
    • Removedperseus_trace
  4. 1 tool updatev1.0.13
    • Addedperseus_research
  5. 21 tool updatesv1.0.10
    • Addedperseus_auto_skill
    • Removedperseus_auto-skill
    • Changedperseus_date1 field changed
      • changedOutput 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"
        +}
    • Changedperseus_drift1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "rendered": {
        +      "description": "Resolved directive output as markdown",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedperseus_env1 field changed
      • changedOutput 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"
        +}
    • Changedperseus_inbox1 field changed
      • changedOutput 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"
        +}
    • Changedperseus_include6 fields changed
      • removedInput schema / properties / args
        Removed value: -{
        -  "description": "Arguments for @include directive",
        -  "type": "string"
        -}
      • addedInput schema / properties / last
        Added value: +{
        +  "description": "Keep only the final N lines of the file (bounds a growing log)",
        +  "type": "string"
        +}
      • addedInput schema / properties / path
        Added value: +{
        +  "description": "File path to include and render (relative to workspace root)",
        +  "type": "string"
        +}
      • addedInput schema / properties / since
        Added value: +{
        +  "description": "Keep only dated sections within a window, e.g. 14d, 2w, 24h",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[]New value: +[
        +  "path"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "rendered": {
        +      "description": "Rendered included file content",
        +      "type": "string"
        +    },
        +    "source": {
        +      "description": "Included file path",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedperseus_list5 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of entries to return"New value: +"Value for limit parameter"
      • addedInput schema / properties / path
        Added value: +{
        +  "description": "Directory path to list (default: workspace root)",
        +  "type": "string"
        +}
      • changedInput schema / properties / sort / description
        Previous value: -"Sort order: name, modified, size"New value: +"Value for sort parameter"
      • changedInput schema / required
        Previous value: -[]New value: +[
        +  "path"
        +]
      • changedOutput 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"
        +}
    • Changedperseus_mason3 fields changed
      • removedInput schema / properties / args
        Removed value: -{
        -  "description": "Arguments for @mason directive",
        -  "type": "string"
        -}
      • addedInput schema / properties / query
        Added value: +{
        +  "description": "Feature or filename to look up in the Mason code architecture map",
        +  "type": "string"
        +}
      • changedOutput 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"
        +}
    • Changedperseus_memory2 fields changed
      • addedInput schema / properties / max_tokens
        Added value: +{
        +  "description": "Value for max_tokens parameter",
        +  "type": "string"
        +}
      • addedInput schema / properties / project
        Added value: +{
        +  "description": "Value for project parameter",
        +  "type": "string"
        +}
    • Changedperseus_perseus3 fields changed
      • removedInput schema / properties / args
        Removed value: -{
        -  "description": "Arguments for @perseus directive",
        -  "type": "string"
        -}
      • addedInput schema / properties / url
        Added value: +{
        +  "description": "URL of the remote Perseus instance to fetch context from",
        +  "type": "string"
        +}
      • changedOutput 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"
        +}
    • Changedperseus_prompt1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "rendered": {
        +      "description": "System prompt block content",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedperseus_read1 field changed
      • changedOutput 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"
        +}
    • Removedperseus_sibyl
    • Removedperseus_sibyl_state
    • Addedperseus_tokens
    • Changedperseus_tool4 fields changed
      • removedInput schema / properties / args
        Removed value: -{
        -  "description": "Arguments for @tool directive",
        -  "type": "string"
        -}
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "Name of the allowlisted external tool to run",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[]New value: +[
        +  "name"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "exit_code": {
        +      "description": "Tool exit code",
        +      "type": "integer"
        +    },
        +    "output": {
        +      "description": "External tool stdout",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedperseus_tooltrim1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "count": {
        +      "description": "Number of tools listed",
        +      "type": "integer"
        +    },
        +    "tools": {
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedperseus_trace
    • Changedperseus_tree4 fields changed
      • changedInput schema / properties / depth / description
        Previous value: -"Maximum depth for directory tree traversal"New value: +"Value for depth parameter"
      • addedInput schema / properties / path
        Added value: +{
        +  "description": "Directory path for tree display (default: workspace root)",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[]New value: +[
        +  "path"
        +]
      • changedOutput 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"
        +}
    • Changedperseus_validate1 field changed
      • changedOutput 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"
        +}
  6. 23 tool updatesv1.0.7
    • Changedperseus_agora2 fields changed
      • changedInput schema / properties / status / description
        Previous value: -"status= modifier for @agora"New value: +"Filter tasks by status: open, in_progress, completed, cancelled"
      • changedOutput 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"
        +}
    • Addedperseus_auto-skill
    • Changedperseus_date1 field changed
      • changedInput schema / properties / format / description
        Previous value: -"format= modifier for @date"New value: +"strftime format string (default: %Y-%m-%d %H:%M:%S)"
    • Changedperseus_env3 fields changed
      • changedInput schema / properties / fallback / description
        Previous value: -"fallback= modifier for @env"New value: +"Value to use when the environment variable is not set"
      • changedInput schema / properties / required / description
        Previous value: -"required= modifier for @env"New value: +"If 'true', render fails when the variable is unset"
      • changedInput schema / properties / schema / description
        Previous value: -"schema= modifier for @env"New value: +"JSON Schema to validate the env var value against"
    • Changedperseus_get_context1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "format": {
        +      "description": "Output format used",
        +      "type": "string"
        +    },
        +    "rendered": {
        +      "description": "Full rendered context",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedperseus_get_health1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "report": {
        +      "description": "Detailed health report",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Overall health status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedperseus_health1 field changed
      • changedOutput 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"
        +}
    • Changedperseus_inbox2 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"limit= modifier for @inbox"New value: +"Maximum number of messages to return"
      • changedInput schema / properties / unread / description
        Previous value: -"unread= modifier for @inbox"New value: +"If 'true', show only unread messages"
    • Changedperseus_list2 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"limit= modifier for @list"New value: +"Maximum number of entries to return"
      • changedInput schema / properties / sort / description
        Previous value: -"sort= modifier for @list"New value: +"Sort order: name, modified, size"
    • Addedperseus_mason
    • Changedperseus_memory12 fields changed
      • changedInput schema / properties / alias / description
        Previous value: -"alias= modifier for @memory"New value: +"Workspace alias for federation targeting"
      • changedInput schema / properties / federation / description
        Previous value: -"federation modifier for @memory"New value: +"Enable cross-workspace federation"
      • changedInput schema / properties / focus / description
        Previous value: -"focus= modifier for @memory"New value: +"Time focus: recent, today, week, or all"
      • changedInput schema / properties / include_federation / description
        Previous value: -"include_federation= modifier for @memory"New value: +"Include federation results in output"
      • changedInput schema / properties / k / description
        Previous value: -"k= modifier for @memory"New value: +"Number of results to return (default: 5)"
      • changedInput schema / properties / mode / description
        Previous value: -"mode= modifier for @memory"New value: +"Query mode: search, narrative, or federation"
      • changedInput schema / properties / query / description
        Previous value: -"query= modifier for @memory"New value: +"Search query string for BM25 / hybrid recall"
      • changedInput schema / properties / render / description
        Previous value: -"render= modifier for @memory"New value: +"If 'true', render matched memories as markdown"
      • changedInput schema / properties / scope / description
        Previous value: -"scope= modifier for @memory"New value: +"Memory scope filter: working, core, or all"
      • changedInput schema / properties / type / description
        Previous value: -"type= modifier for @memory"New value: +"Memory type filter"
      • changedInput schema / properties / workspace / description
        Previous value: -"workspace= modifier for @memory"New value: +"Target workspace path for scoped queries"
      • changedOutput 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"
        +}
    • Addedperseus_mimir
    • Removedperseus_mneme
    • Changedperseus_read4 fields changed
      • changedInput schema / properties / fallback / description
        Previous value: -"fallback= modifier for @read"New value: +"Value to use when the file or key is not found"
      • changedInput schema / properties / key / description
        Previous value: -"key= modifier for @read"New value: +"If reading a config file, extract this key only"
      • changedInput schema / properties / path / description
        Previous value: -"path= modifier for @read"New value: +"File path to read (relative to workspace root)"
      • changedInput schema / properties / schema / description
        Previous value: -"schema= modifier for @read"New value: +"JSON Schema to validate file contents against"
    • Changedperseus_services1 field changed
      • changedOutput 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"
        +}
    • Changedperseus_session2 fields changed
      • changedInput schema / properties / count / description
        Previous value: -"count= modifier for @session"New value: +"Number of recent sessions to include (default: 3)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "count": {
        +      "type": "integer"
        +    },
        +    "sessions": {
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedperseus_sibyl
    • Addedperseus_sibyl_state
    • Changedperseus_skills4 fields changed
      • changedInput schema / properties / category / description
        Previous value: -"category= modifier for @skills"New value: +"Filter skills by category (e.g., devops, github)"
      • changedInput schema / properties / flag_stale / description
        Previous value: -"flag_stale= modifier for @skills"New value: +"If 'true', mark skills not updated within threshold as stale"
      • changedInput schema / properties / limit / description
        Previous value: -"limit= modifier for @skills"New value: +"Maximum number of skills to list"
      • changedOutput 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"
        +}
    • Addedperseus_tooltrim
    • Changedperseus_tree1 field changed
      • changedInput schema / properties / depth / description
        Previous value: -"depth= modifier for @tree"New value: +"Maximum depth for directory tree traversal"
    • Changedperseus_validate1 field changed
      • changedInput schema / properties / schema / description
        Previous value: -"schema= modifier for @validate"New value: +"JSON Schema to validate the rendered block against"
    • Changedperseus_waypoint2 fields changed
      • changedInput schema / properties / ttl / description
        Previous value: -"ttl= modifier for @waypoint"New value: +"Max age in seconds for a valid checkpoint (default: 86400)"
      • changedOutput 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"
        +}
  7. 2 tool updatesv1.0.6
    • Changedperseus_memory6 fields changed
      • addedInput schema / properties / k
        Added value: +{
        +  "description": "k= modifier for @memory",
        +  "type": "string"
        +}
      • addedInput schema / properties / mode
        Added value: +{
        +  "description": "mode= modifier for @memory",
        +  "type": "string"
        +}
      • addedInput schema / properties / query
        Added value: +{
        +  "description": "query= modifier for @memory",
        +  "type": "string"
        +}
      • addedInput schema / properties / render
        Added value: +{
        +  "description": "render= modifier for @memory",
        +  "type": "string"
        +}
      • addedInput schema / properties / scope
        Added value: +{
        +  "description": "scope= modifier for @memory",
        +  "type": "string"
        +}
      • addedInput schema / properties / type
        Added value: +{
        +  "description": "type= modifier for @memory",
        +  "type": "string"
        +}
    • Addedperseus_mneme
  8. 21 tool updatesv0.1.0
    • First observedperseus_agora
    • First observedperseus_date
    • First observedperseus_drift
    • First observedperseus_env
    • First observedperseus_get_context
    • First observedperseus_get_health
    • First observedperseus_health
    • First observedperseus_inbox
    • First observedperseus_include
    • First observedperseus_list
    • First observedperseus_memory
    • First observedperseus_perseus
    • First observedperseus_prompt
    • First observedperseus_read
    • First observedperseus_services
    • First observedperseus_session
    • First observedperseus_skills
    • First observedperseus_tool
    • First observedperseus_tree
    • First observedperseus_validate
    • First observedperseus_waypoint

TDQS

B3.4/5.0
Disambiguation4/5

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.

Naming Consistency3/5

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.

Tool Count3/5

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.

Completeness4/5

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

ActivityActive
ResponsivenessResponsive

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

Related MCP Servers

Latest Blog Posts

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