[
  {
    "name": "image_forge",
    "display_name": "Image Forge",
    "version": "1.0",
    "description": "Generate images via Gemini Flash/Pro. Returns base64 image data and a localhost serve URL.",
    "base_url": "https://town.krisadamstv.com",
    "trust_level": "write_safe",
    "when_to_use": "When you need a custom image — idea hero, banner, icon, diagram, character art.",
    "write_endpoints": [
      {
        "method": "POST",
        "path": "/api/v1/town/forge/image",
        "description": "Generate an image. Styles: cinematic, photorealistic, illustration, watercolor, sticker, isometric, comic, sketch, neon, none. Models: flash (fast), pro (quality).",
        "auth": "X-PIN: kronos",
        "body": {
          "aspect_ratio": "optional — 1:1, 16:9, 9:16, 3:2, 2:3",
          "model": "optional — flash or pro (default: flash)",
          "prompt": "required — describe the image",
          "style": "optional — style preset"
        }
      }
    ],
    "updated_at": "2026-04-28T15:48:57.167446545Z"
  },
  {
    "name": "intentions",
    "display_name": "Intentions Store",
    "version": "1.0",
    "description": "Track open intentions (goals, tasks, observations) in Freddy's mind. Intentions drive heat scores and influence memory context.",
    "base_url": "http://localhost:8190",
    "trust_level": "write_safe",
    "when_to_use": "When tracking a goal, a task Freddy is working on, or something Kris has asked to be followed up on.",
    "read_endpoints": [
      {
        "method": "GET",
        "path": "/intentions/open",
        "description": "All open intentions"
      },
      {
        "method": "GET",
        "path": "/intentions/recent",
        "description": "Recent intentions (all statuses)"
      },
      {
        "method": "GET",
        "path": "/intentions/get",
        "description": "Get by ID (?id=xxx)"
      }
    ],
    "write_endpoints": [
      {
        "method": "POST",
        "path": "/intentions/create",
        "description": "Create a new intention"
      },
      {
        "method": "POST",
        "path": "/intentions/update",
        "description": "Update an existing intention"
      },
      {
        "method": "POST",
        "path": "/intentions/resolve",
        "description": "Resolve/close an intention"
      }
    ],
    "related": [
      "memory_broker",
      "foresight"
    ],
    "updated_at": "2026-04-28T15:48:57.167511446Z"
  },
  {
    "name": "workshop",
    "display_name": "Workshop",
    "version": "1.0",
    "description": "Experimental laboratory — cloud data feeds, formula benches, discoveries log.",
    "base_url": "https://town.krisadamstv.com",
    "trust_level": "read_only",
    "when_to_use": "When looking for new external signals, sector data, or discoveries that have been logged by Workshop agents.",
    "read_endpoints": [
      {
        "method": "GET",
        "path": "/api/v1/workshop",
        "description": "Workshop state"
      },
      {
        "method": "GET",
        "path": "/api/v1/workshop/discoveries",
        "description": "Recent discoveries from Workshop crawlers"
      }
    ],
    "related": [
      "memory_broker",
      "turnstile"
    ],
    "updated_at": "2026-04-28T15:48:57.167642635Z"
  },
  {
    "name": "turnstile",
    "display_name": "Turnstile",
    "version": "1.0",
    "description": "Tracks entry receipts — logs when significant external events (tweets, articles, signals) are first seen by the town.",
    "base_url": "https://town.krisadamstv.com",
    "trust_level": "read_only",
    "when_to_use": "When checking what new external signals have entered the town recently.",
    "read_endpoints": [
      {
        "method": "GET",
        "path": "/api/v1/turnstile/status",
        "description": "Recent entry receipts"
      }
    ],
    "related": [
      "workshop",
      "memory_broker"
    ],
    "updated_at": "2026-04-28T15:48:57.167696248Z"
  },
  {
    "name": "memory_broker",
    "display_name": "Memory Broker",
    "version": "1.0",
    "description": "Freddy's memory gatekeeper. Answers 'what does Freddy need to know right now?' Provides heat scores, context slices, and signal promotion.",
    "base_url": "http://localhost:8190",
    "trust_level": "write_safe",
    "when_to_use": "At the start of any Freddy context to understand the current memory landscape. Use /memory/fields for a dashboard view, /memory/context for actual memories.",
    "read_endpoints": [
      {
        "method": "GET",
        "path": "/memory/fields",
        "description": "Mind field dashboard (domain heat, open intentions, pending actions)"
      },
      {
        "method": "GET",
        "path": "/memory/context",
        "description": "Context slice for a domain (?domain=all|money|media|town|..., ?limit=N)"
      },
      {
        "method": "GET",
        "path": "/memory/heat/{domain}",
        "description": "Heat score breakdown for a domain"
      },
      {
        "method": "GET",
        "path": "/memory/signals/pending",
        "description": "Unprocessed signals awaiting promotion"
      },
      {
        "method": "GET",
        "path": "/memory/why/{id}",
        "description": "Why is this item in context?"
      }
    ],
    "write_endpoints": [
      {
        "method": "POST",
        "path": "/memory/signal",
        "description": "Ingest a raw signal into the broker"
      },
      {
        "method": "POST",
        "path": "/memory/promote",
        "description": "Promote a signal to an intention"
      },
      {
        "method": "POST",
        "path": "/memory/harvest",
        "description": "Harvest a resolved intention into the Weave"
      }
    ],
    "related": [
      "intentions",
      "action_bus",
      "bench"
    ],
    "updated_at": "2026-04-28T15:48:57.167744266Z"
  },
  {
    "name": "action_bus",
    "display_name": "Action Bus",
    "version": "1.0",
    "description": "3-tier safety system for Freddy's proposed actions. Tier 1 auto-approves, Tier 2 soft-approves after 4h, Tier 3 requires Kris.",
    "base_url": "http://localhost:8190",
    "trust_level": "kris_required",
    "when_to_use": "When Freddy wants to propose doing something — drafting a page, generating an image, creating a ticket, sending a message. Log it here first.",
    "read_endpoints": [
      {
        "method": "GET",
        "path": "/actions/pending",
        "description": "All pending/proposed actions"
      },
      {
        "method": "GET",
        "path": "/actions/recent",
        "description": "Recent actions (?n=20)"
      },
      {
        "method": "GET",
        "path": "/actions/stats",
        "description": "Action statistics by tier and status"
      },
      {
        "method": "GET",
        "path": "/actions/get/{id}",
        "description": "Get a specific action"
      }
    ],
    "write_endpoints": [
      {
        "method": "POST",
        "path": "/actions/propose",
        "description": "Propose an action (auto-classified into tier 1/2/3)"
      },
      {
        "method": "POST",
        "path": "/actions/approve/{id}",
        "description": "Approve a pending action"
      },
      {
        "method": "POST",
        "path": "/actions/reject/{id}",
        "description": "Reject an action"
      },
      {
        "method": "POST",
        "path": "/actions/complete/{id}",
        "description": "Mark an action as complete with outcome"
      }
    ],
    "related": [
      "memory_broker",
      "skills"
    ],
    "updated_at": "2026-04-28T15:48:57.167819548Z"
  },
  {
    "name": "idea_forge",
    "display_name": "Idea Forge",
    "version": "1.0",
    "description": "Publish a fully formatted idea page to ideas.krisadamstv.com. Generates hero image, section images, favicon, and HTML from your markdown.",
    "base_url": "https://town.krisadamstv.com",
    "trust_level": "write_safe",
    "when_to_use": "When Kris says 'make it a page', 'publish it', 'idea page', or 'write it up'. Also when a raw idea is described and needs a permanent URL.",
    "not_for": "Incremental edits to existing pages — use the publish.py script directly for that.",
    "write_endpoints": [
      {
        "method": "POST",
        "path": "/api/v1/town/forge/idea",
        "description": "Create and publish a full idea page. ~60-180s. Blocks until published.",
        "auth": "X-PIN: kronos",
        "body": {
          "concept_prompt": "image generation prompt for the hero image",
          "readme_markdown": "full markdown content (no hero image line — prepended automatically)",
          "slug": "url-safe slug (lowercase, hyphens only)",
          "title": "human-readable title"
        },
        "returns": {
          "published": "true on success",
          "url": "live URL of the published idea"
        }
      }
    ],
    "related": [
      "image_forge"
    ],
    "updated_at": "2026-04-28T15:48:57.167217304Z"
  },
  {
    "name": "foresight",
    "display_name": "Foresight Engine",
    "version": "1.0",
    "description": "Track prophecies (predictions about the world) and score them when they resolve. Calibration rate feeds the Bench.",
    "base_url": "http://localhost:8190",
    "trust_level": "write_safe",
    "when_to_use": "When Freddy makes a prediction, or when checking the prediction calibration score.",
    "read_endpoints": [
      {
        "method": "GET",
        "path": "/foresight/open",
        "description": "Open prophecies"
      },
      {
        "method": "GET",
        "path": "/foresight/stats",
        "description": "Calibration stats"
      },
      {
        "method": "GET",
        "path": "/foresight/get",
        "description": "Get by ID (?id=xxx)"
      }
    ],
    "write_endpoints": [
      {
        "method": "POST",
        "path": "/foresight/resolve",
        "description": "Resolve a prophecy with outcome"
      },
      {
        "method": "POST",
        "path": "/foresight/refresh",
        "description": "Trigger a foresight refresh cycle"
      }
    ],
    "related": [
      "intentions",
      "bench"
    ],
    "updated_at": "2026-04-28T15:48:57.167574672Z"
  },
  {
    "name": "skills",
    "display_name": "Skill Library",
    "version": "1.0",
    "description": "Reusable workflow recipes — Freddy's learned procedures. Inspired by Voyager + Sammy orbit corpus. Degradation tracked automatically.",
    "base_url": "http://localhost:8190",
    "trust_level": "write_safe",
    "when_to_use": "Before starting a complex workflow, search the skill library first. If a skill exists, use it. If it succeeds or fails, record the outcome.",
    "read_endpoints": [
      {
        "method": "GET",
        "path": "/skills/search",
        "description": "Search skills (?q=text\u0026domain=X\u0026limit=N)"
      },
      {
        "method": "GET",
        "path": "/skills/get/{id}",
        "description": "Get a skill by ID"
      },
      {
        "method": "GET",
        "path": "/skills/recent",
        "description": "Recently used skills (?n=10)"
      },
      {
        "method": "GET",
        "path": "/skills/stats",
        "description": "Skill library statistics"
      }
    ],
    "write_endpoints": [
      {
        "method": "POST",
        "path": "/skills/record",
        "description": "Create or update a skill (upsert by name+domain)"
      },
      {
        "method": "POST",
        "path": "/skills/outcome/{id}",
        "description": "Record success/failure outcome {success: bool}"
      }
    ],
    "related": [
      "action_bus"
    ],
    "updated_at": "2026-04-28T15:48:57.167900935Z"
  },
  {
    "name": "bench",
    "display_name": "Freddy Bench",
    "version": "1.0",
    "description": "7-metric health report for Freddy's mind. Daily report generated at 00:05. Grades: excellent, good, fair, poor.",
    "base_url": "http://localhost:8190",
    "trust_level": "read_only",
    "when_to_use": "When checking how Freddy is performing or identifying areas of cognitive decay (unresolved loops, low prediction calibration, etc.).",
    "read_endpoints": [
      {
        "method": "GET",
        "path": "/bench/today",
        "description": "Today's health report (generated on demand if missing)"
      },
      {
        "method": "GET",
        "path": "/bench/history",
        "description": "Historical reports (?days=14)"
      },
      {
        "method": "GET",
        "path": "/bench/trend",
        "description": "7-day metric trends (?days=7)"
      }
    ],
    "related": [
      "memory_broker",
      "intentions",
      "foresight"
    ],
    "updated_at": "2026-04-28T15:48:57.167997224Z"
  }
]
