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
@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
Sidebar controls π
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:
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
Create
packages/core/src/<domain>/{index.ts, β¦}.tsand export fromindex.ts. Subpath exports cover it automatically viapackages/core/package.jsonwildcards.Add a vitest spec at
packages/core/src/<domain>/<domain>.test.ts.If the domain needs a new dep, add it to
packages/core/package.jsondependencies.
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
Create
packages/<my-ui>/src/and copypackages/text-ui/{package.json,tsconfig.json}as a starting point.Depend on
@holons/corevia"@holons/core": "workspace:*".Run
pnpm installfrom the repo root.Implement the renderer/parser/input-mode against
@holons/core/commandsso all UIs invoke the same actions.
See also
MCP Server β
@holons/mcp-uiin depthHolonsBot β 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?