Back to Projects

Heartwood. Give your agents a spine.

Heartwood is a truth engine for AI agents. It stores what a project actually is as a hardened, hierarchical tree of truths, and serves that tree to any agent over MCP. The name is the model: heartwood is the dead, hard core at the center of a tree, the part that carries the whole trunk. Here too, age becomes hardness, the core bears everything, and the deeper a truth sits, the harder a passing prompt can bend it.

The Problem

An agent has no durable model of your project. Every task it re-guesses what the thing is, who it is for, how it sounds. The knowledge exists, but it is scattered across docs, config, chat history and your head, and nothing guarantees the agent loads the right piece. Worse, whatever it learns in a session evaporates after it. Features drift, the marketing comes out different every time, and sometimes the agent simply gets the project wrong.

Heartwood makes that knowledge structured, persistent, authoritative and runtime agnostic.

The Model

A project's truth is a tree. Roots hold the few unchangeable truths, what the thing fundamentally is. The trunk carries direction, brand and positioning. Branches are features and capabilities. Leaves are concrete, volatile details.

Depth is a single axis on which four things meet. The deeper a node sits, the more authoritative it is against a prompt, the more stable it is over time, the more expensive it is to change, and the more immutable it is in daily work. The placement question is simple: how often does this honestly change? Never goes to the roots. Every sprint is a leaf.

Hardness and the Iron Rule

A node's hardness is the maximum of three sources: set by a human, structural from how much load bears on top of it, and proven from how long it has stood unchanged. The number is computed and stored server side, and it is authoritative at read time.

The rule is blunt: AI proposes, the server enforces. An agent may propose placement and hardness for new nodes, never re-rate existing ones at runtime. Otherwise a clever prompt talks the agent into treating a root as soft and the whole protection collapses. Tell an agent your tool is hospital software and the root pushes back instead of going along. Changing a hard node is blocked until a human confirms with the cascade shown, this invalidates these twelve children, confirm. The friction is the feature.

Connect in Two Minutes

Sign in with GitHub, mint an API token, and point your agent at the streamable HTTP endpoint https://heartwood.wlankabl.com/mcp with a bearer token. The same tree is served to every runtime that speaks MCP, Claude Code included, and a SessionStart hook can load your protected core into every new chat before the first prompt lands.

Tech Stack

The server is Fastify 5 in TypeScript, with Drizzle ORM over PostgreSQL, Zod validation, and the official Model Context Protocol SDK exposing a streamable HTTP server at /mcp. Auth is GitHub OAuth with per account API tokens, every tree tenant scoped so one token only ever sees its owner's forest.

The web app is Nuxt 4 with Vue 3.5 and Tailwind CSS 4, the truth tree drawn with D3. Everything ships as prebuilt container images, deployed through GitHub Actions with a healthcheck and rollback behind nginx and certbot. Hardness is unit tested with Vitest, because the whole point collapses if the server miscomputes what is hard.

Dogfooded, Not Sold

Heartwood is the first example of what it manages. Its own identity lives as a tree inside the tool, authored through the tool, and it is dogfooded against two real products, KeeperLog and ZentraX. If it does not visibly make those two move faster, it has failed its own thesis. That is the bar.

This is deliberately not a revenue product. No billing, no growth story, portfolio plus self use, free and self hostable. It stays the knowledge layer underneath the agent stack: not a runtime, not a methodology, not another prompt pack. It is the part that remembers what the project actually is, so every agent on top starts from the same hard core.