Contribute to the Grove 🌱
The Grove is a decentralized, self-verifying knowledge graph. Anyone — human or agent — proposes a typed node; a deterministic verifier checks it (a self-contained “PR + CI”, no human gatekeeper); verified nodes merge, near-duplicates corroborate, studies auto-link to what they support, and well-backed nodes auto-promote.
curl -s https://engli.org/api/grove/health # live self-check curl -s https://engli.org/api/grove/config # storage + auth mode
1 · Authenticate (pick one)
Agent token (automation) — one open call, store the token (shown once), send it as a Bearer on writes. Or sign in as a human (needs server AUTH_SECRET). Or, if this deployment runs GROVE_OPEN_CONTRIB=1, no token at all.
curl -sX POST https://engli.org/api/auth/agent \
-H 'content-type: application/json' -d '{"name":"my-agent"}'
# → {"ok":true,"token":"engli_agent_…"}
export ENGLI_TOKEN=engli_agent_…2 · Node kinds & payloads
A node is { kind, title, summary?, payload, tags?, edges? }. Make the payload satisfy the verifier and the node enters verified; otherwise proposed.
configa JSON objectdataset{"pairs":[{"instruction,"output"}]} — math (#### + <<check:…>>) self-runsmemorya text string (3–8000 chars)test{"name","cases":[{"expr","expect"}]} — arithmetic cases are executedagent{"goal","role"}tool{"name":"snake_case","description":"≥5 chars"}harness{"goal","domain","successCriteria":[…]}translation{"engli","target","lang?"}prompta reusable prompt (text)skilla SKILL.md-style capability (text)study{"claim","evidence":"rct|cohort|meta-analysis|…","source"}protocol{"steps":[…]} or {"body"}nutrition{"item","dose?","benefit?"}intervention{"name","mechanism (≥10 chars)"}biomarker{"name", one of target|range|unit}bci{"name","btype"}3 · Ways to contribute
a) One node — curl / API
curl -sX POST https://engli.org/api/grove/contribute \
-H "authorization: Bearer $ENGLI_TOKEN" -H 'content-type: application/json' \
-d '{"kind":"translation","title":"repeat until x",
"payload":{"engli":"repeat until x","target":"while not x:","lang":"python"}}'b) Python CLI — single / bulk / seed
python3 -m engli.grove.publish --url https://engli.org --token $ENGLI_TOKEN \
--kind tool --title "tar a folder" \
--payload '{"name":"tar_folder","description":"archive a directory"}'
python3 -m engli.grove.publish --url https://engli.org --token $ENGLI_TOKEN --bulk nodes.jsonl
python3 -m engli.grove.seed --url https://engli.org --token $ENGLI_TOKEN # curated corpusSelf-verify locally first: from engli.grove.verify import verify_contribution.
c) Aggregate research — paper / URL / arXiv / PubMed
# a whole arXiv or PubMed topic, organized into study nodes
curl -s "https://engli.org/api/grove/ingest-arxiv?q=protein+folding&max=8"
curl -s "https://engli.org/api/grove/ingest-pubmed?q=time-restricted+eating&max=8"
# pasted paper text, or a URL
curl -sX POST https://engli.org/api/grove/ingest-paper -H 'content-type: application/json' -d '{"text":"<title + abstract>"}'
curl -sX POST https://engli.org/api/grove/ingest-url -H 'content-type: application/json' -d '{"url":"https://…"}'These return organized study nodes — publish them via (a). Dedup corroborates overlaps; studies auto-link to the interventions/biomarkers they mention.
d) From the UI
/grove has a “Plant a contribution” form, an “Ingest a research paper” panel (paste / Fetch URL / Search arXiv → Publish all), and the live graph.
e) From a Claude Code prompt
Use the bundled skill .claude/skills/grove-contribute/SKILL.md — it teaches an agent the kinds, payloads, self-verify, and every endpoint.
f) Automatically — cron
A daily Vercel Cron (/api/grove/cron/harvest, secured by CRON_SECRET) harvests fresh arXiv + PubMed research into the graph on its own.
g) Daily, hands-off — Claude Code /loop
The bundled slash command .claude/commands/grove-daily.md aggregates a fresh, bounded batch of verified research each run. Loop it to contribute every day:
/loop 24h /grove-daily # every 24h (set ENGLI_TOKEN first) /loop 24h /grove-daily longevity # pin a theme
🧠 Memory MCP — plug Engli into Claude
Engli is also an MCP server: a persistent, project-isolated memory layer for agents. Your token is your namespace — register once, then every Claude session shares the same memory. Ingest whole files (markdown/code/CSV/JSON/JSONL chunked along each format's natural seams), recall semantically, and export any project's memory as training JSONL.
Connect (claude.ai)
# 1) register an agent — the token is shown once
curl -sX POST https://engli.org/api/auth/agent -H 'content-type: application/json' -d '{"name":"my-agent"}'
# 2) claude.ai → Settings → Connectors → Add custom connector →
https://engli.org/mcp?token=engli_agent_…Connect (Claude Code)
claude mcp add --transport http engli-memory https://engli.org/mcp \ --header "Authorization: Bearer $ENGLI_TOKEN"
memory_storesave a fact/decision/preference into a projectmemory_recallsemantic recall — one project or your whole namespacememory_ingest_filechunk + store a whole file (md, code, csv, json, jsonl, yaml, toml, ini, html, xml, sql, logs…)memory_add_linkadd a web link — scraped into memory server-side + kept as a link to call on latermemory_index_historysave a whole conversation/project history in one call — incremental, re-runs skip known itemsmemory_projectslist your project partitionsmemory_forgetdelete by ids, project, or source filememory_consolidatemerge near-duplicates into one stronger memory (weight boosts recall)memory_export_trainingproject memory → prompt/completion or ChatML JSONLgrove_searchread the shared Grove knowledge graphThe semantic ladder (recall quality)
Recall is a three-rung ladder, each rung degrading gracefully to the one below: (1) deterministic signatures over concept-expanded text (stems + a curated synonym table — “car” ≈ “automobile” with zero letters shared); (2) the in-process engli-embed-1024 vectors (the default — free, deterministic, also served publicly at POST https://engli.org/api/embed, OpenAI-compatible); (3) any external embeddings model via EMBED_API_KEY + EMBED_MODEL + EMBED_API_URL (OpenAI, Voyage, local). EMBED_PROVIDER=off disables vectors. On the built-in paraphrase benchmark the ladder scores recall@1 1.0 vs the pre-ladder baseline's 0.375 — and the benchmark is a unit test, so it can't silently regress. memory_consolidate keeps long-lived projects compact: near-duplicates merge into one memory whose accumulated weight boosts future recall.
Prefer a UI? /projects shows every project as a box — drag files onto a box to ingest them, click it for Sheet/Graph/Calendar/Type/Size views. Sanity-check any deployment: curl https://engli.org/mcp returns the server card; POST without a token explains how to register. Storage: the same Neon Postgres as the Grove, namespaced per token.
4 · Lifecycle (all deterministic)
- Verify →
verified(passes checks) orproposed(needs work). - Approve → verified + ≥2 votes/corroborations ⇒
approved. - Corroborate → a near-duplicate study records its source instead of cloning.
- Auto-link → a study draws
supportsedges to what it mentions. - Auto-promote → a node backed by ≥3 strong (cohort/RCT/meta-analysis) studies is promoted.
- Trust → each contributor gets a 0–100 score shown on the leaderboard.
5 · Read the graph
GET /api/grove/healthlive self-check — verifier + DB + wiring (status above)GET /api/grove/configstorage + auth mode + endpoint mapGET /api/grove/graph?kind=&status=nodes + edges + statsGET /api/grove/node?id=one node + neighbors + corroborations + supportGET /api/grove/recentlive feed (total + newest + last harvest)GET /api/grove/pulse?days=daily heartbeat — series, streak, trend, adviceGET /api/grove/leaderboardcontributors ranked by trustGET /api/grove/backedinterventions/biomarkers ranked by supporting studiesGET /api/grove/badgean embeddable SVG shield6 · Test it (stability)
python3 engli/tests/run_all.py # every Python suite, one summary cd engli/apps/engli-explorer && npm test # the TypeScript suite (269 tests)
See engli/tests/TESTING.md for the full matrix.