Skip to main content
Glama

tree_roll

Snapshot each node as path, kind and digest, then diff against a saved roll to surface vanished, rewritten and rekinded entries while excusing intended removals.

Instructions

What the tree holds now, as {path, kind, digest} per node — and, given a roll you kept from last time, what changed since.

Every rule runs against the tree as it is, so no rule can see what was REMOVED: a deleted node is not red, it is absent. The roll is what makes absence and silent rewriting mechanical. Keep the roll this returns; hand it back as against on the next read and you get vanished (on the roll, no longer here), rewritten (still here, still its kind, no longer saying what it said — the digest covers name, payload and each param's value, and deliberately not grounding or meta, so re-reading an unchanged record is not a change) and rekinded (here, under a different kind).

excused spares paths whose removal was intended, and spares their whole subtree. The comparison is against the roll you hold, never against git — a gate diffing a committed roll is quern.roll.audit, not this.

Input Schema

NameRequiredDescriptionDefault
againstNo
excusedNo

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.2

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does so richly: it explains that absence rather than color marks removals, defines `vanished`, `rewritten`, and `rekinded`, states exactly what the digest covers and deliberately excludes, and clarifies that comparison is against the held roll rather than git.

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 front-loaded with the core purpose and then layers in diff semantics without filler. Despite its density, every sentence contributes useful behavioral or usage context.

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 two-parameter diff/snapshot tool with no annotations, an output schema, and no schema descriptions, the description supplies enough context to call it correctly: what it returns, how to chain rolls, what the diff categories mean, and when to use an alternative audit 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 0%, so the description must explain both parameters, and it does: `against` is the roll kept from a prior call, and `excused` spares intended removed paths and their subtrees. It could be slightly more precise about the exact path-matching rules for `excused`, but the semantic meaning is clear.

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 that the tool reads the current tree as {path, kind, digest} per node and optionally compares it against a previously returned roll. It is specific about the resource and operation, but it does not explicitly distinguish itself from sibling read tools such as tree_get or tree_check.

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?

It explains the key usage pattern: keep the returned roll and pass it back as `against` on the next read, and use `excused` for intended removals. It also names a when-not case by directing committed-roll gating to `quern.roll.audit`, though it does not broadly compare against most tree_* siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.