Full page · 02 · Moat

Session memory:
intent that survives the session.

Intent does not die with the session. Session groups carry a direct link to the session file, so the next session starts from accumulated intent — not from memory.

Core

Function groups are the memory layer, and session groups bridge the harness and the tools. The up-context answers — who calls this, with what guards — arrive inside an honesty envelope that labels its own incompleteness with explicit reasons. No silent gaps.

Live example

$ callers({ "function": "handle_controller_chain" })
{
  "callers": [{"callee_file": "src/bin/mcp.rs", "caller_file": "src/bin/mcp.rs", "caller_function": "handle_request", "start_line": 2138}],
  "excluded_count": 0,
  "excluded_paths": [],
  "freshness": {...},
  "function": "handle_controller_chain",
  "incomplete_reasons": ["no_edge_grammar_in_corpus(dart,nix,objc,pascal,svelte,vbnet,vue)", "unknown_callee_name_class_in_corpus(java,kotlin,lua,luau,ruby,swift)"],
  "line_ref": "working_tree",
  "possibly_incomplete": true,
  "total": 1
}

Real MCP tool output — verbatim excerpt. Field names and values are byte-identical to the live response; only the freshness block is collapsed to {...}. One caller (handle_request); the possibly_incomplete flag with explicit incomplete reasons is part of the output. Captured live against the DesignGraph codebase.

Fixture (verified format), not live output — the session-group shape below is byte-verbatim from tests/fixtures/group/groups.yaml (session:2026-08-31-001 with chat_ref):

version: 2
groups:
  - id: session:2026-08-31-001
    intent: "Preserve the session's ordinary function-group intent"
    claims:
      - id: R1
        text: "Both session members remain covered by the same claim contract"
    members:
      - "src/lib.rs::alpha"
      - "src/lib.rs::beta"
    rationale: "ordinary multi-member session group"
    chat_ref: "2026-08-31-001/chat.json"
    git_base: "opaque-base-2026-08-31"
    git_head: "opaque-head-2026-08-31"
    findings:
      - id: F1
        text: "Session fixture finding"
    evidence_refs:
      - label: "valid evidence"
        path: "evidence.json"
        sha256: "407909bb02651ad34e2d37d0d8d1d634e61a3321ea9bedc42ef574a2884166fd"
      - label: "broken evidence"
        path: "missing-evidence.json"
        sha256: "0000000000000000000000000000000000000000000000000000000000000000"

API surface

Tool
callers (up-context) + groups_manifest (session groups)
Parameters
callers: function (required), file, limit, include_all · groups_manifest: project
Returns
Callers with the honesty envelope (possibly_incomplete plus reasons); group manifest rows including session groups

Use cases

Honesty: every up-context answer labels its own incompleteness. Session-file links are internal mechanism, shown above only as a labeled illustration.