Skip to main content
Glama

record_decision

Save a project decision with its rationale to memory for later recall, and replace a prior decision by passing its ID when the new choice reverses it.

Instructions

Record a decision just made (with rationale when known) into project memory for later recall and check_decision. If it reverses a recalled one, pass its id as replaces. Omit project for the current repo.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "text": "<text>"
    },
    "name": "record_decision"
  }
}

Input Schema

NameRequiredDescriptionDefault
textYesWhat to remember, as one concrete sentence.
projectNoProject path; omit for the current repo.
replacesNoId of a recalled fact this one reverses or replaces; that one becomes history.
rationaleNoFor a decision: why it was made.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv0.11.4
    • addedInput schema / properties / replaces
      Added value: +{
      +  "description": "Id of a recalled fact this one reverses or replaces; that one becomes history.",
      +  "format": "int64",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "anyOf": [
      +    {
      +      "properties": {
      +        "id": {
      +          "type": [
      +            "integer",
      +            "null"
      +          ]
      +        },
      +        "kind": {
      +          "type": "string"
      +        },
      +        "message": {
      +          "type": "string"
      +        },
      +        "project": {
      +          "type": "string"
      +        },
      +        "replaces": {
      +          "properties": {
      +            "id": {
      +              "type": "integer"
      +            },
      +            "reason": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "result": {
      +              "oneOf": [
      +                {
      +                  "const": "replaced",
      +                  "type": "string"
      +                },
      +                {
      +                  "const": "disputed",
      +                  "type": "string"
      +                },
      +                {
      +                  "const": "rejected",
      +                  "type": "string"
      +                }
      +              ]
      +            }
      +          },
      +          "required": [
      +            "id",
      +            "result"
      +          ],
      +          "type": [
      +            "object",
      +            "null"
      +          ]
      +        }
      +      },
      +      "required": [
      +        "kind",
      +        "project",
      +        "message"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "properties": {
      +        "notice": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "notice"
      +      ],
      +      "type": "object"
      +    }
      +  ],
      +  "type": "object"
      +}
  2. Changed5 schema fields changedv0.11.3
    • removedInput schema / $schema
      Removed value: -"https://json-schema.org/draft/2020-12/schema"
    • changedInput schema / properties / project / description
      Previous value: -"Project-path substring to attach it to; omit to use the repo the server runs in."New value: +"Project path; omit for the current repo."
    • changedInput schema / properties / rationale / description
      Previous value: -"For a decision, WHY it was made (the rationale). Surfaced by check_decision later."New value: +"For a decision: why it was made."
    • changedInput schema / properties / text / description
      Previous value: -"What to remember (one concrete sentence)."New value: +"What to remember, as one concrete sentence."
    • removedInput schema / title
      Removed value: -"RememberArgs"
  3. Changed1 schema field changedv0.6.2
    • addedInput schema / properties / rationale
      Added value: +{
      +  "description": "For a decision, WHY it was made (the rationale). Surfaced by check_decision later.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  4. Addedv0.6.0

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare write (readOnlyHint=false), non-idempotent, non-destructive, and closed-world, so the safety profile is covered. Beyond that, the description adds persistence semantics ('into project memory for later recall and check_decision') and the consequence of `replaces`, which matter for a memory write. What it does not add is what happens on a near-duplicate record, which the non-idempotent hint leaves ambiguous.

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 tight sentences, front-loaded with the core action, then the conditional path, then the default. Nothing is padded and each clause carries a distinct instruction.

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 tool is a simple single-write with four fully documented params and an output schema, so return handling and most field meaning are already covered elsewhere. The description supplies the lifecycle context (recall, check_decision, history via replaces) needed to call it correctly; only duplicate-handling guidance is missing.

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%, and the description's parameter notes (rationale when known, replaces for a reversal, omit project for the current repo) largely restate the schema text. Baseline 3 is appropriate since the schema already carries the per-field meaning.

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?

Names a specific verb and resource ('Record a decision') plus the destination ('into project memory'), and points at two downstream consumers (later recall and check_decision). It does not explicitly separate itself from adjacent writers like record_gotcha or flag_fact, so an agent must infer the decision-vs-gotcha boundary from the noun alone.

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?

Gives clear timing ('just made'), a conditional ('with rationale when known'), a special-case path ('If it reverses a recalled one, pass its id as replaces'), and a default ('Omit project for the current repo'). It stops short of stating when NOT to use it in favor of a sibling writer, but the conditions it does give are actionable.

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