For the complete documentation index, see llms.txt. This page is also available as Markdown.

Harvest 🌱

The Holons monorepo β€” one shared core, five interfaces

Harvest is the unified codebase of the Holons ecosystem. It is a pnpm monorepo containing one shared core (@holons/core) and a family of interfaces that all call into it. Every actionβ€”create a task, vote on a proposal, log an expense, publish to federationβ€”means the same thing in every interface, because every interface invokes the same core function.

What was once "the Harvest dashboard" is now apps/web inside this monorepo. The Telegram bot, CLI, AI agent loop, and MCP server live alongside it as sibling packages.

Architecture

         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
         β”‚                    @holons/core                        β”‚
         β”‚  scoring Β· tasks Β· federation Β· holosphere Β· shopping  β”‚
         β”‚  settings Β· dna Β· users Β· expenses Β· calendar Β· libraryβ”‚
         β”‚  checklists Β· council Β· categories Β· commands Β· REA    β”‚
         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
            β–²          β–²          β–²          β–²           β–²
            β”‚          β”‚          β”‚          β”‚           β”‚
       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
       β”‚harvest-β”‚ β”‚telegram-β”‚ β”‚text-ui β”‚ β”‚ai-ui   β”‚ β”‚mcp-ui   β”‚
       β”‚  web   β”‚ β”‚   ui    β”‚ β”‚ (CLI)  β”‚ β”‚(Claude)β”‚ β”‚(MCP srv)β”‚
       β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                       β–Ό
              HoloSphere (GunDB + Nostr federation)

Packages

Package
Path
What it owns

@holons/core

packages/core/

UI-agnostic domain logic. Scoring, tasks, federation, HoloSphere I/O, DNA, users, expenses, calendar, library, checklists, council, categories, commands, REA.

harvest-web

apps/web/

SvelteKit web app β€” Mapbox/H3 visualizations, schema-driven forms, federation UI. The "dashboard" most people mean when they say Harvest.

@holons/telegram-ui

packages/telegram-ui/

Telegraf bot β€” scenes, inline keyboards, Puppeteer screenshots. The current incarnation of HolonsBot.

@holons/text-ui

packages/text-ui/

Framework-agnostic CLI / REPL. Calls @holons/core/commands.

@holons/ai-ui

packages/ai-ui/

In-process Claude tool-use loop. Exposes @holons/core/commands directly as Claude tools so an agent can drive a holon in natural language.

@holons/mcp-ui

packages/mcp-ui/

MCP server β€” every public @holons/core function as an independently-callable MCP tool. Used by Claude Desktop, IDE integrations, and external agents.

The shared core

Every domain in @holons/core is published under a subpath export, so any UI imports just what it needs:

There is no cross-domain barrel β€” each domain stands on its own under packages/core/src/<domain>/index.ts. This is what keeps the five UIs in sync without coupling them.

A non-exhaustive view of the domains:

  • scoring β€” value-equation evaluation, per user / per action / breakdown

  • tasks β€” unified quest model (tasks, proposals, events, offers, requests)

  • council β€” proposal lifecycle and consent-based voting

  • dna β€” holon DNA sequences and chromosomes

  • federation β€” cross-holon publishing via HoloSphere + Nostr

  • holosphere β€” identity-aware reads and writes against the substrate

  • expenses β€” shared cost logging and splitting

  • calendar β€” events, recurring events, scheduling

  • users β€” multi-holon membership and appreciation tracking

  • library β€” shared resource catalog with tagging and search

  • checklists β€” recurring and role-based task lists

  • rea β€” Resource-Event-Agent accounting model

  • settings, categories, commands β€” supporting domains

Each domain has its own vitest suite under packages/core/src/<domain>/<domain>.test.ts.

The web dashboard

apps/web (formerly the standalone Harvest repo) is the SvelteKit visualization surface:

Holonic network visualization πŸ•ΈοΈ

  • Interactive network graph showing holons and their relationships

  • Real-time updates of holon states and connections

  • Zoom and pan controls for easy navigation

  • Color-coded nodes representing different holon types and states

Holon management πŸŽ›οΈ

  • View detailed information about individual holons

  • Monitor holon health and status

  • Inspect holon properties and configurations

  • Track holon relationships and dependencies

  • Filter holons by type or status

  • Search functionality to quickly find specific holons

  • Collapsible sidebar for maximizing view space

  • Real-time metrics and statistics

Mapbox and H3 power the geospatial views; schema-driven forms let any lens defined in core be edited from the UI.

Getting started

The monorepo uses pnpm workspaces. Node β‰₯20 and pnpm β‰₯10 are required.

To run a specific UI:

Command
What it starts

pnpm dev

The web dashboard (apps/web)

pnpm dev:bot

The Telegram bot

pnpm -F @holons/text-ui exec holons --help

The CLI

pnpm -F @holons/ai-ui exec holons-ai "…"

The Claude AI loop (needs ANTHROPIC_API_KEY)

node packages/mcp-ui/dist/index.js

The MCP server (stdio)

node packages/mcp-ui/dist/index.js --port 3200

The MCP server (SSE on HTTP)

Memory management (web dashboard)

When working with large holonic networks, memory usage can be significant due to the amount of data being processed and visualized. If you encounter "JavaScript heap out of memory" errors:

For long-running production deployments, set memory limits based on your server specifications and the size of the federated network you expect to visualize.

Adding a new shared domain

  1. Create packages/core/src/<domain>/{index.ts, …}.ts and export from index.ts. Subpath exports cover it automatically via packages/core/package.json wildcards.

  2. Add a vitest spec at packages/core/src/<domain>/<domain>.test.ts.

  3. If the domain needs a new dep, add it to packages/core/package.json dependencies.

The same domain becomes available to every UI without any per-UI plumbingβ€”and, because @holons/mcp-ui auto-registers tools for known domains, also becomes callable as an MCP tool with no extra work beyond writing a thin wrapper.

Adding a new UI

  1. Create packages/<my-ui>/src/ and copy packages/text-ui/{package.json,tsconfig.json} as a starting point.

  2. Depend on @holons/core via "@holons/core": "workspace:*".

  3. Run pnpm install from the repo root.

  4. Implement the renderer/parser/input-mode against @holons/core/commands so all UIs invoke the same actions.

See also

  • MCP Server β€” @holons/mcp-ui in depth

  • HolonsBot β€” the Telegram interface (@holons/telegram-ui)

  • HoloSphere β€” the distributed substrate every package writes to

  • Glossary β€” vocabulary for the protocol concepts the code implements

Last updated

Was this helpful?