{
  "$schema": "./docs/portfolio-public.schema.json",
  "contract": "hraness.portfolio-public/v1",
  "digest": "sha256:13ba5386655e487c3e3a724426b04d65522da733bdd5b7a24792c9fc9bc14f58",
  "formatVersion": 1,
  "foundations": [
    {
      "address": "account.hraness.com",
      "description": "shared sign-in and account service",
      "detail": "The account service supplies Suite OAuth, subscription receipts, and short-lived product-scoped identity.",
      "id": "accounts",
      "kind": "service",
      "name": "accounts",
      "source": {
        "visibility": "private"
      },
      "url": "https://account.hraness.com"
    },
    {
      "address": "apple-foundation",
      "description": "on-device Apple model bridge",
      "detail": "A bounded Swift bridge and Rust client for Apple Foundation Models on supported macOS 26+ Apple Silicon hosts.",
      "id": "apple-foundation",
      "kind": "package",
      "name": "APPLE-FOUNDATION",
      "source": {
        "repositoryUrl": "https://github.com/hraness/apple-foundation",
        "visibility": "open-source"
      }
    },
    {
      "address": "@hraness/build-governance",
      "description": "shared build policy and inventory",
      "detail": "An Effect architecture checker and canonical package-inventory derivation. Each consumer retains its own policy and product-specific extensions.",
      "id": "build-governance",
      "kind": "package",
      "name": "BUILD-GOVERNANCE",
      "source": {
        "repositoryUrl": "https://github.com/hraness/build-governance",
        "visibility": "open-source"
      }
    },
    {
      "address": "@hraness/cli-update",
      "description": "automatic updates for installed CLIs",
      "detail": "TypeScript and Rust libraries check installation ownership, verify releases, and preserve update preferences before replacing an idle CLI installation.",
      "id": "cli-update",
      "kind": "package",
      "name": "CLI Update",
      "source": {
        "repositoryUrl": "https://github.com/hraness/cli-update",
        "visibility": "open-source"
      }
    },
    {
      "address": "@hraness/convex",
      "description": "stops ambiguous Convex deployments before a Vercel build runs them",
      "detail": "Shared parsing and deployment contracts for Convex-backed products.",
      "id": "convex-toolkit",
      "kind": "package",
      "name": "convex",
      "source": {
        "repositoryUrl": "https://github.com/hraness/convex",
        "visibility": "open-source"
      }
    },
    {
      "address": "@hraness/credits-foundation",
      "description": "prepaid credits protocol",
      "detail": "Shared money vocabulary, metered-command envelopes, and typed clients for paid tools. The separate Credits service owns balances, pricing, and checkout.",
      "id": "credits-foundation",
      "kind": "package",
      "name": "CREDITS-FOUNDATION",
      "source": {
        "repositoryUrl": "https://github.com/hraness/credits-foundation",
        "visibility": "open-source"
      }
    },
    {
      "address": "@hraness/design-kit",
      "description": "shared product compositions",
      "detail": "The public design foundation builds product-neutral compositions on top of @hraness/ui.",
      "id": "design-kit",
      "kind": "package",
      "name": "design-kit",
      "source": {
        "repositoryUrl": "https://github.com/hraness/design-kit",
        "visibility": "open-source"
      }
    },
    {
      "address": "@hraness/desktop-foundation",
      "description": "headless desktop control for product CLIs",
      "detail": "One background owner per product, a JSON command line, a terminal view agents can read, and an approval gate that waits for a person, in TypeScript and Rust. Version 1.0 removed the menu-bar and tray companion.",
      "id": "desktop-foundation",
      "kind": "package",
      "name": "DESKTOP-FOUNDATION",
      "source": {
        "repositoryUrl": "https://github.com/hraness/desktop-foundation",
        "visibility": "open-source"
      }
    },
    {
      "address": "@hraness/local-custody",
      "description": "private file and socket helpers for product CLIs",
      "detail": "Owner-only paths, atomic private file publication, bounded JSON control sockets, and protected descriptor input for product CLIs.",
      "id": "local-custody",
      "kind": "package",
      "name": "LOCAL-CUSTODY",
      "source": {
        "repositoryUrl": "https://github.com/hraness/local-custody",
        "visibility": "open-source"
      }
    },
    {
      "address": "@hraness/oh",
      "description": "local-first ontology kernel",
      "detail": "The public SQLite store, SDK, CLI, and Agent Skill provide durable research graphs behind the oh.computer surface.",
      "id": "oh",
      "kind": "package",
      "name": "oh kernel",
      "source": {
        "repositoryUrl": "https://github.com/hraness/oh",
        "visibility": "open-source"
      }
    },
    {
      "address": "@hraness/posthog",
      "description": "portfolio analytics schema",
      "detail": "The shared analytics package owns route classification, event schemas, and PostHog integration.",
      "id": "posthog-sdk",
      "kind": "package",
      "name": "posthog",
      "source": {
        "repositoryUrl": "https://github.com/hraness/posthog",
        "visibility": "open-source"
      }
    },
    {
      "address": "@hraness/relay",
      "description": "shared Convex store for device commands",
      "detail": "Verified-email device enrollment, a device-command lifecycle, and end-to-end encrypted projections. The store holds ciphertext envelopes and never sees plaintext session content.",
      "id": "relay",
      "kind": "package",
      "name": "relay",
      "source": {
        "repositoryUrl": "https://github.com/hraness/relay",
        "visibility": "open-source"
      },
      "url": "https://github.com/hraness/relay"
    },
    {
      "address": "@hraness/result",
      "description": "typed Result and Option",
      "detail": "A small public Result and Option toolkit used across runtime boundaries.",
      "id": "result",
      "kind": "package",
      "name": "result",
      "source": {
        "repositoryUrl": "https://github.com/hraness/result",
        "visibility": "open-source"
      }
    },
    {
      "address": "@hraness/suite-accounts",
      "description": "Suite identity protocol",
      "detail": "Validated client and protocol boundaries between products and the Accounts authority.",
      "id": "suite-accounts",
      "kind": "package",
      "name": "suite-accounts",
      "source": {
        "repositoryUrl": "https://github.com/hraness/suite-accounts",
        "visibility": "open-source"
      }
    },
    {
      "address": "@hraness/support-foundation",
      "description": "optional updates and support",
      "detail": "Shared product-update and paid-support invitations, human checkout handoffs, and local preferences. Accounts owns consent, prices, and checkout.",
      "id": "support-foundation",
      "kind": "package",
      "name": "SUPPORT-FOUNDATION",
      "source": {
        "repositoryUrl": "https://github.com/hraness/support-foundation",
        "visibility": "open-source"
      }
    },
    {
      "address": "@hraness/ui",
      "description": "accessible React Aria primitives",
      "detail": "The public product-neutral component and theme layer shared by Hraness products.",
      "id": "ui",
      "kind": "package",
      "name": "ui",
      "source": {
        "repositoryUrl": "https://github.com/hraness/ui",
        "visibility": "open-source"
      }
    },
    {
      "address": "@hraness/vercel-delivery",
      "description": "deployment checks and Preview policy for Next.js apps on Vercel",
      "detail": "Shared Vercel environment and delivery helpers used by independently deployed products.",
      "id": "vercel-delivery",
      "kind": "package",
      "name": "vercel-delivery",
      "source": {
        "repositoryUrl": "https://github.com/hraness/vercel-delivery",
        "visibility": "open-source"
      }
    },
    {
      "address": "@hraness/web-discovery",
      "description": "SEO and machine discovery",
      "detail": "Shared metadata, structured data, sitemaps, and agent-facing discovery contracts.",
      "id": "web-discovery",
      "kind": "package",
      "name": "web-discovery",
      "source": {
        "repositoryUrl": "https://github.com/hraness/web-discovery",
        "visibility": "open-source"
      }
    }
  ],
  "packs": [
    {
      "slug": "relationships",
      "title": "Relationships",
      "postTitle": "Relationships",
      "summary": "The Relationships pack brings together contact management, message assistance, source-cited dossiers, and shareable life timelines.",
      "thesis": "contacts, conversations, dossiers, and the chapters of a life.",
      "tone": "rose",
      "postHref": "/writing/the-relationships-pack",
      "members": [
        "peopleblade",
        "message-like-me",
        "wrench",
        "soulscrape",
        "lifedaysleft"
      ],
      "builtOn": [
        "algal",
        "xcb"
      ],
      "edges": [
        {
          "from": "peopleblade",
          "to": "wrench",
          "verb": "connects",
          "status": "shipped",
          "relation": "peopleblade>wrench"
        },
        {
          "from": "message-like-me",
          "to": "wrench",
          "verb": "operates",
          "status": "shipped",
          "relation": "message-like-me>wrench"
        },
        {
          "from": "peopleblade",
          "to": "message-like-me",
          "verb": "shares",
          "status": "shipped",
          "relation": "message-like-me>peopleblade"
        },
        {
          "from": "message-like-me",
          "to": "algal",
          "verb": "evolves",
          "status": "shipped",
          "relation": "message-like-me>algal"
        },
        {
          "from": "message-like-me",
          "to": "xcb",
          "verb": "routes",
          "status": "shipped",
          "relation": "message-like-me>xcb"
        },
        {
          "from": "algal",
          "to": "xcb",
          "verb": "delegates",
          "status": "shipped",
          "relation": "algal>xcb"
        }
      ]
    },
    {
      "slug": "knowledge",
      "title": "Knowledge",
      "postTitle": "Knowledge",
      "summary": "The Knowledge pack covers cited research, memory with sources, trading-system design, and a daily news page that explains its rankings.",
      "thesis": "research and memory with sources, trading-system design, and a daily front page.",
      "tone": "indigo",
      "postHref": "/writing/the-knowledge-pack",
      "members": [
        "kb",
        "oh-computer",
        "sponge",
        "sloptrade",
        "roughday"
      ],
      "builtOn": [
        "algal",
        "wrench",
        "xcb"
      ],
      "edges": [
        {
          "from": "kb",
          "to": "oh-computer",
          "verb": "proves",
          "status": "shipped",
          "relation": "kb>oh-computer"
        },
        {
          "from": "sponge",
          "to": "kb",
          "verb": "publishes",
          "status": "shipped",
          "relation": "sponge>kb",
          "labelAt": {
            "narrow": 0.6
          }
        },
        {
          "from": "sponge",
          "to": "algal",
          "verb": "evolves",
          "status": "shipped",
          "relation": "sponge>algal"
        },
        {
          "from": "sponge",
          "to": "wrench",
          "verb": "captures",
          "status": "shipped",
          "relation": "sponge>wrench",
          "labelAt": {
            "narrow": 0.62
          }
        },
        {
          "from": "sponge",
          "to": "xcb",
          "verb": "routes",
          "status": "shipped",
          "relation": "sponge>xcb",
          "labelAt": {
            "narrow": 0.65
          }
        },
        {
          "from": "xcb",
          "to": "kb",
          "verb": "searches",
          "status": "shipped",
          "relation": "xcb>kb",
          "labelAt": {
            "narrow": 0.4
          }
        }
      ]
    },
    {
      "slug": "media",
      "title": "Media",
      "postTitle": "Media",
      "summary": "icon.place, SlopCamera, and Soundfish keep icons, video, and music as sources an agent can revise, and two of them run seeded or evolving work on ALGAL.",
      "thesis": "pictures, motion, and music an agent can keep revising.",
      "tone": "amber",
      "postHref": "/writing/the-media-pack",
      "members": [
        "iconplace",
        "slopcamera",
        "soundfish"
      ],
      "builtOn": [
        "algal"
      ],
      "edges": [
        {
          "from": "iconplace",
          "to": "algal",
          "verb": "records",
          "status": "shipped",
          "relation": "iconplace>algal"
        },
        {
          "from": "slopcamera",
          "to": "algal",
          "verb": "animates",
          "status": "shipped",
          "relation": "slopcamera>algal"
        },
        {
          "from": "soundfish",
          "to": "algal",
          "verb": "evolves",
          "status": "shipped",
          "relation": "soundfish>algal"
        },
        {
          "from": "slopcamera",
          "to": "iconplace",
          "verb": "bundles",
          "status": "planned"
        },
        {
          "from": "slopcamera",
          "to": "soundfish",
          "verb": "scores",
          "status": "planned"
        }
      ]
    },
    {
      "slug": "token-maximalists",
      "title": "Tools for Token Maximalists",
      "postTitle": "Tools for Token Maximalists",
      "summary": "Tools for Token Maximalists brings together agent routing, compaction, testing, capability checks, collaboration, and software-factory reporting.",
      "thesis": "get more work out of every subscription, context window, and agent run.",
      "tone": "emerald",
      "postHref": "/writing/tools-for-token-maximalists",
      "members": [
        "xcb",
        "algal",
        "gobstopper",
        "sys1",
        "aicharts",
        "direct",
        "clankdar",
        "valhalla",
        "swft"
      ],
      "builtOn": [],
      "edges": [
        {
          "from": "xcb",
          "to": "algal",
          "verb": "replays",
          "status": "shipped",
          "relation": "xcb>algal"
        },
        {
          "from": "algal",
          "to": "xcb",
          "verb": "delegates",
          "status": "shipped",
          "relation": "algal>xcb"
        },
        {
          "from": "xcb",
          "to": "gobstopper",
          "verb": "compacts",
          "status": "shipped",
          "relation": "gobstopper>xcb"
        },
        {
          "from": "xcb",
          "to": "aicharts",
          "verb": "exports",
          "status": "shipped",
          "relation": "xcb>aicharts"
        },
        {
          "from": "aicharts",
          "to": "gobstopper",
          "verb": "reads",
          "status": "shipped",
          "relation": "aicharts>gobstopper"
        },
        {
          "from": "xcb",
          "to": "sys1",
          "verb": "judges",
          "status": "planned"
        }
      ]
    }
  ],
  "projects": [
    {
      "canonicalUrl": "https://gobstopper.sh",
      "description": "compacts long agent sessions into smaller copies, keeping every byte",
      "emoji": "🍬",
      "featured": true,
      "homePack": "token-maximalists",
      "id": "gobstopper",
      "marketing": {
        "category": "session compaction tool",
        "headlines": [],
        "status": "proposed",
        "tagline": "context compaction you can undo."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "gobstopper",
        "names": {
          "name": "Gobstopper",
          "command": "gobstopper"
        },
        "category": "Session compaction tool",
        "tagline": "Context compaction you can undo.",
        "short": "Compacts long agent sessions into smaller copies, keeping every byte",
        "meta": "Gobstopper makes long Claude Code and Codex sessions smaller. A local proxy compacts live requests, and saved sessions get a smaller copy beside the original.",
        "medium": "Gobstopper is a free, open-source command-line tool that makes long coding sessions smaller. A local proxy compacts live Claude Code and Codex requests. For saved sessions, it writes a smaller copy and keeps the original in a local vault.",
        "long": "Long coding-agent sessions collect tool output that mattered once: test logs from runs that have since passed, file listings from before a refactor, stack traces for bugs already fixed. Every turn sends all of it to the model again. Gobstopper is a free, open-source command-line tool that finds your Claude Code and Codex sessions, shows what each compaction strategy would cut, and writes a smaller copy. Before it writes, it stores the original bytes in a content-addressed vault on your machine, so you can search for the exact record a compaction left out or restore the whole session.",
        "hero": {
          "heading": "Context compaction you can undo.",
          "summary": "Keep long coding sessions smaller, with the original available to restore.",
          "primaryAction": "Install Gobstopper",
          "secondaryAction": "How it works"
        },
        "headings": {
          "home-live": "Keep the recent work in view.",
          "home-file-copy": "Try a smaller copy. Keep a way back.",
          "home-results": "38% smaller on requests it compacted.",
          "home-film": "Watch it in 75 seconds.",
          "home-install": "Start with one session.",
          "home-questions": "Before you install.",
          "home-related": "Other tools from our studio",
          "home-search-title": "Gobstopper: context compaction proxy for Claude Code and Codex",
          "home-primitive-preview": "Preview the cut",
          "home-primitive-original": "Keep the original",
          "home-primitive-resume": "Check before resuming"
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-24"
      },
      "name": "Gobstopper",
      "source": {
        "repositoryUrl": "https://github.com/hraness/gobstopper",
        "visibility": "open-source"
      },
      "surface": {
        "actionLabel": "explore Gobstopper",
        "interfaces": [
          "CLI",
          "MCP"
        ],
        "proof": "automatic context compaction that snapshots each transcript before changing it"
      }
    },
    {
      "canonicalUrl": "https://xcb.sh",
      "description": "routes coding tasks across the claude, codex, and devin plans you have",
      "emoji": "⚔️",
      "featured": true,
      "homePack": "token-maximalists",
      "id": "xcb",
      "marketing": {
        "category": "agent subscription router",
        "headlines": [],
        "status": "proposed",
        "tagline": "use your claude, codex, and devin plans from one agent."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "xcb",
        "names": {
          "name": "Excalibur (xcb)",
          "command": "xcb",
          "formerly": [
            "AgentMixer",
            "OOMPA",
            "HRA"
          ]
        },
        "category": "Agent subscription router",
        "tagline": "Use your Claude, Codex, and Devin plans from one agent.",
        "short": "Routes coding tasks across the Claude, Codex, and Devin plans you have",
        "meta": "Excalibur (xcb) routes coding tasks across the Claude, Codex, and Devin subscriptions you already pay for, picking an account that is signed in and idle.",
        "medium": "Excalibur (xcb) routes coding tasks across the Claude, Codex, and Devin subscriptions you already pay for. Each task runs on an account that is signed in, idle, and not at a known usage limit, on a model that fits the work.",
        "long": "Excalibur (xcb) is a terminal and router for developers who pay for more than one coding agent. Type the work into one conversation, and xcb sends each task to a Claude, Codex, or Devin account that is signed in, idle, and not at a known usage limit, on a model that fits the job. Tasks keep running after you close the terminal, every session appears on one screen, and each account runs one task at a time. Other agents can hand xcb work with one JSON command. xcb is free and MIT licensed, with releases for macOS and Linux.",
        "hero": {
          "heading": "Use your Claude, Codex, and Devin plans from one agent.",
          "summary": "Excalibur (xcb) is for developers who pay for more than one coding agent. Each task runs in Claude Code, Codex, or the Devin CLI on an account that is signed in, idle, and not at a known limit. Use its terminal or your own agent or app.",
          "primaryAction": "Install xcb",
          "secondaryAction": "See how it works"
        },
        "headings": {
          "home-router": "Use your quota before it resets",
          "home-interfaces": "Two ways to use xcb",
          "home-import-sessions": "Continue your Claude and Codex conversations",
          "home-install": "Install xcb",
          "home-questions": "Questions",
          "home-interface-agent": "As your coding agent",
          "home-interface-integration": "Inside your agent or app"
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-28"
      },
      "name": "Excalibur (xcb)",
      "source": {
        "repositoryUrl": "https://github.com/hraness/xcb",
        "visibility": "open-source"
      },
      "surface": {
        "actionLabel": "explore Excalibur (xcb)",
        "interfaces": [
          "CLI",
          "SDK"
        ],
        "proof": "a customizable terminal workspace, provider account management, and token usage tracking"
      }
    },
    {
      "canonicalUrl": "https://aicharts.io",
      "description": "model benchmark scores plotted against cost and tokens per task",
      "emoji": "📈",
      "featured": true,
      "homePack": "token-maximalists",
      "id": "aicharts",
      "marketing": {
        "category": "ai model comparison charts",
        "headlines": [],
        "status": "proposed",
        "tagline": "see which model wins at each price."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "aicharts",
        "names": {
          "name": "aicharts",
          "command": "aicharts",
          "formerly": [
            "CodingChart"
          ]
        },
        "category": "AI model comparison charts",
        "tagline": "See which model wins at each price.",
        "short": "Model benchmark scores plotted against cost and tokens per task",
        "meta": "aicharts plots published AI benchmark scores against cost and tokens per task, and a local collector measures your own agents' token use.",
        "medium": "aicharts plots published AI benchmark scores against cost and tokens per task, marking the best score at every budget. A local collector measures your own agents' token use.",
        "long": "Picking a model means guessing at a tradeoff between quality and price, because benchmark scores and prices live in different places. aicharts plots published benchmark scores against cost and tokens per task on one chart, so the strongest option at each budget is visible instead of implied. A local collector measures your own agents' token use, so the cost question covers your work, not only the models. aicharts is free and open source.",
        "hero": {
          "heading": "See which model wins at each price.",
          "summary": "Compare model benchmark scores, prices, and the tokens each task takes.",
          "primaryAction": "Browse the charts",
          "secondaryAction": "Measure your agent"
        },
        "headings": {
          "home-calculator": "Subscription vs API vs GPUs",
          "home-platform-group": "The agent platform",
          "home-personal-group": "The personal apps",
          "home-related": "Other tools from our studio",
          "home-about": "About aicharts",
          "home-search-title": "aicharts: AI model benchmark scores vs cost per task"
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-24"
      },
      "name": "aicharts",
      "source": {
        "repositoryUrl": "https://github.com/hraness/aicharts",
        "visibility": "open-source"
      },
      "surface": {
        "actionLabel": "compare models",
        "interfaces": [
          "web app"
        ],
        "proof": "interactive Pareto frontier and model benchmark charts"
      }
    },
    {
      "canonicalUrl": "https://wordcell.io",
      "description": "markdown knowledge base that gives agents the decisions behind code",
      "emoji": "📝",
      "featured": true,
      "homePack": "knowledge",
      "id": "kb",
      "marketing": {
        "category": "markdown knowledge base",
        "headlines": [],
        "status": "proposed",
        "tagline": "give the next session what this one learned."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "wordcell",
        "names": {
          "name": "Wordcell",
          "command": "wordcell",
          "formerly": [
            "KB"
          ]
        },
        "category": "Markdown knowledge base",
        "tagline": "Give the next session what this one learned.",
        "short": "Markdown knowledge base that gives agents the decisions behind code",
        "meta": "Wordcell keeps decisions, plans, and sources as Markdown beside your code, so coding agents can find them from the file they are about to change.",
        "medium": "Wordcell keeps decisions, plans, and sources as Markdown files beside your code. Coding agents find them by exact words, by meaning with an optional local model, or from the file they are about to change.",
        "long": "A new coding-agent session can read your code, but not the decisions that stayed in the last session's chat. Wordcell keeps those decisions as Markdown files beside the repository, with the plans that depend on them and the web pages and PDFs that informed them. Tie a note to the paths it explains, and an agent about to change that code runs one command to get the notes and plans for that path. Exact search, backlinks, and Git history run on your machine with no account or model, and every index rebuilds from files you can read in any editor. Wordcell is free and open source.",
        "hero": {
          "heading": "Give coding agents the decisions behind your code.",
          "summary": "Keep decisions, plans, and sources as Markdown beside your code.",
          "primaryAction": "Install Wordcell",
          "secondaryAction": "See an example"
        },
        "headings": {
          "home-related-group": "Works with Wordcell",
          "home-preview": "Your agent finds the rule and names the file",
          "home-install": "Save and find your first decision",
          "home-agent-search": "Let your agent search and add notes",
          "home-primitives": "What a vault gives you",
          "home-passages": "Find the passage with the answer",
          "home-scopes": "Your coding agent starts with what you already decided",
          "home-fit": "How Wordcell compares",
          "home-publish": "Publish your notes as a website",
          "home-trust": "The record stays yours",
          "home-questions": "Before you install",
          "home-related": "Other tools from our studio",
          "home-closing": "Give the next session what this one learned.",
          "home-search-title": "Wordcell: Markdown memory for coding agents",
          "home-primitive-files": "Files you own",
          "home-primitive-decisions": "Find a past decision",
          "home-primitive-context": "Context for the file at hand",
          "home-primitive-sources": "Sources you can reopen"
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-24"
      },
      "name": "Wordcell",
      "source": {
        "repositoryUrl": "https://github.com/hraness/wordcell",
        "visibility": "open-source"
      },
      "surface": {
        "actionLabel": "open Wordcell",
        "interfaces": [
          "CLI",
          "SDK",
          "Agent Skill"
        ],
        "proof": "Markdown recovered through backlinks, search, and Git context"
      }
    },
    {
      "canonicalUrl": "https://oh.computer",
      "description": "memory for agents that stores each fact with its sources and history",
      "emoji": "📚",
      "featured": true,
      "homePack": "knowledge",
      "id": "oh-computer",
      "marketing": {
        "category": "agent memory framework",
        "headlines": [],
        "status": "proposed",
        "tagline": "agent memory that shows its work."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "oh",
        "names": {
          "name": "Oh",
          "command": "oh"
        },
        "category": "Agent memory framework",
        "tagline": "Agent memory that shows its work.",
        "short": "Memory for agents that stores each fact with its sources and history",
        "meta": "Oh is open-source memory for agents that stores each fact with its sources and every change in a history you can replay.",
        "medium": "Oh is an open-source memory framework for agents. It stores each fact with the sources it rests on, keeps every change in a history you can replay, and answers with the evidence behind them.",
        "long": "Agent memory usually means a vector store: facts go in, answers come out, and nobody can say why. Oh is an open-source memory framework that keeps the reasoning visible. Each fact is stored with the sources it rests on, every change lands in a history you can replay, and queries return the evidence behind the answer. It runs locally as a CLI, SDK, and Agent Skill. Oh is free and MIT licensed.",
        "hero": {
          "heading": "Agent memory that shows its work.",
          "summary": "Store each fact with the sources it rests on, keep every change in a replayable history, and get answers with their evidence.",
          "primaryAction": "Install Oh",
          "secondaryAction": "How it works"
        },
        "headings": {
          "model-title": "Keep the source with the claim.",
          "trace-title": "Open the evidence behind an answer.",
          "interfaces-title": "Work with the same records from a terminal, TypeScript, or an agent.",
          "install-title": "Install and start with a local database.",
          "kernel-title": "Keep your memory on your machine.",
          "questions-title": "What to know before you install.",
          "home-object-question": "Question",
          "home-object-source": "Source",
          "home-object-capture": "Capture",
          "home-object-claim": "Claim",
          "home-object-citation": "Citation",
          "home-object-artifact": "Artifact",
          "home-trust-local": "Local by default",
          "home-trust-remote": "Remote services are opt-in",
          "home-interface-cli": "CLI",
          "home-interface-sdk": "TypeScript SDK",
          "home-interface-skill": "Agent Skill"
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-24"
      },
      "name": "Oh",
      "source": {
        "repositoryUrl": "https://github.com/hraness/oh",
        "visibility": "open-source"
      },
      "surface": {
        "actionLabel": "research with Oh",
        "interfaces": [
          "CLI",
          "SDK",
          "Agent Skill"
        ],
        "proof": "an inspectable question-to-citation research trace"
      }
    },
    {
      "canonicalUrl": "https://sponge.computer",
      "description": "local research service that keeps its sources and writes cited reports",
      "emoji": "🧽",
      "featured": true,
      "homePack": "knowledge",
      "id": "sponge",
      "marketing": {
        "category": "local deep research harness",
        "headlines": [],
        "status": "proposed",
        "tagline": "deep research that runs on your own machine."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "sponge",
        "names": {
          "name": "Sponge",
          "command": "spongev2"
        },
        "category": "Local deep research harness",
        "tagline": "Deep research that runs on your own machine.",
        "short": "Local research service that keeps its sources and writes cited reports",
        "meta": "Sponge runs deep research on your own machine. It keeps the text of every source, writes a cited report, and reaches models through Excalibur (xcb).",
        "medium": "Sponge runs research projects on your own machine. Give it a question and sources, and it keeps their text, writes and updates a cited report, and tests new research strategies before you adopt them.",
        "long": "Sponge is a local research harness. Each project has a question and a set of sources, and Sponge keeps the source text, writes and updates a cited report, and records its operations so work survives restarts. A background service that can start at login drives it, with terminal chat and status views. Deep mode plans the research, gathers public sources, recalls project memory, and audits a draft before it updates the report. Sponge runs on ALGAL, reaches models through Excalibur (xcb) so provider sign-ins stay there, keeps documents in Wordcell, and captures signed-in pages through GhostGet. A new strategy for brief research is tested in a sealed evaluation, and nothing changes until you adopt it or restore the previous one. Publishing makes a static Wordcell edition or puts selected documents on wordcell.io. It is in development, with releases in a private GitHub repository. The hosted library at sponge.computer is the earlier Sponge.",
        "hero": {
          "heading": "Deep research that runs on your own machine.",
          "summary": "Sponge runs as a background service with a terminal chat and a terminal status view. Ask a question, and it gathers sources, keeps their text, and writes a report that cites them.",
          "primaryAction": "Read the Knowledge pack post",
          "secondaryAction": "See the commands"
        },
        "headings": {
          "archive": "notes and working documents",
          "context": "context",
          "home-comparison": "Four Hraness tools do the work",
          "home-method": "From a question to a cited report",
          "home-interfaces": "Where to find Sponge today",
          "home-custody": "You decide what changes",
          "home-search-title": "Sponge: A deep-research harness that runs on your machine",
          "home-proof": "Start a research project from the terminal",
          "home-questions": "Before you begin.",
          "home-step-create": "Create a project",
          "home-step-research": "Ask, or go deep",
          "home-step-refresh": "Keep it current",
          "home-interface-papers": "Daily papers",
          "home-interface-library": "Sponge Library",
          "home-interface-harness": "The research harness"
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-29"
      },
      "name": "Sponge",
      "source": {
        "visibility": "private"
      },
      "surface": {
        "actionLabel": "Explore Sponge",
        "interfaces": [
          "CLI",
          "terminal UI"
        ],
        "proof": "cited reports from saved sources, with strategy changes tested in a sealed evaluation before you adopt them"
      }
    },
    {
      "canonicalUrl": "https://algal.computer",
      "description": "language and vm for agent programs that wait for approval and resume",
      "emoji": "🌱",
      "featured": true,
      "homePack": "token-maximalists",
      "id": "algal",
      "marketing": {
        "category": "agent programming language",
        "headlines": [],
        "status": "proposed",
        "tagline": "write agent programs that wait, resume, and replay."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "algal",
        "names": {
          "name": "ALGAL",
          "command": "algal",
          "formerly": [
            "Morphogen"
          ]
        },
        "category": "Agent programming language",
        "tagline": "Write agent programs that wait, resume, and replay.",
        "short": "Language and VM for agent programs that wait for approval and resume",
        "meta": "ALGAL is a programming language and VM for AI agent programs that wait for approval and leave receipts you can replay.",
        "medium": "ALGAL is a programming language and VM for AI agent programs. A program can wait for your approval, pick up after a crash, and replay what it did from its receipts.",
        "long": "Agent programs today are scripts: they run start to finish and leave a log. ALGAL is a programming language and virtual machine for programs that live longer than one run. An ALGAL program can pause to wait for your approval, survive a crash without redoing finished work, and replay exactly what it did from the receipts it leaves. The VM is previewing now, and the language toolchain ships with it. ALGAL is free and open source.",
        "hero": {
          "heading": "Write agent programs that wait, resume, and replay.",
          "summary": "ALGAL is a programming language and VM for AI agent programs that wait for approval and leave receipts you can replay. Resume from saved progress after an interruption.",
          "primaryAction": "Install ALGAL",
          "secondaryAction": "See a program run"
        },
        "headings": {
          "home-draft": "Turn an email into a drafted reply.",
          "home-process": "Keep a task running across interruptions.",
          "home-host": "Your host sets the tools, models, and limits.",
          "home-replay": "Every run can be replayed offline.",
          "home-evolution": "Programs write programs. Your host picks which to keep.",
          "home-install": "Install one binary. Run your first program.",
          "home-research": "Can tested procedures improve later work?",
          "home-limits": "Start locally. Know what you operate.",
          "home-replay-verify": "Verify",
          "home-replay-diff": "Diff",
          "home-replay-diagnose": "Diagnose"
        },
        "channels": {
          "homebrew": "Language and VM for agent programs that wait and resume"
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-24"
      },
      "name": "ALGAL",
      "source": {
        "repositoryUrl": "https://github.com/hraness/algal",
        "visibility": "open-source"
      },
      "surface": {
        "actionLabel": "explore ALGAL",
        "interfaces": [
          "CLI",
          "SDK"
        ],
        "proof": "content-addressed programs, capabilities with declared limits, and replayable run receipts"
      }
    },
    {
      "canonicalUrl": "https://vhalla.com",
      "description": "peer-to-peer rooms where agents and their owners share signed work",
      "emoji": "🏰",
      "featured": true,
      "homePack": "token-maximalists",
      "id": "valhalla",
      "marketing": {
        "category": "peer-to-peer agent rooms",
        "headlines": [],
        "status": "proposed",
        "tagline": "a meeting place for agents, run by the people in it."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "valhalla",
        "names": {
          "name": "Valhalla",
          "command": "vhalla"
        },
        "category": "Peer-to-peer agent rooms",
        "tagline": "A meeting place for agents, run by the people in it.",
        "short": "Peer-to-peer rooms where agents and their owners share signed work",
        "meta": "Valhalla is open-source software for peer-to-peer rooms where AI agents and their owners share signed work, with no platform in the middle.",
        "medium": "Valhalla is open-source software for peer-to-peer rooms shared by AI agents and the people who run them. Every post is signed by the key that wrote it.",
        "long": "Agents do more of their work in shared rooms, and most rooms belong to a platform that can read, rank, and revoke them. Valhalla is open-source software for peer-to-peer rooms where agents and their owners meet directly. Every post is signed by the key that wrote it, so reputation attaches to the key and not to an account a platform controls. The people in a room run it together. Valhalla is free and MIT licensed.",
        "hero": {
          "heading": "A meeting place for agents, run by the people in it.",
          "summary": "Run rooms where agents and their owners share signed work. Keep your keys on your own machine and choose the peers that store the conversation.",
          "primaryAction": "Get started",
          "secondaryAction": "What works today"
        },
        "headings": {
          "model-title": "The people in a room run it.",
          "start-title": "Start with the local tour.",
          "install-and-take-the-tour": "Install and take the tour",
          "choose-a-network": "Choose a network",
          "sign-and-send": "Sign and send",
          "work-title": "Share work across agent tools.",
          "agents-title": "Let your agent join the room.",
          "scope-title": "Choose who can read the conversation.",
          "public-rooms": "Public rooms",
          "private-rooms": "Private rooms",
          "compare-title": "Choose where the work lives.",
          "questions-title": "Before you install.",
          "build-title": "Try the local tour."
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-24"
      },
      "name": "Valhalla",
      "source": {
        "repositoryUrl": "https://github.com/hraness/valhalla",
        "visibility": "open-source"
      },
      "surface": {
        "actionLabel": "explore Valhalla",
        "interfaces": [
          "CLI",
          "web app"
        ],
        "proof": "an early Rust project for signed agent chat and browser participation"
      }
    },
    {
      "canonicalUrl": "https://peopleblade.com",
      "description": "the contact book you own, built for your agent",
      "emoji": "📇",
      "featured": true,
      "homePack": "relationships",
      "id": "peopleblade",
      "marketing": {
        "category": "local personal crm",
        "headlines": [
          "every import keeps its source."
        ],
        "status": "proposed",
        "tagline": "a local personal crm for everyone you know."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "peopleblade",
        "names": {
          "name": "PeopleBlade",
          "command": "peopleblade"
        },
        "category": "Local personal CRM",
        "tagline": "A local personal CRM for everyone you know.",
        "short": "The contact book you own, built for your agent",
        "meta": "The contact book you own, built for your agent. PeopleBlade is a local personal CRM that gathers contacts from your apps and exports into one private book.",
        "medium": "PeopleBlade brings your contacts from Apple Contacts, iMessage, Google Contacts, WhatsApp, LinkedIn, and more into one private book on your computer. Keep notes beside each person, and let your agent search the book from the command line.",
        "long": "PeopleBlade is a local personal CRM for everyone you know. It imports contacts from Apple Contacts, iMessage, Google Contacts, Beeper, WhatsApp, and your LinkedIn, Instagram, and X data exports into one SQLite database on your computer, and every detail keeps the source it came from. Likely duplicates wait for your review, and a shared name is never enough to join two people. Write private notes beside each person, or let your agent search and research the book with JSON commands. Your agent never receives your passwords, and imports keep no message text. The CLI is free and MIT licensed.",
        "headlines": [
          "every import keeps its source."
        ],
        "hero": {
          "heading": "Social Blade for everyone you know.",
          "summary": "One private contact book. Bring your contacts together and let your agent help you stay in touch.",
          "primaryAction": "Install the free CLI",
          "secondaryAction": "See how it works"
        },
        "headings": {
          "home-video": "See it work, start to finish.",
          "home-unification": "Bring your contacts together.",
          "home-book": "Find people and keep the context.",
          "home-agent": "Let your agent work with your contacts.",
          "home-comparison": "Choose the contact book that fits.",
          "home-boundary": "Know what your agent can access.",
          "home-related": "Other tools from our studio",
          "home-cloud": "Sync only when you choose.",
          "home-personal-group": "The personal apps",
          "home-platform-group": "The agent platform",
          "home-install": "Try it in a minute",
          "home-questions": "Questions",
          "home-account": "Your account",
          "home-step-import": "Import what you already have",
          "home-step-matches": "Accept the matches",
          "home-step-agent": "Ask your agent"
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-29"
      },
      "name": "PeopleBlade",
      "source": {
        "visibility": "private"
      },
      "surface": {
        "actionLabel": "open PeopleBlade",
        "interfaces": [
          "CLI",
          "Agent Skill"
        ],
        "proof": "your contacts in one local database, each record kept with its source"
      }
    },
    {
      "canonicalUrl": "https://textbutler.app",
      "description": "ai butler for the imessage, whatsapp, and beeper chats you choose",
      "emoji": "🤖",
      "featured": true,
      "homePack": "relationships",
      "id": "message-like-me",
      "marketing": {
        "category": "messaging assistant for mac",
        "headlines": [],
        "status": "proposed",
        "tagline": "an ai butler in your messaging apps."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "textbutler",
        "names": {
          "name": "TextButler",
          "command": "textbutler",
          "formerly": [
            "Message Like Me"
          ]
        },
        "category": "Messaging assistant for Mac",
        "tagline": "An AI butler in your messaging apps.",
        "short": "AI butler for the iMessage, WhatsApp, and Beeper chats you choose",
        "meta": "TextButler is an AI butler for the iMessage, WhatsApp, and Beeper chats you choose. It runs on your Mac with the model or AI subscription you select.",
        "medium": "TextButler is an AI butler for the iMessage, WhatsApp, and Beeper chats you choose on your Mac. Turn it on for a conversation to draft or send replies using your shared history.",
        "long": "TextButler is an AI butler for your messages, running on your Mac. Turn it on for the chats you choose in iMessage, WhatsApp, or Beeper. It uses conversation history and notes on each person in files you can edit. New installs start paused. Choose a local model, your Gateway key, or a connected subscription. Reply labels are on by default and configurable per person. Hosted AI providers receive the context needed to write a reply; optional web search uses a Gateway key. TextButler is free and MIT licensed.",
        "hero": {
          "heading": "An AI butler in your messaging apps.",
          "summary": "An AI assistant answers the chats you choose, from your Mac.",
          "primaryAction": "Have your agent set it up",
          "secondaryAction": "See how it works"
        },
        "headings": {
          "how-title": "From a message to a reply.",
          "supports-title": "What it works with",
          "models-title": "Pick what writes replies",
          "setup-title": "Your agent sets it up. You stay in charge.",
          "control-title": "You stay in charge",
          "self-title": "Ask it yourself",
          "questions-title": "Questions",
          "related-title": "Other tools from our studio",
          "closing-title": "Start with one person",
          "where-it-stands": "Where it stands",
          "messaging-apps": "Messaging apps",
          "your-mac": "Your Mac",
          "install-it-yourself": "Install it yourself",
          "prefer-to-do-it-yourself": "Prefer to do it yourself?",
          "your-agent-speaks-its-language": "Your agent speaks its language",
          "it-s-there-when-you-aren-t": "It’s there when you aren’t.",
          "it-never-pretends-to-be-you": "Choose how replies are marked.",
          "it-runs-on-your-mac": "It runs on your Mac.",
          "site-title": "TextButler: an AI butler for iMessage and WhatsApp on Mac",
          "home-writer-local": "A local model on your Mac",
          "home-writer-key": "Qwen 3.5 Flash with your own Vercel AI Gateway key",
          "home-writer-subscription": "Your Claude Code, Codex, or Devin subscription",
          "home-flow-text": "Someone texts you.",
          "home-flow-checks": "It checks before it speaks.",
          "home-flow-indicator": "👀, right away.",
          "home-flow-context": "It reads the room.",
          "home-flow-model": "Your chosen model writes the reply.",
          "home-flow-send": "Reply in the same chat.",
          "home-flow-step-in": "You can step in anytime.",
          "home-setup-agent": "Ask your agent.",
          "home-setup-mac": "Say yes to your Mac.",
          "home-setup-person": "Turn on one person.",
          "home-related-apps": "The personal apps",
          "home-related-tools": "The agent platform"
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-10-01"
      },
      "name": "TextButler",
      "source": {
        "repositoryUrl": "https://github.com/hraness/textbutler",
        "visibility": "open-source"
      },
      "surface": {
        "actionLabel": "open TextButler",
        "interfaces": [
          "CLI"
        ],
        "proof": "marked replies in the one-to-one chats you turn on, with notes kept on your Mac"
      }
    },
    {
      "canonicalUrl": "https://ghostget.com",
      "description": "named web actions for ai agents: read pages, save media, use connected accounts",
      "emoji": "👻",
      "featured": true,
      "homePack": "relationships",
      "id": "wrench",
      "marketing": {
        "category": "web actions for agents",
        "headlines": [],
        "status": "proposed",
        "tagline": "your agent calls web actions by name and holds no password."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "ghostget",
        "names": {
          "name": "GhostGet",
          "command": "ghostget",
          "formerly": [
            "Wrench"
          ]
        },
        "category": "Web actions for agents",
        "tagline": "Your agent calls web actions by name and holds no password.",
        "short": "Named web actions for AI agents: read pages, save media, use connected accounts",
        "meta": "GhostGet gives your AI agent named web actions: read a page, archive one media item, or use a connected account, without credentials or a browser to steer.",
        "medium": "GhostGet gives the agent you already use a fixed list of reviewed web actions: read a page, save one media item, or act in a connected account. Your agent never sees your credentials and never steers a browser.",
        "long": "Agents that run commands reach the web through a browser they steer click by click, or through credentials they should never hold. GhostGet is a free, open-source CLI and TypeScript SDK that gives them a third route: a fixed list of reviewed web actions. Read a URL as Markdown, keep a searchable copy on your machine, archive one media item with SHA-256 records, or act in a connected account such as Gmail, Beeper, or X through one named operation. A measured article read costs about 3,800 tokens where the raw page carries 36,000. Consequential writes need an exact preview and your confirmation, and the agent never sees a login.",
        "hero": {
          "heading": "Your agent gets the result without clicking around.",
          "summary": "Read pages, save media, and use connected accounts through your agent.",
          "primaryAction": "Tell your agent",
          "secondaryAction": "See it work"
        },
        "headings": {
          "uses-heading": "Read a page, archive one item, or act in an account.",
          "how-it-works-heading": "Give your agent a web task.",
          "measured-heading": "Read the page without its HTML.",
          "start-heading": "Tell your agent, or run two commands.",
          "interfaces-title": "Use an Agent Skill, CLI, or TypeScript SDK",
          "agent-skill": "Agent Skill",
          "cli": "CLI",
          "typescript-sdk": "TypeScript SDK",
          "control-heading": "Review accounts and approvals.",
          "local-by-design-title": "Choose what your agent can do.",
          "comparison-title": "How GhostGet compares with other ways agents reach the web.",
          "faq-title": "Before you install.",
          "guides-title": "Start with the outcome you need.",
          "read-your-first-page": "Read your first page",
          "capture-urls-and-archive-media": "Capture URLs and archive media",
          "check-provider-support": "Check provider support",
          "understand-the-security-model": "Understand the security model",
          "author-a-provider-plugin": "Author a provider plugin",
          "browse-the-documentation": "Browse the documentation",
          "arguments-title": "Arguments and comparisons",
          "how-agents-reach-the-web": "How agents reach the web",
          "maker-title": "Hraness",
          "related-title": "Other tools from our studio",
          "related-tools": "The agent platform",
          "related-apps": "The personal apps",
          "final-title": "Read your first page in two commands.",
          "home-providers": "Use {{PROVIDER_SURFACE_COUNT}} services from your agent.",
          "home-webmcp-sites": "Plus {{WEBMCP_REGISTRY_SITE_COUNT}} sites publishing WebMCP tools"
        },
        "channels": {
          "social": {
            "imageDescription": "Named web actions for AI agents: read pages, save media, use accounts."
          }
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-24"
      },
      "name": "GhostGet",
      "source": {
        "repositoryUrl": "https://github.com/hraness/ghostget",
        "visibility": "open-source"
      },
      "surface": {
        "actionLabel": "open GhostGet",
        "interfaces": [
          "CLI",
          "SDK",
          "Agent Skill"
        ],
        "proof": "signed web captures and provider actions within declared limits"
      }
    },
    {
      "canonicalUrl": "https://soulscrape.com",
      "description": "free agent skill that writes dated dossiers on people, sources cited",
      "emoji": "🦾",
      "featured": true,
      "homePack": "relationships",
      "id": "soulscrape",
      "marketing": {
        "category": "people research for agents",
        "headlines": [],
        "status": "proposed",
        "tagline": "learn everything about anyone based on their internet presence"
      },
      "messaging": {
        "formatVersion": 1,
        "product": "soulscrape",
        "names": {
          "name": "Soulscrape",
          "command": "@hraness/soulscrape",
          "formerly": [
            "Ensoul"
          ]
        },
        "category": "People research for agents",
        "tagline": "Learn everything about anyone based on their internet presence",
        "short": "Free agent skill that writes dated dossiers on people, sources cited",
        "meta": "Soulscrape is a free agent skill that writes a dated dossier on a person, with every claim tied to its sources, kept private or published.",
        "medium": "Soulscrape is a free agent skill that writes a dated dossier on how a person decides, writes, argues, and changes their mind, with every claim tied to its sources. Keep it private, or publish it.",
        "long": "Soulscrape is a free, MIT-licensed agent skill that turns sources you're allowed to use into a dated dossier on one person: how they decide, write, argue, and change their mind. It runs inside Claude Code, Codex, or another agent that loads skills, with your own model and tools, and needs no Soulscrape account. Facts, stated beliefs, patterns, and speculation stay apart, and the dossier lists what the record cannot settle. Keep it private, or publish it with a free Hraness account as a web page, a JSON packet, and a Markdown copy anyone can cite.",
        "hero": {
          "heading": "Learn everything about anyone based on their internet presence",
          "summary": "Turn their writing, talks, and posts into a detailed dossier, with sources for every claim.",
          "primaryAction": "Install the skill",
          "secondaryAction": "Browse the dossiers"
        },
        "headings": {
          "how-title": "From sources to a dossier",
          "examples-title": "Explore a finished dossier",
          "method-title": "Read the claims alongside their evidence",
          "use-cases-title": "Use the research in your own work",
          "install-title": "Ask your agent to set it up",
          "indexes-title": "Publish your dossier",
          "boundaries-title": "Keep the research within its limits",
          "questions-title": "Questions",
          "related-title": "Other tools from our studio",
          "cta-title": "Start with one person",
          "home-flow-sources": "Choose the sources",
          "home-flow-read": "Read the dossier",
          "home-flow-publish": "Keep it private or publish",
          "home-use-agent": "Give an agent context",
          "home-use-research": "Research a person",
          "home-use-writing": "Write about someone",
          "home-use-personas": "Prepare an authorized assistant",
          "home-use-collaboration": "Work with someone",
          "home-use-self": "Understand your own patterns",
          "home-trust-sources": "Authorized sources",
          "home-trust-purpose": "A clear purpose",
          "home-trust-instructions": "Research under your instructions",
          "home-trust-claims": "Claims you can check",
          "home-related-apps": "The personal apps",
          "home-related-tools": "The agent platform"
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-30"
      },
      "name": "Soulscrape",
      "source": {
        "repositoryUrl": "https://github.com/hraness/soulscrape",
        "visibility": "open-source"
      },
      "surface": {
        "actionLabel": "open Soulscrape",
        "interfaces": [
          "Agent Skill"
        ],
        "proof": "a dated person model with cited evidence and open questions"
      }
    },
    {
      "canonicalUrl": "https://icon.place",
      "description": "editable vector icons and illustrations, with an editor in your browser",
      "emoji": "✳️",
      "featured": true,
      "homePack": "media",
      "id": "iconplace",
      "marketing": {
        "category": "editable icon library",
        "headlines": [],
        "status": "proposed",
        "tagline": "icons and illustrations you can edit as vectors."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "iconplace",
        "names": {
          "name": "icon.place"
        },
        "category": "Editable icon library",
        "tagline": "Icons and illustrations you can edit as vectors.",
        "short": "Editable vector icons and illustrations, with an editor in your browser",
        "meta": "icon.place is a library of editable vector icons and illustrations, with an in-browser editor that exports SVG, PNG, or a recipe.",
        "medium": "icon.place is a library of editable vector icons and illustrations. Drawings open in an in-browser editor for styles, palettes, and parts, and export as SVG, PNG, or a recipe.",
        "long": "icon.place is a library of editable vector icons and illustrations. Its concept pages include drawn icons adapted from Lucide, Tabler, Phosphor, Material Symbols, Font Awesome Free, Bootstrap Icons, and others, credited on each page. A shared in-browser editor changes styles, palettes, and parts, and exports SVG, PNG, or a replayable recipe. The studio composes connected scenes from reusable pieces, and you can remix your own SVG or trace an image. A separate drawing lab runs small Qwen models in the browser through WebGPU and records each drawing run as an ALGAL program; the live site does not use it yet.",
        "hero": {
          "heading": "Icons and illustrations you can edit as vectors.",
          "summary": "icon.place is a library of editable vector icons and illustrations. Drawings open in an in-browser editor for styles, palettes, and parts, and export as SVG, PNG, or a recipe.",
          "primaryAction": "Open an icon",
          "secondaryAction": "Browse every icon"
        },
        "headings": {
          "home-strip": "Twelve icons from the library",
          "home-techniques": "One {subject}, {count} ways.",
          "home-wall": "All {count} drawn icons, on one page.",
          "home-why": "Your agent can draw an SVG. Can it draw the next 500 in the same hand?",
          "home-styles": "A style is code, not a prompt",
          "home-primitives": "Built from composable primitives",
          "home-rendering": "Generation costs almost nothing"
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-30"
      },
      "name": "icon.place",
      "source": {
        "visibility": "private"
      },
      "surface": {
        "actionLabel": "open icon.place",
        "interfaces": [
          "web app"
        ],
        "proof": "9,518 concept pages and 8,965 drawn icons that export as SVG, PNG, or a recipe"
      }
    },
    {
      "canonicalUrl": "https://slopcamera.com",
      "description": "a multimedia studio for your coding agent",
      "emoji": "📸",
      "featured": true,
      "homePack": "media",
      "id": "slopcamera",
      "marketing": {
        "category": "media studio for agents",
        "headlines": [],
        "status": "proposed",
        "tagline": "a multimedia studio for your coding agent."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "slopcamera",
        "names": {
          "name": "SlopCamera",
          "command": "slopcamera",
          "formerly": [
            "Atet",
            "Graphics"
          ]
        },
        "category": "Media studio for agents",
        "tagline": "A multimedia studio for your coding agent.",
        "short": "A multimedia studio for your coding agent",
        "meta": "SlopCamera lets your coding agent make images, diagrams, animation, 3D scenes, and video from source files it can keep revising.",
        "medium": "SlopCamera is a media studio for coding agents. Codex, Claude Code, and other agents make images, diagrams, animation, 3D scenes, and edited video from source files they can keep revising.",
        "long": "Agents that write code can also make media, but generated assets usually arrive as finished files nobody can change. SlopCamera is a media studio for coding agents: images, diagrams, animation, 3D scenes, and edited video are built from source files the agent can keep revising, so a change is a new render, not a new prompt lottery. Codex, Claude Code, and other command-capable agents drive it through the CLI and skill. SlopCamera is free and open source.",
        "hero": {
          "heading": "Give your agent a multimedia studio.",
          "summary": "Make images, animation, 3D scenes, and video with your coding agent. Direct the details. Keep the source.",
          "primaryAction": "Install Slopcamera",
          "secondaryAction": "Watch the films"
        },
        "headings": {
          "home-examples": "Take an idea somewhere strange.",
          "home-revision": "The next version starts with a sentence.",
          "home-revision-original": "Original",
          "home-revision-revised": "Revised",
          "home-start": "What will you make first?",
          "home-start-animation": "Make an animated film",
          "home-start-world": "Build a little world",
          "home-start-footage": "Give footage a new life",
          "home-install": "Install Slopcamera for your agent.",
          "home-design": "Your tools. Your files.",
          "home-questions": "Common questions",
          "home-cta": "Make something worth replaying.",
          "home-search-title": "SlopCamera: video, diagrams and 3D your coding agent can revise",
          "agent-home-examples": "See what you can make",
          "agent-home-revision": "Direct it again",
          "agent-home-workflow": "From an idea to a finished piece",
          "agent-home-install": "Install Slopcamera",
          "agent-home-tools": "Choose your tools",
          "agent-home-privacy": "Cost and privacy",
          "agent-home-explore": "Explore"
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-30"
      },
      "name": "SlopCamera",
      "source": {
        "repositoryUrl": "https://github.com/hraness/slopcamera",
        "visibility": "open-source"
      },
      "surface": {
        "actionLabel": "open SlopCamera",
        "interfaces": [
          "CLI",
          "SDK",
          "MCP",
          "Agent Skill"
        ],
        "proof": "generated media with operation records that identify inputs and outputs"
      }
    },
    {
      "canonicalUrl": "https://sound.fish",
      "description": "album pages with a waveform player and comments pinned to moments",
      "emoji": "🐟",
      "featured": true,
      "homePack": "media",
      "id": "soundfish",
      "marketing": {
        "category": "album pages for musicians",
        "headlines": [],
        "status": "proposed",
        "tagline": "give your album a page of its own."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "soundfish",
        "names": {
          "name": "Soundfish",
          "command": "soundfish"
        },
        "category": "Album pages for musicians",
        "tagline": "Give your album a page of its own.",
        "short": "Album pages with a waveform player and comments pinned to moments",
        "meta": "Soundfish gives your album a page of its own, with a waveform player and comments pinned to moments. Upload a new take and listeners hear it at the same link.",
        "medium": "Soundfish gives your album a page of its own, with a waveform player and comments pinned to moments. Upload a new take and listeners hear it at the same link while earlier takes stay dated.",
        "long": "Soundfish gives your album a page of its own. Upload MP3, WAV, or FLAC tracks and share one link to a waveform player where listeners heart tracks and pin comments to the moment they mean. Each track keeps its takes in order: upload a new one and listeners hear it at the same link, while earlier takes stay dated. Keep an album unlisted, publish it to your artist page, or embed the player on any site. Listening needs no account; a free Hraness account publishes one album of up to 10 tracks. Agents can publish with the soundfish CLI, and a browser MIDI editor is in beta.",
        "hero": {
          "heading": "Give your album a page of its own.",
          "summary": "Upload tracks and share one link to a waveform player with hearts and comments pinned to the moment. A new take lands at the same link.",
          "primaryAction": "Upload an album",
          "secondaryAction": "Hear an album page"
        },
        "headings": {
          "home-features": "Every album page has a player, comments, and play counts.",
          "home-midi": "Sketch the next idea in the MIDI editor.",
          "home-comparison": "How Soundfish compares",
          "home-releases": "Recent releases",
          "home-interfaces": "For listeners, makers, and agents",
          "home-questions": "Common questions",
          "home-search-title": "Soundfish: album pages with timestamped comments",
          "home-eyebrow": "Music for agents",
          "home-closing": "Share it today. Improve it at the same link.",
          "home-interface-listeners": "For listeners",
          "home-interface-makers": "For makers",
          "home-interface-agents": "For agents"
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-24"
      },
      "name": "Soundfish",
      "source": {
        "visibility": "private"
      },
      "surface": {
        "actionLabel": "open the editor",
        "interfaces": [
          "web app",
          "CLI",
          "Agent Skill"
        ],
        "proof": "a MIDI composition encoded in a content-addressed URL"
      }
    },
    {
      "canonicalUrl": "https://sys1.io",
      "description": "saves repository check results and adds scoped code review",
      "emoji": "1️⃣",
      "featured": true,
      "homePack": "token-maximalists",
      "id": "sys1",
      "marketing": {
        "category": "coding agent tools",
        "headlines": [],
        "status": "proposed",
        "tagline": "saved checks and code review"
      },
      "messaging": {
        "formatVersion": 1,
        "product": "sys1",
        "names": {
          "name": "Sys1",
          "command": "sys1"
        },
        "category": "Coding agent tools",
        "tagline": "Saved checks and code review",
        "short": "Saves repository check results and adds scoped code review",
        "meta": "Sys1 gives coding agents tools to review code, check completion claims, and get structured answers from Jev or a local model.",
        "medium": "Sys1 runs your repository check, keeps the output local, and saves a result you can inspect later. Add a scoped review when you need a second pass on the changes. Review and completion checks are advisory.",
        "long": "Sys1 runs your repository check, keeps the output local, and saves a result you can inspect later. Add a scoped review when you need a second pass on the changes. Its code review and completion checks are experimental and advisory. Agents and applications can also ask yes/no, choice, and score questions and receive validated answers with probabilities. Choose TypeSafe’s hosted Jev, an experimental local model, or a compatible server. Use the Node or Bun client, embed the router, or call its local HTTP gateway. The Sys1 site also offers System One Skills, an independent package that compacts noisy test and build output without Sys1 or a model. Sys1 is MIT licensed.",
        "hero": {
          "heading": "Keep checks and code review together.",
          "summary": "Sys1 runs your repository check, keeps the output local, and saves a result you can inspect later. Add a scoped review when you need a second pass on the changes.",
          "primaryAction": "Install Sys1",
          "secondaryAction": "Explore the workflows"
        },
        "headings": {
          "review-heading": "Useful checks, inside your agent’s workflow.",
          "benchmarks-heading": "For compact output alone.",
          "launch-heading": "Meet Sys1.",
          "system-heading": "Three parts, one system.",
          "how-heading": "Use small decisions in your own code.",
          "trial-heading": "Test the decision on your task.",
          "integration-heading": "Three ways to call Sys1.",
          "ecosystem-heading": "What Sys1 connects to.",
          "install-heading": "Install Sys1.",
          "questions-heading": "Before you begin.",
          "docs-title": "Set up your first useful check",
          "getting-started-title": "Install Sys1",
          "workflows-title": "Save a check and continue its review",
          "connect-jev-title": "Connect hosted Jev for model calls",
          "audit-title": "Review changes with your agent",
          "verify-title": "Check a completion message",
          "compact-checks-title": "Compact test output",
          "system-one-title": "Ask for a structured decision",
          "integration-title": "Integration modes",
          "backends-title": "Other backends",
          "profiles-title": "Reuse application questions",
          "research-title": "Evaluate a model for your task",
          "workflow-review-heading": "Review a change against your rules",
          "workflow-completion-heading": "Check what “done” means",
          "docs-install-cli": "Install the CLI",
          "docs-first-jev-request": "Make your first Jev request",
          "docs-model-errors": "Choose the model and handle failures",
          "docs-portable-client": "Portable client",
          "docs-embedded-router": "Embedded Bun router",
          "docs-loopback-http": "Loopback HTTP"
        },
        "channels": {
          "social": {
            "imageDescription": "Keep checks and code review together."
          }
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-30"
      },
      "name": "Sys1",
      "source": {
        "repositoryUrl": "https://github.com/hraness/sys1",
        "visibility": "open-source"
      },
      "surface": {
        "actionLabel": "explore Sys1",
        "interfaces": [
          "CLI",
          "SDK"
        ],
        "proof": "saved repository checks, scoped code review, and structured model answers through a CLI and SDK"
      }
    },
    {
      "canonicalUrl": "https://sloptrade.com",
      "description": "build prompt that turns a coding agent into a trading-system designer",
      "emoji": "📈",
      "featured": true,
      "homePack": "knowledge",
      "id": "sloptrade",
      "marketing": {
        "category": "trading system build prompt",
        "headlines": [],
        "status": "proposed",
        "tagline": "design an ai trading system that fails closed."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "sloptrade",
        "names": {
          "name": "SlopTrade",
          "command": "sloptrade",
          "formerly": [
            "Invest"
          ]
        },
        "category": "Trading system build prompt",
        "tagline": "Design an AI trading system that fails closed.",
        "short": "Build prompt that turns a coding agent into a trading-system designer",
        "meta": "SlopTrade is a build prompt your coding agent turns into a personal stock trading system, where your rules approve every order.",
        "medium": "SlopTrade is a build prompt your coding agent turns into a personal stock trading system. AI writes the research and scans for setups, and your rules approve every order.",
        "long": "SlopTrade is a build prompt: a researched architecture and specification your coding agent turns into a personal stock trading system. AI writes the research and scans for setups; your rules approve every order, and the system fails closed when evidence is missing or limits are hit. You end with a trading system you built and can inspect end to end, not a black box that trades for you. The prompt and its architecture are documented in the repository.",
        "hero": {
          "heading": "AI writes the research. Your rules make the trade.",
          "summary": "A researched build prompt your coding agent turns into a personal trading system where your rules approve every order.",
          "primaryAction": "Get the prompt",
          "secondaryAction": "See how it works"
        },
        "headings": {
          "home-desk": "See the desk you'll own",
          "home-system": "What your agent builds",
          "home-sequence": "Start with order placement off",
          "home-access": "Who can do what",
          "home-comparison": "How it compares",
          "home-running": "What you need to run it",
          "home-buy": "Buy the prompt",
          "home-notes": "Read the design notes",
          "home-questions": "Questions"
        },
        "status": {
          "default": "proposed",
          "tagline": "authored"
        },
        "reviewedOn": "2026-09-24"
      },
      "name": "SlopTrade",
      "source": {
        "visibility": "private"
      },
      "surface": {
        "actionLabel": "explore Sloptrade",
        "interfaces": [
          "website",
          "publication"
        ],
        "proof": "a citation-backed architecture dossier with system and research notes"
      }
    },
    {
      "canonicalUrl": "https://hraness.com",
      "description": "software studio making tools for ai agents and for people",
      "emoji": "🪢",
      "featured": false,
      "homePack": null,
      "id": "hraness",
      "marketing": {
        "category": "software studio",
        "headlines": [],
        "status": "proposed",
        "tagline": "tools for agents and humans."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "hraness",
        "names": {
          "name": "Hraness"
        },
        "category": "Software studio",
        "tagline": "Tools for agents and humans.",
        "short": "Software studio making tools for AI agents and for people",
        "meta": "Hraness is a software studio that makes tools for AI agents and for people, from agent memory to music. Most are open source.",
        "medium": "Hraness is a software studio in Puerto Rico. We build tools that give AI agents memory, context, web access, and a record of their work, and we make apps and sourced archives for people.",
        "long": "Hraness is a software studio in Puerto Rico. We build tools for AI agents and for people, and we publish what we learn building them. For agents, that means memory and research libraries, context compaction, web capture, and a programming language for agent programs that can wait for approval and replay their runs. For people, it means music software, life timelines, model benchmark charts, and sourced company histories. The projects share one design: your material stays in formats you control, work leaves a record you can check, and permission stays with the owner. Most of them are open source.",
        "hero": {
          "heading": "Tools for agents and humans.",
          "summary": "Hraness is a software studio. We build tools that give AI agents memory, context, web access, and a record of their work, and we make apps and archives for people.",
          "primaryAction": "See all projects",
          "secondaryAction": "Get email updates"
        },
        "status": {
          "default": "proposed",
          "tagline": "authored"
        },
        "reviewedOn": "2026-09-24"
      },
      "name": "Hraness",
      "source": {
        "visibility": "private"
      },
      "surface": {
        "actionLabel": "open Hraness",
        "interfaces": [
          "website"
        ],
        "proof": "organization statement with project, writing, reference, and Reading indexes"
      }
    },
    {
      "canonicalUrl": "https://sleepy.land",
      "description": "free sleep sounds made in your browser, with sourced sleep guides",
      "emoji": "💤",
      "featured": true,
      "homePack": null,
      "id": "sleepyland",
      "marketing": {
        "category": "sleep sound machine",
        "headlines": [],
        "status": "proposed",
        "tagline": "steady sound for sleep, made in your browser."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "sleepyland",
        "names": {
          "name": "Sleepyland"
        },
        "category": "Sleep sound machine",
        "tagline": "Steady sound for sleep, made in your browser.",
        "short": "Free sleep sounds made in your browser, with sourced sleep guides",
        "meta": "Sleepyland is a free sound machine that makes brown, pink, or white noise and ocean waves in your browser, with sourced guides to sleep.",
        "medium": "Sleepyland is a free sound machine that makes brown, pink, or white noise and ocean waves in your browser as you listen, with no recordings, account, or ads. Beside it are sourced guides to sleep.",
        "long": "Sleepyland is a free sound machine that runs in your browser. Press play and it makes brown, pink, or white noise and ocean surf on your device as you listen, with no recordings to download and no account to create. Start from Sleep, Relax, or Focus, then tune the noise color, warmth, volumes, and the time between waves. Beside the sound machine, Sleepyland publishes short guides to sleep, sound, and light that link every source. It is built by Hraness.",
        "hero": {
          "heading": "Steady sound for sleep, made in your browser.",
          "summary": "Press play for deep brown noise and slow ocean waves, made on your device as you listen. Free, no account, and every guide links its sources.",
          "primaryAction": "Play sound",
          "secondaryAction": "Read the guides"
        },
        "headings": {
          "home-search-title": "Free Brown, Pink & White Noise and Ocean Waves | Sleepyland"
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-24"
      },
      "name": "Sleepyland",
      "source": {
        "visibility": "private"
      },
      "surface": {
        "actionLabel": "explore Sleepyland",
        "interfaces": [
          "web app",
          "publication"
        ],
        "proof": "a browser sound machine beside cited sleep research"
      }
    },
    {
      "canonicalUrl": "https://rough.day",
      "description": "daily front page that says why each story ranked and links its source",
      "emoji": "🌧️",
      "featured": true,
      "homePack": "knowledge",
      "id": "roughday",
      "marketing": {
        "category": "daily news digest",
        "headlines": [],
        "status": "proposed",
        "tagline": "a daily front page that says why each story ranked."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "roughday",
        "names": {
          "name": "Rough Day"
        },
        "category": "Daily news digest",
        "tagline": "A daily front page that says why each story ranked.",
        "short": "Daily front page that says why each story ranked and links its source",
        "meta": "Rough Day is a daily front page for Tech & AI, World, and Finance that says why each story ranked: up to six per section, each linked to its source.",
        "medium": "Rough Day is a daily front page for Tech & AI, World, and Finance that says why each story ranked. Each edition covers the previous 24 hours, with up to six stories per section and a link to every source.",
        "long": "Rough Day is a daily front page for Tech & AI, World, and Finance that says why each story ranked. Each edition considers reporting from the previous 24 hours and publishes up to six stories per section. Every story carries a short summary, a note on why it ranked, and a link to the original article or post, so you can scan the day and open only the sources you need. Newspapers have been called the rough draft of history since at least 1905, and Rough Day files one draft a day. Reading is free and needs no account.",
        "hero": {
          "heading": "A daily front page that says why each story ranked.",
          "summary": "Tech & AI, World, and Finance, one dated edition a day. Every story links the original source.",
          "primaryAction": "Read today's edition",
          "secondaryAction": "See how stories are chosen"
        },
        "headings": {
          "home-search-title": "Rough Day: daily Tech & AI, World, and Finance news",
          "roughday-walkthrough-title": "See a day on Rough Day",
          "roughday-working-model-title": "How stories are chosen",
          "roughday-interfaces-title": "Other ways to read the archive",
          "roughday-evidence-title": "What each story shows",
          "roughday-compare-title": "How Rough Day compares",
          "roughday-trust-title": "Sources and privacy",
          "roughday-questions-title": "Common questions",
          "roughday-action-title": "Open the current archive.",
          "info-search-title": "How Rough Day works",
          "info-story-proof": "How to read a story",
          "info-interface-archive": "Daily archive",
          "info-interface-category": "Category link",
          "info-interface-markdown": "Markdown",
          "info-interface-feed": "Atom feed",
          "info-interface-guide": "Site guide and sitemap"
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-24"
      },
      "name": "Rough Day",
      "source": {
        "visibility": "private"
      },
      "surface": {
        "actionLabel": "read today's archive",
        "interfaces": [
          "archive"
        ],
        "proof": "a dated, source-linked daily news archive"
      }
    },
    {
      "canonicalUrl": "https://hraness.com/stripe",
      "description": "independent history of stripe where every event is dated and sourced",
      "emoji": "🦓",
      "featured": true,
      "homePack": null,
      "id": "stripe-history",
      "marketing": {
        "category": "independent company history",
        "headlines": [],
        "status": "proposed",
        "tagline": "every event in stripe's history, dated and sourced."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "stripe-history",
        "names": {
          "name": "Stripe History",
          "formerly": [
            "Stripe Guide",
            "Stripedex"
          ]
        },
        "category": "Independent company history",
        "tagline": "Every event in Stripe's history, dated and sourced.",
        "short": "Independent history of Stripe where every event is dated and sourced",
        "meta": "Stripe History is an independent record of how Stripe grew. Every event is dated and linked to its sources, and the data downloads as open YAML.",
        "medium": "Stripe History is an independent record of how Stripe grew, from the Collison brothers' first projects to today. Every event is dated and linked to its sources, and reported deals stay separate from completed ones.",
        "long": "Stripe is private, so its history arrives in pieces: annual letters, tender offers, press reports, podcasts, and blog posts. Stripe History, built by Hraness, gathers those pieces into one dated record, from Patrick Collison's 2005 Young Scientist win and the 2010 prototype built in Buenos Aires cafes to the $1.9 trillion in total volume Stripe reported for 2025. Every event links to its sources, reported talks stay distinct from completed deals, and each valuation keeps its type. Charts follow volume, revenue, and valuation by year, and the whole record downloads as YAML under the MIT License. It is not affiliated with Stripe, Inc.",
        "hero": {
          "heading": "Every event in Stripe's history, dated and sourced.",
          "summary": "An independent, dated record of how Stripe grew, from the 2010 Buenos Aires prototype to the latest reported volume. Open data throughout.",
          "primaryAction": "Browse the timeline",
          "secondaryAction": "Download the data"
        },
        "headings": {
          "record-keeping": "How this record is kept"
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-24"
      },
      "name": "Stripe History",
      "source": {
        "repositoryUrl": "https://github.com/hraness/stripe-history",
        "visibility": "open-source"
      },
      "surface": {
        "actionLabel": "explore the timeline",
        "interfaces": [
          "archive"
        ],
        "proof": "a source-linked company timeline and charts"
      }
    },
    {
      "canonicalUrl": "https://hraness.com/eds",
      "description": "ehlers-danlos evidence stratified by kind, every record linked to sources",
      "emoji": "🧬",
      "featured": false,
      "homePack": null,
      "id": "eds-research",
      "marketing": {
        "category": "medical research index",
        "headlines": [],
        "status": "proposed",
        "tagline": "ehlers-danlos research, sorted by kind of evidence."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "eds-research",
        "names": {
          "name": "EDS Research Index"
        },
        "category": "Medical research index",
        "tagline": "Ehlers-Danlos research, sorted by kind of evidence.",
        "short": "Ehlers-Danlos evidence stratified by kind, every record linked to sources",
        "meta": "EDS Research Index is an independent, open-source index of Ehlers-Danlos syndromes research that links each record's sources and labels the kind of evidence.",
        "medium": "EDS Research Index is an independent index of Ehlers-Danlos syndromes research for patients and clinicians. Each record links its sources and labels the kind of evidence behind it.",
        "long": "Ehlers-Danlos syndromes are underdiagnosed and the research is scattered across journals, registries, and patient communities. EDS Research Index is an independent, open-source index that collects the research record by record. Each entry links its sources and labels the kind of evidence behind it, so a reader can tell a cohort study from a case report. It is a reference, not medical advice, built by Hraness and published in the open.",
        "hero": {
          "heading": "Ehlers-Danlos research, sorted by kind of evidence.",
          "summary": "An independent index that links each record's sources and labels the kind of evidence behind it.",
          "primaryAction": "Browse the index",
          "secondaryAction": "Read the method"
        },
        "headings": {
          "agreement": "Where kinds of evidence agree",
          "record-guide": "How to read a record",
          "evidence-kinds": "Five kinds of evidence",
          "browse": "Browse the index",
          "categories": "Categories"
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-24"
      },
      "name": "EDS Research Index",
      "source": {
        "repositoryUrl": "https://github.com/hraness/eds-research",
        "visibility": "open-source"
      },
      "surface": {
        "actionLabel": "explore the index",
        "interfaces": [
          "archive"
        ],
        "proof": "an Ehlers-Danlos research index where every record names its sources and evidence tier"
      }
    },
    {
      "canonicalUrl": "https://act60.me",
      "description": "estimate act 60 savings after real costs, with sourced guides and a day tracker",
      "emoji": "⏱️",
      "featured": true,
      "homePack": null,
      "id": "act60",
      "marketing": {
        "category": "act 60 planner",
        "headlines": [],
        "status": "proposed",
        "tagline": "model the move to puerto rico before you make it."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "act60",
        "names": {
          "name": "act60.me",
          "shortName": "ACT60"
        },
        "category": "Act 60 planner",
        "tagline": "Model the move to Puerto Rico before you make it.",
        "short": "Estimate Act 60 savings after real costs, with sourced guides and a day tracker",
        "meta": "act60.me estimates Puerto Rico Act 60 savings after fees and yearly costs. Sourced guides cover applying, residency, and moving; a private tracker counts days.",
        "medium": "act60.me estimates Puerto Rico Act 60 savings after fees and yearly costs, with every assumption and source date beside the result. Sourced guides cover applying, federal residency, and moving; a private tracker counts your presence days.",
        "long": "Act 60 promises large Puerto Rico tax savings, but fees, yearly costs, and the federal residency rules decide the real number. act60.me models the move before you make it: a calculator that itemizes one-time and annual costs beside its assumptions, guides that cite the official sources and the date each was checked, and a private day tracker for the presence tests a calendar can measure. Investor applications filed in 2026 face a December 31 deadline; the guides say which rules changed and which still apply.",
        "hero": {
          "heading": "Puerto Rico Act 60 calculator",
          "summary": "Estimate Act 60 savings from the export-services benefit (formerly Act 20) and the investor benefit (formerly Act 22) after fees, the investor donation, and yearly costs. Rates and source dates sit beside the result. No account needed.",
          "primaryAction": "Estimate your savings",
          "secondaryAction": "Choose your guide"
        },
        "headings": {
          "home-search-title": "Act 60 calculator: Puerto Rico tax savings after costs | act60.me",
          "tracker-preview-title": "See the day tracker before you sign in.",
          "how-to-read-title": "Choose the guide for your question.",
          "compare-title": "How act60.me compares",
          "benefits-title": "The business and investor benefits follow different rules.",
          "costs-title": "The estimate itemizes one-time and annual costs.",
          "requirements-title": "Plan the application, then the years after it.",
          "residence-title": "Three residence checks apply every year.",
          "steps-title": "Plan the work from filing through each later year.",
          "questions-title": "Common questions about the benefits and the move.",
          "sources-title": "Check the rules against the official sources.",
          "calculator-title": "Estimate your savings after costs",
          "home-presence-tax-home-or-closer-connection": "Presence, tax home, or closer connection",
          "home-export-services-business-treatment": "Export-services business treatment",
          "home-individual-investor-treatment": "Individual investor treatment",
          "home-applying-moving-and-daily-life": "Applying, moving, and daily life",
          "home-business-chapter-or-investor-chapter": "Business chapter or investor chapter",
          "home-grant-receipt-or-federal-residence": "Grant, receipt, or federal residence",
          "home-service-business-profit": "Service business profit",
          "home-investment-income-after-the-move": "Investment income after the move",
          "home-pass-one-day-count-option": "Pass one day-count option",
          "home-base-your-work-in-puerto-rico": "Base your work in Puerto Rico",
          "home-make-puerto-rico-the-center-of-your-life": "Make Puerto Rico the center of your life",
          "home-prepare-and-file-the-applications": "Prepare and file the applications",
          "home-build-a-real-puerto-rico-life": "Build a real Puerto Rico life",
          "home-complete-the-investor-home-commitment": "Complete the investor home commitment",
          "home-file-and-keep-proof-every-year": "File and keep proof every year",
          "pillar-calculator": "Calculator",
          "pillar-requirements": "Requirements",
          "pillar-days": "Day tracker",
          "social-image-title": "Act 60 calculator"
        },
        "channels": {
          "social": {
            "imageDescription": "Estimate Puerto Rico Act 60 savings after fees and yearly costs"
          }
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-24"
      },
      "name": "act60.me",
      "source": {
        "visibility": "private"
      },
      "surface": {
        "actionLabel": "estimate Act 60 savings",
        "interfaces": [
          "web app"
        ],
        "proof": "an Act 60 savings calculator that shows its assumptions and the date the law was last checked"
      }
    },
    {
      "canonicalUrl": "https://hraness.com/direct",
      "description": "repeatable app states for browser agents, opened by url",
      "emoji": "🎯",
      "featured": true,
      "homePack": "token-maximalists",
      "id": "direct",
      "marketing": {
        "category": "frontend testing library",
        "headlines": [],
        "status": "proposed",
        "tagline": "give each app state you test its own url."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "direct",
        "names": {
          "name": "Direct",
          "command": "@hraness/direct"
        },
        "category": "Frontend testing library",
        "tagline": "Give each app state you test its own URL.",
        "short": "Repeatable app states for browser agents, opened by URL",
        "meta": "Direct gives browser agents repeatable app states that open by URL, with your real interface running on fixture data.",
        "medium": "Direct gives browser agents repeatable app states for frontend testing. This development-only TypeScript library serves signed-in, empty, and edge-case states on fixture data, each at its own URL.",
        "long": "Testing a frontend means reaching the states: signed in, empty, mid-error, edge cases that take real setup to reach by clicking. Direct is a development-only TypeScript library that gives each app state its own URL. A browser agent opens the URL and gets your real interface running on fixture data, so the same state can be opened, tested, and shared every time. Direct is free, MIT licensed, and stays out of production bundles.",
        "hero": {
          "heading": "Give each app state you test its own URL.",
          "summary": "Repeatable states for browser agents: your real interface on fixture data, at a URL you can open, test, and share.",
          "primaryAction": "install from npm",
          "secondaryAction": "read the source"
        },
        "headings": {
          "resources": "Direct resources",
          "install": "Install the Agent Skill",
          "states": "open any state by url",
          "readiness": "know when the app is ready",
          "features": "test your real feature code"
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-24"
      },
      "name": "Direct",
      "source": {
        "repositoryUrl": "https://github.com/hraness/direct",
        "visibility": "open-source"
      },
      "surface": {
        "actionLabel": "open Direct",
        "interfaces": [
          "library",
          "Agent Skill"
        ],
        "proof": "a fixture, scenario, and deterministic browser trace"
      }
    },
    {
      "canonicalUrl": "https://clankdar.com",
      "description": "fresh puzzles for ai agents, scored exactly, with a signed receipt",
      "emoji": "📡",
      "featured": true,
      "homePack": "token-maximalists",
      "id": "clankdar",
      "marketing": {
        "category": "agent capability checks",
        "headlines": [],
        "status": "proposed",
        "tagline": "check what your agent can solve."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "clankdar",
        "names": {
          "name": "Clankdar",
          "command": "clankdar",
          "formerly": [
            "botcaptcha"
          ]
        },
        "category": "Agent capability checks",
        "tagline": "Check what your agent can solve.",
        "short": "Fresh puzzles for AI agents, scored exactly, with a signed receipt",
        "meta": "Clankdar gives AI agents fresh puzzles to solve, scores their answers exactly, and signs a receipt anyone can recheck.",
        "medium": "Clankdar checks what AI agents can solve. Each check gives your agent fresh puzzles, scores every answer exactly, and signs a receipt that anyone can recheck.",
        "long": "Benchmark scores age: suites leak into training data and results stop meaning anything. Clankdar gives AI agents fresh puzzles to solve, scores the answers exactly, and signs a receipt that anyone can recheck later. It is a public capability check for the agent internet: reproducible, dated, and inspectable. Run a check on the agent you use, then verify the receipt without trusting Clankdar or the agent's maker. It is free to run.",
        "hero": {
          "heading": "Check what your agent can solve.",
          "summary": "Give your agent fresh puzzles and get a receipt: a signed record of what it solved.",
          "primaryAction": "Run a check",
          "secondaryAction": "Verify a receipt"
        },
        "headings": {
          "how-title": "Anyone can check the score.",
          "issue-fresh-puzzles": "Issue fresh puzzles.",
          "connect-your-agent": "Connect your agent.",
          "score-each-answer": "Score each answer.",
          "keep-the-signed-result": "Keep the signed result.",
          "local-title": "Try a check on your machine.",
          "integrations-title": "Where to add a check.",
          "results-title": "Check the receipt yourself."
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-24"
      },
      "name": "Clankdar",
      "source": {
        "repositoryUrl": "https://github.com/hraness/clankdar",
        "visibility": "open-source"
      },
      "surface": {
        "actionLabel": "explore Clankdar",
        "interfaces": [
          "website"
        ],
        "proof": "reproducible capability checks with verifiable results"
      }
    },
    {
      "canonicalUrl": "https://lifecharts.io",
      "description": "turn the chapters of your life into one timeline you can share",
      "emoji": "📊",
      "featured": true,
      "homePack": "relationships",
      "id": "lifedaysleft",
      "marketing": {
        "category": "life timeline maker",
        "headlines": [],
        "status": "proposed",
        "tagline": "chart your life in chapters."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "lifecharts",
        "names": {
          "name": "Lifecharts",
          "command": "lifecharts",
          "formerly": [
            "Life Days Left",
            "lifedaysleft"
          ]
        },
        "category": "Life timeline maker",
        "tagline": "Chart your life in chapters.",
        "short": "Turn the chapters of your life into one timeline you can share",
        "meta": "Lifecharts turns the chapters of your life into one timeline you can share as a link or embed on your own site.",
        "medium": "Lifecharts is a free life timeline maker. Add the chapters of your life, like a city, a school, a job, or a relationship, by hand or with your agent, and share the result.",
        "long": "Lifecharts is a free life timeline maker. Add the chapters of your life, like a city, a school, a job, or a relationship, and see them on one line with their overlaps and lengths. Share a link or embed it on your site. You need no account, and drafts stay in your browser. An open-source CLI and agent skill let your agent build a timeline from a résumé or a few notes.",
        "hero": {
          "heading": "Chart your life in chapters.",
          "summary": "Add the cities, schools, jobs, and relationships, and see your life laid out on one line you can share.",
          "primaryAction": "Start your timeline",
          "secondaryAction": "See an example"
        },
        "headings": {
          "home-search-title": "Life timeline maker: chart your life in chapters | Lifecharts",
          "timeline-guide": "How a life timeline works",
          "home-two-ways-to-see-the-same-life": "Two ways to see the same life",
          "home-what-the-percentages-mean": "What the percentages mean",
          "home-add-a-longer-horizon": "Add a longer horizon",
          "home-save-share-and-embed": "Save, share, and embed",
          "timeline-places": "Send it to a friend or put it on your site",
          "timeline-agent": "Make it with your agent",
          "timeline-compare": "How Lifecharts compares"
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-28"
      },
      "name": "Lifecharts",
      "source": {
        "repositoryUrl": "https://github.com/hraness/lifecharts",
        "visibility": "open-source"
      },
      "surface": {
        "actionLabel": "make a timeline",
        "interfaces": [
          "web app",
          "CLI"
        ],
        "proof": "editable life chapters with shareable links and website embeds"
      }
    },
    {
      "canonicalUrl": "https://swft.io",
      "description": "free publication about how companies put ai agents to work",
      "emoji": "🏭",
      "featured": true,
      "homePack": "token-maximalists",
      "id": "swft",
      "marketing": {
        "category": "software factory publication",
        "headlines": [],
        "status": "proposed",
        "tagline": "how companies put ai agents to work."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "swft",
        "names": {
          "name": "SWFT"
        },
        "category": "Software factory publication",
        "tagline": "How companies put AI agents to work.",
        "short": "Free publication about how companies put AI agents to work",
        "meta": "SWFT is a free publication about how companies put AI agents to work, comparing named companies' systems and keeping each figure beside its limits.",
        "medium": "SWFT is a free publication about software factories, the repeatable systems where AI agents do scoped work while checks and people decide what ships. It compares how named companies run them.",
        "long": "SWFT is a free publication from Hraness about software factories, the repeatable systems where AI agents do scoped work while automated checks and people decide what ships. Its company cases, including Stripe, Shopify, Jane Street, and Capital One, show how work reaches the agents, what checks it, and where a person decides, and one table compares every case on the same fields. A scale reference compares reported agent numbers and keeps each figure beside its unit and limits. Every article links its sources.",
        "hero": {
          "heading": "How companies put AI agents to work.",
          "summary": "A free publication about software factories: reported company cases and scale figures, every article linked to its sources.",
          "primaryAction": "Read the latest",
          "secondaryAction": "Compare the cases"
        },
        "headings": {
          "how-the-work-gets-done": "How the work gets done",
          "compare-cases-scale-and-industries": "Compare cases, scale, and industries",
          "agent-scale": "Agent scale",
          "across-industries": "Across industries",
          "the-software-factory-field-guide": "The software factory field guide",
          "home-company-cases": "{count} company cases"
        },
        "status": {
          "default": "proposed"
        },
        "reviewedOn": "2026-09-24"
      },
      "name": "SWFT",
      "source": {
        "visibility": "private"
      },
      "surface": {
        "actionLabel": "read SWFT",
        "interfaces": [
          "publication"
        ],
        "proof": "reported software-factory stories with source notes"
      }
    },
    {
      "canonicalUrl": "https://github.com/hraness/pattern-language",
      "description": "tests whether alexander-inspired patterns help agents write better code",
      "emoji": "📐",
      "featured": false,
      "homePack": null,
      "id": "pattern-language",
      "marketing": {
        "category": "code design research",
        "headlines": [],
        "status": "proposed",
        "tagline": "alexander's notes, sketched as runnable algal form."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "pattern-language",
        "names": {
          "name": "Pattern Language"
        },
        "category": "Code design research",
        "tagline": "Alexander's notes, sketched as runnable ALGAL form.",
        "short": "Tests whether Alexander-inspired patterns help agents write better code",
        "meta": "Pattern Language sketches Alexander's Notes on the Synthesis of Form in ALGAL-form and tests whether those patterns help an agent produce better code.",
        "medium": "Pattern Language sketches Christopher Alexander's Notes on the Synthesis of Form as a runnable pattern language in ALGAL-form. It tests that question with executable artifacts; an advantage over ordinary prompting is not proven.",
        "hero": {
          "heading": "Alexander's notes, sketched as runnable ALGAL form.",
          "summary": "Pattern Language sketches Christopher Alexander's Notes on the Synthesis of Form as a runnable pattern language in ALGAL-form. It tests that question with executable artifacts; an advantage over ordinary prompting is not proven.",
          "primaryAction": "read the studies"
        },
        "status": {
          "default": "proposed"
        }
      },
      "name": "Pattern Language",
      "source": {
        "repositoryUrl": "https://github.com/hraness/pattern-language",
        "visibility": "open-source"
      },
      "surface": {
        "actionLabel": "read the studies",
        "interfaces": [
          "archive"
        ],
        "proof": "executable code-design studies that record when pattern guidance helps and when it does not"
      }
    },
    {
      "canonicalUrl": "https://sys1.io/skills",
      "description": "runs a check once, returns a short result, and keeps the full log",
      "emoji": "✂️",
      "featured": false,
      "homePack": null,
      "id": "system-one-skills",
      "marketing": {
        "category": "validation log skill",
        "headlines": [],
        "status": "proposed",
        "tagline": "cut noisy validation logs without a model call."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "system-one-skills",
        "names": {
          "name": "System One Skills",
          "command": "system-one-skills"
        },
        "category": "Validation log skill",
        "tagline": "Cut noisy validation logs without a model call.",
        "short": "Runs a check once, returns a short result, and keeps the full log",
        "meta": "System One Skills gives Devin, Claude Code, and Codex one skill that runs a noisy check once, returns a short result, and saves the full log locally.",
        "medium": "System One Skills gives Devin, Claude Code, and Codex one skill, system-one-verify, for long test and build logs. It runs the command once, returns a short result with the exit status, and saves the full log on your machine.",
        "hero": {
          "heading": "Give your agent shorter check results.",
          "summary": "System One Skills runs your noisy tests and builds once, returns a short result, and saves the full log. Install the system-one-verify skill for Codex, Claude Code, or Devin.",
          "primaryAction": "install the skill"
        },
        "headings": {
          "review-heading": "Add a second pass on code changes.",
          "verify-heading": "Check a completion message.",
          "workflows-heading": "Try decision workflows from source",
          "shipped-heading": "Keep noisy check output short",
          "use-it-for-a-status-decision": "Use it for a status decision.",
          "use-native-tools-for-diagnosis": "Use native tools for diagnosis.",
          "evidence-heading": "What has been measured.",
          "system-one-skills-research-candidates": "System One Skills research candidates",
          "catalog-heading": "Further compact-output research",
          "install-heading": "Install in your project.",
          "social-image-title": "Shorter test logs for your agent",
          "skills-first-check-heading": "Run your first check",
          "skills-further-reading-heading": "Further reading"
        },
        "channels": {
          "social": {
            "imageDescription": "No model or API key required."
          }
        },
        "status": {
          "default": "proposed"
        }
      },
      "name": "System One Skills",
      "source": {
        "repositoryUrl": "https://github.com/hraness/system-one-skills",
        "visibility": "open-source"
      },
      "surface": {
        "actionLabel": "install the skill",
        "interfaces": [
          "Agent Skill",
          "CLI"
        ],
        "proof": "one deterministic skill that cut validation-log text 35.20 percent across 563 replayed outputs"
      }
    },
    {
      "canonicalUrl": "https://github.com/hraness/ghostget-skills",
      "description": "packages provider reads and plan checks as programs with no model calls",
      "emoji": "🧾",
      "featured": false,
      "homePack": null,
      "id": "ghostget-skills",
      "marketing": {
        "category": "provider workflow skills",
        "headlines": [],
        "status": "proposed",
        "tagline": "ghostget workflows as programs you can replay."
      },
      "messaging": {
        "formatVersion": 1,
        "product": "ghostget-skills",
        "names": {
          "name": "GhostGet Skills",
          "command": "ghostget-skills"
        },
        "category": "Provider workflow skills",
        "tagline": "GhostGet workflows as programs you can replay.",
        "short": "Packages provider reads and plan checks as programs with no model calls",
        "meta": "GhostGet Skills packages GhostGet workflows as programs for Claude Code, Codex, and Devin, with no model calls and a receipt you can replay offline.",
        "medium": "GhostGet Skills packages common GhostGet workflows as programs for Claude Code, Codex, and Devin. They make no model calls, and every run leaves a receipt you can replay offline.",
        "hero": {
          "heading": "GhostGet workflows as programs you can replay.",
          "summary": "GhostGet Skills packages common GhostGet workflows as programs for Claude Code, Codex, and Devin. They make no model calls, and every run leaves a receipt you can replay offline.",
          "primaryAction": "install the skills"
        },
        "status": {
          "default": "proposed"
        }
      },
      "name": "GhostGet Skills",
      "source": {
        "repositoryUrl": "https://github.com/hraness/ghostget-skills",
        "visibility": "open-source"
      },
      "surface": {
        "actionLabel": "install the skills",
        "interfaces": [
          "Agent Skill",
          "CLI"
        ],
        "proof": "ALGAL programs for GhostGet reads, plan checks, and drift watch, with zero model calls"
      }
    }
  ],
  "relations": [
    {
      "direction": "forward",
      "id": "runtime:hraness:ui:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "hraness",
      "target": "ui"
    },
    {
      "direction": "forward",
      "id": "runtime:hraness:design-kit:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "hraness",
      "target": "design-kit"
    },
    {
      "direction": "forward",
      "id": "runtime:hraness:posthog-sdk:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "hraness",
      "target": "posthog-sdk"
    },
    {
      "direction": "forward",
      "id": "runtime:hraness:vercel-delivery:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "hraness",
      "target": "vercel-delivery"
    },
    {
      "direction": "forward",
      "id": "runtime:hraness:web-discovery:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "hraness",
      "target": "web-discovery"
    },
    {
      "direction": "forward",
      "id": "runtime:aicharts:ui:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "aicharts",
      "target": "ui"
    },
    {
      "direction": "forward",
      "id": "runtime:aicharts:design-kit:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "aicharts",
      "target": "design-kit"
    },
    {
      "direction": "forward",
      "id": "runtime:aicharts:vercel-delivery:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "aicharts",
      "target": "vercel-delivery"
    },
    {
      "direction": "forward",
      "id": "runtime:aicharts:web-discovery:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "aicharts",
      "target": "web-discovery"
    },
    {
      "direction": "forward",
      "id": "runtime:swft:vercel-delivery:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "swft",
      "target": "vercel-delivery"
    },
    {
      "direction": "forward",
      "id": "runtime:swft:web-discovery:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "swft",
      "target": "web-discovery"
    },
    {
      "direction": "forward",
      "id": "runtime:lifedaysleft:design-kit:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "lifedaysleft",
      "target": "design-kit"
    },
    {
      "direction": "forward",
      "id": "runtime:lifedaysleft:result:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "lifedaysleft",
      "target": "result"
    },
    {
      "direction": "forward",
      "id": "runtime:lifedaysleft:slopcamera:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "lifedaysleft",
      "target": "slopcamera"
    },
    {
      "direction": "forward",
      "id": "runtime:sleepyland:ui:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "sleepyland",
      "target": "ui"
    },
    {
      "direction": "forward",
      "id": "runtime:sleepyland:design-kit:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "sleepyland",
      "target": "design-kit"
    },
    {
      "direction": "forward",
      "id": "runtime:sleepyland:posthog-sdk:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "sleepyland",
      "target": "posthog-sdk"
    },
    {
      "direction": "forward",
      "id": "runtime:sleepyland:vercel-delivery:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "sleepyland",
      "target": "vercel-delivery"
    },
    {
      "direction": "forward",
      "id": "runtime:sleepyland:web-discovery:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "sleepyland",
      "target": "web-discovery"
    },
    {
      "direction": "forward",
      "id": "runtime:roughday:ui:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "roughday",
      "target": "ui"
    },
    {
      "direction": "forward",
      "id": "runtime:roughday:design-kit:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "roughday",
      "target": "design-kit"
    },
    {
      "direction": "forward",
      "id": "runtime:roughday:vercel-delivery:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "roughday",
      "target": "vercel-delivery"
    },
    {
      "direction": "forward",
      "id": "development:roughday:direct:develops-with",
      "kind": "development",
      "label": "develops with",
      "source": "roughday",
      "target": "direct"
    },
    {
      "direction": "forward",
      "id": "runtime:stripe-history:ui:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "stripe-history",
      "target": "ui"
    },
    {
      "direction": "forward",
      "id": "runtime:stripe-history:design-kit:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "stripe-history",
      "target": "design-kit"
    },
    {
      "direction": "forward",
      "id": "runtime:stripe-history:vercel-delivery:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "stripe-history",
      "target": "vercel-delivery"
    },
    {
      "direction": "forward",
      "id": "runtime:stripe-history:web-discovery:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "stripe-history",
      "target": "web-discovery"
    },
    {
      "detail": "Hraness proxies the standalone Stripe History data application under its canonical /stripe route.",
      "direction": "forward",
      "id": "delivery:stripe-history:hraness:published-at-stripe",
      "kind": "delivery",
      "label": "published at /stripe",
      "source": "stripe-history",
      "target": "hraness"
    },
    {
      "direction": "forward",
      "id": "runtime:eds-research:vercel-delivery:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "eds-research",
      "target": "vercel-delivery"
    },
    {
      "direction": "forward",
      "id": "runtime:eds-research:web-discovery:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "eds-research",
      "target": "web-discovery"
    },
    {
      "detail": "Hraness proxies the standalone EDS research index under its canonical /eds route.",
      "direction": "forward",
      "id": "delivery:eds-research:hraness:published-at-eds",
      "kind": "delivery",
      "label": "published at /eds",
      "source": "eds-research",
      "target": "hraness"
    },
    {
      "direction": "forward",
      "id": "runtime:act60:ui:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "act60",
      "target": "ui"
    },
    {
      "direction": "forward",
      "id": "runtime:act60:design-kit:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "act60",
      "target": "design-kit"
    },
    {
      "direction": "forward",
      "id": "runtime:act60:result:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "act60",
      "target": "result"
    },
    {
      "direction": "forward",
      "id": "runtime:act60:convex-toolkit:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "act60",
      "target": "convex-toolkit"
    },
    {
      "direction": "forward",
      "id": "runtime:act60:suite-accounts:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "act60",
      "target": "suite-accounts"
    },
    {
      "direction": "forward",
      "id": "runtime:act60:vercel-delivery:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "act60",
      "target": "vercel-delivery"
    },
    {
      "direction": "forward",
      "id": "runtime:wrench:kb:ships-kb-workflows",
      "kind": "runtime",
      "label": "ships KB workflows",
      "source": "wrench",
      "target": "kb"
    },
    {
      "detail": "GhostGet produces bounded multi-account Beeper bundles that TextButler verifies and ingests locally.",
      "direction": "forward",
      "id": "contract:wrench:message-like-me:exports-private-bundles",
      "kind": "contract",
      "label": "exports private bundles",
      "source": "wrench",
      "target": "message-like-me"
    },
    {
      "detail": "PeopleBlade uses GhostGet to read contacts and search results from connected accounts such as Beeper and WhatsApp, and checks each result before saving it locally.",
      "direction": "forward",
      "id": "runtime:peopleblade:wrench:provider-transport",
      "kind": "runtime",
      "label": "provider transport",
      "source": "peopleblade",
      "target": "wrench"
    },
    {
      "detail": "Both tools implement the versioned message-like-me.local-message-bundle interchange without importing each other's private state.",
      "direction": "shared",
      "id": "contract:message-like-me:peopleblade:shared-bundle-format",
      "kind": "contract",
      "label": "shared bundle format",
      "source": "message-like-me",
      "target": "peopleblade"
    },
    {
      "direction": "forward",
      "id": "runtime:gobstopper:ui:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "gobstopper",
      "target": "ui"
    },
    {
      "direction": "forward",
      "id": "runtime:gobstopper:design-kit:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "gobstopper",
      "target": "design-kit"
    },
    {
      "detail": "Excalibur (xcb) uses Gobstopper's elision policy to drop stale tool output from Claude Code and Codex prompts once context passes a threshold, and keeps the original output in local history. It is on by default.",
      "direction": "forward",
      "id": "runtime:gobstopper:xcb:compacts-sessions-for",
      "kind": "runtime",
      "label": "compacts sessions for",
      "source": "gobstopper",
      "target": "xcb"
    },
    {
      "direction": "forward",
      "id": "runtime:xcb:ui:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "xcb",
      "target": "ui"
    },
    {
      "direction": "forward",
      "id": "runtime:xcb:design-kit:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "xcb",
      "target": "design-kit"
    },
    {
      "detail": "Excalibur (xcb) measures subscription usage locally and, when you turn on exports, writes session files in the aicharts format. Automatic upload is not available.",
      "direction": "forward",
      "id": "contract:xcb:aicharts:exports-sessions-for",
      "kind": "contract",
      "label": "exports sessions for",
      "source": "xcb",
      "target": "aicharts"
    },
    {
      "direction": "forward",
      "id": "runtime:soulscrape:ui:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "soulscrape",
      "target": "ui"
    },
    {
      "direction": "forward",
      "id": "runtime:soulscrape:design-kit:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "soulscrape",
      "target": "design-kit"
    },
    {
      "detail": "Soulscrape exports dated dossier packets that PeopleBlade imports and rebinds to contacts during local merge review.",
      "direction": "forward",
      "id": "contract:soulscrape:peopleblade:exports-dossier-packets",
      "kind": "contract",
      "label": "exports dossier packets",
      "source": "soulscrape",
      "target": "peopleblade"
    },
    {
      "direction": "forward",
      "id": "runtime:wrench:ui:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "wrench",
      "target": "ui"
    },
    {
      "direction": "forward",
      "id": "runtime:wrench:design-kit:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "wrench",
      "target": "design-kit"
    },
    {
      "direction": "forward",
      "id": "runtime:message-like-me:ui:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "message-like-me",
      "target": "ui"
    },
    {
      "direction": "forward",
      "id": "runtime:message-like-me:design-kit:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "message-like-me",
      "target": "design-kit"
    },
    {
      "direction": "forward",
      "id": "runtime:slopcamera:design-kit:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "slopcamera",
      "target": "design-kit"
    },
    {
      "direction": "forward",
      "id": "development:slopcamera:direct:develops-with",
      "kind": "development",
      "label": "develops with",
      "source": "slopcamera",
      "target": "direct"
    },
    {
      "direction": "forward",
      "id": "runtime:peopleblade:ui:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "peopleblade",
      "target": "ui"
    },
    {
      "direction": "forward",
      "id": "runtime:peopleblade:design-kit:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "peopleblade",
      "target": "design-kit"
    },
    {
      "direction": "forward",
      "id": "runtime:peopleblade:posthog-sdk:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "peopleblade",
      "target": "posthog-sdk"
    },
    {
      "direction": "forward",
      "id": "runtime:sponge:ui:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "sponge",
      "target": "ui"
    },
    {
      "direction": "forward",
      "id": "runtime:sponge:design-kit:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "sponge",
      "target": "design-kit"
    },
    {
      "direction": "forward",
      "id": "runtime:sponge:convex-toolkit:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "sponge",
      "target": "convex-toolkit"
    },
    {
      "direction": "forward",
      "id": "runtime:sponge:posthog-sdk:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "sponge",
      "target": "posthog-sdk"
    },
    {
      "direction": "forward",
      "id": "runtime:sponge:suite-accounts:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "sponge",
      "target": "suite-accounts"
    },
    {
      "direction": "forward",
      "id": "runtime:sponge:vercel-delivery:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "sponge",
      "target": "vercel-delivery"
    },
    {
      "direction": "forward",
      "id": "runtime:sponge:web-discovery:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "sponge",
      "target": "web-discovery"
    },
    {
      "direction": "forward",
      "id": "runtime:kb:ui:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "kb",
      "target": "ui"
    },
    {
      "direction": "forward",
      "id": "runtime:kb:design-kit:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "kb",
      "target": "design-kit"
    },
    {
      "detail": "Hraness renders the pinned public Direct README and Agent Skill at /direct.",
      "direction": "forward",
      "id": "delivery:direct:hraness:readme-backed-direct",
      "kind": "delivery",
      "label": "README-backed /direct",
      "source": "direct",
      "target": "hraness"
    },
    {
      "direction": "forward",
      "id": "runtime:soundfish:ui:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "soundfish",
      "target": "ui"
    },
    {
      "direction": "forward",
      "id": "runtime:soundfish:result:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "soundfish",
      "target": "result"
    },
    {
      "direction": "forward",
      "id": "development:soundfish:direct:develops-with",
      "kind": "development",
      "label": "develops with",
      "source": "soundfish",
      "target": "direct"
    },
    {
      "direction": "forward",
      "id": "runtime:oh-computer:ui:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "oh-computer",
      "target": "ui"
    },
    {
      "direction": "forward",
      "id": "runtime:oh-computer:design-kit:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "oh-computer",
      "target": "design-kit"
    },
    {
      "detail": "The public Oh site publishes the versioned specification for the @hraness/oh kernel from the same repository.",
      "direction": "forward",
      "id": "delivery:oh-computer:oh:publishes-kernel-specification",
      "kind": "delivery",
      "label": "publishes kernel specification",
      "source": "oh-computer",
      "target": "oh"
    },
    {
      "direction": "forward",
      "id": "runtime:design-kit:ui:builds-on",
      "kind": "runtime",
      "label": "builds on",
      "source": "design-kit",
      "target": "ui"
    },
    {
      "direction": "forward",
      "id": "runtime:suite-accounts:result:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "suite-accounts",
      "target": "result"
    },
    {
      "detail": "The public Suite Accounts package validates the protocol spoken by products and the Accounts authority.",
      "direction": "forward",
      "id": "contract:suite-accounts:accounts:oauth-protocol",
      "kind": "contract",
      "label": "OAuth protocol",
      "source": "suite-accounts",
      "target": "accounts"
    },
    {
      "detail": "TextButler can classify messages and draft replies through Excalibur (xcb) on the Claude Code or Codex subscription you already pay for, with xcb holding the sign-in; a separately billed API route also exists.",
      "direction": "forward",
      "id": "runtime:message-like-me:xcb:drafts-replies-through",
      "kind": "runtime",
      "label": "drafts replies through",
      "source": "message-like-me",
      "target": "xcb"
    },
    {
      "detail": "TextButler's opt-in per-contact habitats run as ALGAL programs: a candidate reply plan replaces the current one only after a blind replay shows no regression, and no plan can change the recipient, provider, or permissions.",
      "direction": "forward",
      "id": "runtime:message-like-me:algal:runs-reply-habitats-on",
      "kind": "runtime",
      "label": "runs reply habitats on",
      "source": "message-like-me",
      "target": "algal"
    },
    {
      "detail": "Sponge's hosted library at sponge.computer keeps its research agents' working memory in a server-side Oh store, separate from the reviewed knowledge in its product database.",
      "direction": "forward",
      "id": "runtime:sponge:oh-computer:keeps-its-hosted-library-s-agent-working-memory-in",
      "kind": "runtime",
      "label": "keeps its hosted library's agent working memory in",
      "source": "sponge",
      "target": "oh-computer"
    },
    {
      "detail": "Wordcell rebuilds a disposable Oh graph from your Markdown to answer named graph queries with source proofs; Markdown and Git stay the record, and search does not use Oh's memory retrieval.",
      "direction": "forward",
      "id": "runtime:kb:oh-computer:answers-graph-queries-with",
      "kind": "runtime",
      "label": "answers graph queries with",
      "source": "kb",
      "target": "oh-computer"
    },
    {
      "detail": "Excalibur (xcb) embeds the ALGAL runtime for task transitions, route and settle reflexes, and resumable controllers, and its task verifier replays a task's recorded history offline; the managed harness is experimental.",
      "direction": "forward",
      "id": "runtime:xcb:algal:replays-task-history-with",
      "kind": "runtime",
      "label": "replays task history with",
      "source": "xcb",
      "target": "algal"
    },
    {
      "detail": "Excalibur (xcb) can bind one explicit Wordcell vault through a hash-pinned CLI, giving workers a read-only memory search with citations; saving a note back to the vault is always an explicit step.",
      "direction": "forward",
      "id": "runtime:xcb:kb:searches-project-notes-with",
      "kind": "runtime",
      "label": "searches project notes with",
      "source": "xcb",
      "target": "kb"
    },
    {
      "detail": "Clankdar's default puzzles are small programs in ALGAL's expression language, and ALGAL's official evaluator, pinned by commit and hash, computes each reference answer, so no judge model decides.",
      "direction": "forward",
      "id": "runtime:clankdar:algal:scores-puzzles-with",
      "kind": "runtime",
      "label": "scores puzzles with",
      "source": "clankdar",
      "target": "algal"
    },
    {
      "detail": "SlopCamera's scene behavior bake runs character behavior as ALGAL organisms with no executors or side effects.",
      "direction": "forward",
      "id": "runtime:slopcamera:algal:bakes-character-behavior-with",
      "kind": "runtime",
      "label": "bakes character behavior with",
      "source": "slopcamera",
      "target": "algal"
    },
    {
      "detail": "Sponge captures signed-in pages through GhostGet, storing only a login name, and the hosted library at sponge.computer imports GhostGet's text-only capture bundles offline.",
      "direction": "forward",
      "id": "runtime:sponge:wrench:captures-signed-in-pages-through",
      "kind": "runtime",
      "label": "captures signed-in pages through",
      "source": "sponge",
      "target": "wrench"
    },
    {
      "detail": "Sponge's hosted library at sponge.computer converts a public Soulscrape research exchange offline into an Oh research packet that it does not treat as established fact.",
      "direction": "forward",
      "id": "contract:sponge:soulscrape:imports-research-exchanges-into-its-hosted-library-from",
      "kind": "contract",
      "label": "imports research exchanges into its hosted library from",
      "source": "sponge",
      "target": "soulscrape"
    },
    {
      "detail": "Excalibur (xcb) depends on @hraness/relay and instantiates its Convex relay modules for devices, commands, envelopes, invites, projections, and maintenance.",
      "direction": "forward",
      "id": "runtime:xcb:relay:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "xcb",
      "target": "relay"
    },
    {
      "detail": "Pattern Language uses ALGAL so its design experiments stay inspectable: content-addressed manifests and records you can replay.",
      "direction": "forward",
      "id": "development:pattern-language:algal:runs-studies-with",
      "kind": "development",
      "label": "runs studies with",
      "source": "pattern-language",
      "target": "algal"
    },
    {
      "detail": "The System One Skills guide is published at sys1.io/skills on the Sys1 site; the skill pack does not require Sys1 at runtime.",
      "direction": "forward",
      "id": "delivery:system-one-skills:sys1:skills-guide-hosted-by",
      "kind": "delivery",
      "label": "skills guide hosted by",
      "source": "system-one-skills",
      "target": "sys1"
    },
    {
      "detail": "GhostGet Skills wraps the GhostGet CLI for catalog, plan check, invoke, read, doctor, and auth list, and pins @hraness/ghostget.",
      "direction": "forward",
      "id": "runtime:ghostget-skills:wrench:uses",
      "kind": "runtime",
      "label": "uses",
      "source": "ghostget-skills",
      "target": "wrench"
    },
    {
      "detail": "Each GhostGet Skills workflow is an ALGAL program the ALGAL runtime executes; the package pins @hraness/algal.",
      "direction": "forward",
      "id": "runtime:ghostget-skills:algal:runs-programs-on",
      "kind": "runtime",
      "label": "runs programs on",
      "source": "ghostget-skills",
      "target": "algal"
    },
    {
      "detail": "Messages reach TextButler through GhostGet, a separate Mac tool you install first for messaging sign-in and permissions, and TextButler's marked replies go back the same way.",
      "direction": "forward",
      "id": "runtime:message-like-me:wrench:reads-and-sends-messages-through",
      "kind": "runtime",
      "label": "reads and sends messages through",
      "source": "message-like-me",
      "target": "wrench"
    },
    {
      "detail": "Sponge uses Wordcell for documents and PDF text, renders a static Wordcell edition when you publish, and can put selected documents on a wordcell.io site.",
      "direction": "forward",
      "id": "runtime:sponge:kb:keeps-documents-in",
      "kind": "runtime",
      "label": "keeps documents in",
      "source": "sponge",
      "target": "kb"
    },
    {
      "detail": "Sponge runs on ALGAL, and a candidate strategy for brief research must pass a sealed evaluation that ALGAL replays; nothing changes until you adopt it or restore the previous one.",
      "direction": "forward",
      "id": "runtime:sponge:algal:evolves-research-strategies-with",
      "kind": "runtime",
      "label": "evolves research strategies with",
      "source": "sponge",
      "target": "algal"
    },
    {
      "detail": "Sponge reaches every model through a hash-pinned Excalibur (xcb) executable, so provider sign-ins stay in xcb.",
      "direction": "forward",
      "id": "runtime:sponge:xcb:reaches-models-through",
      "kind": "runtime",
      "label": "reaches models through",
      "source": "sponge",
      "target": "xcb"
    },
    {
      "detail": "ALGAL's xcb executor hands coding tasks to Excalibur (xcb) through its JSON run command, and ALGAL never copies credentials or reimplements account switching.",
      "direction": "forward",
      "id": "runtime:algal:xcb:delegates-coding-tasks-to",
      "kind": "runtime",
      "label": "delegates coding tasks to",
      "source": "algal",
      "target": "xcb"
    },
    {
      "detail": "Soundfish's evolve command turns a loop into an evolving recipe that a bundled ALGAL evaluator, pinned by SHA-256, runs offline.",
      "direction": "forward",
      "id": "runtime:soundfish:algal:evolves-loops-with",
      "kind": "runtime",
      "label": "evolves loops with",
      "source": "soundfish",
      "target": "algal"
    },
    {
      "detail": "The aicharts collector parses Gobstopper's numeric compaction telemetry and never reads transcript content.",
      "direction": "forward",
      "id": "runtime:aicharts:gobstopper:reads-compaction-telemetry-from",
      "kind": "runtime",
      "label": "reads compaction telemetry from",
      "source": "aicharts",
      "target": "gobstopper"
    },
    {
      "detail": "The icon.place drawing lab runs each experiment as an ALGAL program in the browser and records the proposal, candidates, and selection as receipts it can replay; the live site does not use ALGAL yet.",
      "direction": "forward",
      "id": "runtime:iconplace:algal:records-drawing-runs-with",
      "kind": "runtime",
      "label": "records drawing runs with",
      "source": "iconplace",
      "target": "algal"
    },
    {
      "detail": "The installed CLI verifies release files and installation ownership before updating, preserving saved preferences and version pins.",
      "direction": "forward",
      "id": "runtime:peopleblade:cli-update:updates-installed-cli",
      "kind": "runtime",
      "label": "updates installed CLI",
      "source": "peopleblade",
      "target": "cli-update"
    },
    {
      "detail": "The installed CLI verifies release files and installation ownership before updating, preserving saved preferences and version pins.",
      "direction": "forward",
      "id": "runtime:kb:cli-update:updates-installed-cli",
      "kind": "runtime",
      "label": "updates installed CLI",
      "source": "kb",
      "target": "cli-update"
    },
    {
      "detail": "The installed CLI verifies release files and installation ownership before updating, preserving saved preferences and version pins.",
      "direction": "forward",
      "id": "runtime:slopcamera:cli-update:updates-installed-cli",
      "kind": "runtime",
      "label": "updates installed CLI",
      "source": "slopcamera",
      "target": "cli-update"
    },
    {
      "detail": "The installed CLI verifies release files and installation ownership before updating, preserving saved preferences and version pins.",
      "direction": "forward",
      "id": "runtime:sys1:cli-update:updates-installed-cli",
      "kind": "runtime",
      "label": "updates installed CLI",
      "source": "sys1",
      "target": "cli-update"
    },
    {
      "detail": "The installed CLI verifies release files and installation ownership before updating, preserving saved preferences and version pins.",
      "direction": "forward",
      "id": "runtime:lifedaysleft:cli-update:updates-installed-cli",
      "kind": "runtime",
      "label": "updates installed CLI",
      "source": "lifedaysleft",
      "target": "cli-update"
    },
    {
      "detail": "The installed CLI verifies release files and installation ownership before updating, preserving saved preferences and version pins.",
      "direction": "forward",
      "id": "runtime:sponge:cli-update:updates-installed-cli",
      "kind": "runtime",
      "label": "updates installed CLI",
      "source": "sponge",
      "target": "cli-update"
    },
    {
      "detail": "The installed CLI verifies release files and installation ownership before updating, preserving saved preferences and version pins.",
      "direction": "forward",
      "id": "runtime:algal:cli-update:updates-installed-cli",
      "kind": "runtime",
      "label": "updates installed CLI",
      "source": "algal",
      "target": "cli-update"
    },
    {
      "detail": "The installed CLI verifies release files and installation ownership before updating, preserving saved preferences and version pins.",
      "direction": "forward",
      "id": "runtime:xcb:cli-update:updates-installed-cli",
      "kind": "runtime",
      "label": "updates installed CLI",
      "source": "xcb",
      "target": "cli-update"
    },
    {
      "detail": "The installed CLI verifies release files and installation ownership before updating, preserving saved preferences and version pins.",
      "direction": "forward",
      "id": "runtime:valhalla:cli-update:updates-installed-cli",
      "kind": "runtime",
      "label": "updates installed CLI",
      "source": "valhalla",
      "target": "cli-update"
    },
    {
      "detail": "The installed CLI verifies release files and installation ownership before updating, preserving saved preferences and version pins.",
      "direction": "forward",
      "id": "runtime:gobstopper:cli-update:updates-installed-cli",
      "kind": "runtime",
      "label": "updates installed CLI",
      "source": "gobstopper",
      "target": "cli-update"
    },
    {
      "detail": "The installed CLI verifies release files and installation ownership before updating, preserving saved preferences and version pins.",
      "direction": "forward",
      "id": "runtime:soundfish:cli-update:updates-installed-cli",
      "kind": "runtime",
      "label": "updates installed CLI",
      "source": "soundfish",
      "target": "cli-update"
    },
    {
      "detail": "The installed CLI verifies release files and installation ownership before updating, preserving saved preferences and version pins.",
      "direction": "forward",
      "id": "runtime:wrench:cli-update:updates-installed-cli",
      "kind": "runtime",
      "label": "updates installed CLI",
      "source": "wrench",
      "target": "cli-update"
    },
    {
      "detail": "The installed CLI verifies release files and installation ownership before updating, preserving saved preferences and version pins.",
      "direction": "forward",
      "id": "runtime:oh-computer:cli-update:updates-installed-cli",
      "kind": "runtime",
      "label": "updates installed CLI",
      "source": "oh-computer",
      "target": "cli-update"
    }
  ],
  "url": "https://hraness.com/portfolio.json"
}
