Skip to main content
Glama

boot_report

Generates an orientation report by reading your identity document, scanning memories, and finding the latest transcript to detect information gaps. Use at session start to regain context.

Instructions

Generate an orientation report for session start. Reads identity document, scans memories, finds latest transcript, and detects gaps in what was loaded. Call this first thing every session.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
identity_pathYesPath to identity.md (e.g., .rekindle/identity.md)
transcript_dirYesPath to transcripts directory (e.g., .rekindle/transcripts)
projectNoActive project name for scoped orientation

Implementation Reference

  • The tool handler logic: registers an MCP tool named 'boot_report' that takes identity_path, transcript_dir, and optional project, generates an orientation report via OrientationService, and returns it as formatted markdown.
    server.tool(
      "boot_report",
      "Generate an orientation report for session start. Reads identity document, scans memories, finds latest transcript, and detects gaps in what was loaded. Call this first thing every session.",
      {
        identity_path: z
          .string()
          .describe("Path to identity.md (e.g., .rekindle/identity.md)"),
        transcript_dir: z
          .string()
          .describe(
            "Path to transcripts directory (e.g., .rekindle/transcripts)"
          ),
        project: z
          .string()
          .optional()
          .describe("Active project name for scoped orientation"),
      },
      async ({ identity_path, transcript_dir, project }) => {
        const result = orientationService.generate({
          identityPath: identity_path,
          transcriptDir: transcript_dir,
          project,
        });
        const markdown = OrientationRenderer.toMarkdown(result);
    
        return {
          content: [{ type: "text" as const, text: markdown }],
        };
      }
    );
  • The input schema using Zod: three parameters (identity_path required, transcript_dir required, project optional).
    {
      identity_path: z
        .string()
        .describe("Path to identity.md (e.g., .rekindle/identity.md)"),
      transcript_dir: z
        .string()
        .describe(
          "Path to transcripts directory (e.g., .rekindle/transcripts)"
        ),
      project: z
        .string()
        .optional()
        .describe("Active project name for scoped orientation"),
    },
  • Registration via server.tool() call with name 'boot_report' and description.
      server.tool(
        "boot_report",
        "Generate an orientation report for session start. Reads identity document, scans memories, finds latest transcript, and detects gaps in what was loaded. Call this first thing every session.",
        {
          identity_path: z
            .string()
            .describe("Path to identity.md (e.g., .rekindle/identity.md)"),
          transcript_dir: z
            .string()
            .describe(
              "Path to transcripts directory (e.g., .rekindle/transcripts)"
            ),
          project: z
            .string()
            .optional()
            .describe("Active project name for scoped orientation"),
        },
        async ({ identity_path, transcript_dir, project }) => {
          const result = orientationService.generate({
            identityPath: identity_path,
            transcriptDir: transcript_dir,
            project,
          });
          const markdown = OrientationRenderer.toMarkdown(result);
    
          return {
            content: [{ type: "text" as const, text: markdown }],
          };
        }
      );
    }
  • src/server.ts:23-24 (registration)
    Where registerBootReport is called to register the tool on the MCP server.
    registerBootReport(server, storage);
    registerEndSession(server, storage);
  • The OrientationService.generate() method called by the handler — reads identity, memory stats, checkpoint, latest transcript, then detects gaps and scores orientation readiness.
    export class OrientationService {
      constructor(private storage: RekindleStorage) {}
    
      generate(config: OrientationConfig): OrientationResult {
        let identityLoaded = false;
        let identityContent: string | undefined;
    
        if (existsSync(config.identityPath)) {
          const raw = readFileSync(config.identityPath, "utf-8");
          identityLoaded = raw.trim().length > 0;
          if (identityLoaded) identityContent = raw;
        }
    
        const stats = this.storage.stats();
        const checkpoint = this.storage.getLatestCheckpoint(config.project);
        const transcript = findLatestTranscript(config.transcriptDir);
        const hasTranscript = transcript !== null;
        const hasCheckpoint = checkpoint !== null;
    
        const gaps = detectGaps(stats, identityLoaded, hasTranscript, hasCheckpoint);
        const { score, breakdown } = calculateScore(
          identityLoaded,
          hasCheckpoint,
          hasTranscript,
          stats,
          config.project
        );
    
        const preview =
          transcript && transcript.content.length > 1500
            ? transcript.content.slice(0, 1500) + "\n\n[...truncated]"
            : transcript?.content;
    
        return {
          identity: {
            loaded: identityLoaded,
            path: config.identityPath,
            content: identityContent,
          },
          memoryStats: stats,
          checkpoint: {
            exists: hasCheckpoint,
            content: checkpoint?.content,
            created_at: checkpoint?.created_at,
          },
          transcript: {
            exists: hasTranscript,
            name: transcript?.name,
            preview,
          },
          gaps,
          score,
          scoreBreakdown: breakdown,
        };
      }
    }
Behavior3/5

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

No annotations provided, so description carries full burden. It describes internal operations (reads, scans, detects) but does not disclose whether it is read-only, has side effects, or requires authentication. Partial transparency.

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, then details. No redundant or unnecessary words. 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 no output schema, the description adequately explains the high-level function and internal steps. It covers what the tool does, though the return format (report) is not elaborated. Sufficient for the complexity.

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 covers all 3 parameters with descriptions. The description does not add additional meaning or constraints 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 states it generates an orientation report for session start, with specific actions listed (reads identity, scans memories, etc.). It is distinct from sibling memory management 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?

Explicitly says 'Call this first thing every session', providing clear when-to-use guidance. However, lacks explanation of when not to use or alternatives, though siblings are unrelated.

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

Install Server

Other Tools

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/Skitchy/rekindle'

If you have feedback or need assistance with the MCP directory API, please join our Discord server