Platform dependencies
Tapestry runs on four external services. Being honest about which ones the platform needs, and which ones a consuming project’s operator needs, prevents the surprise of “I installed the plugin and nothing’s logging.”
Required to run the platform (self-host)
Section titled “Required to run the platform (self-host)”These are the services the Tapestry platform itself depends on. If you’re standing the platform up (or self-hosting all of it), you need accounts at all four.
| Service | What it hosts | Why required |
|---|---|---|
| Render | memory-mcp MCP server, project-registry, Postgres (postgres), the self-observer cron, future migrated services | The hosted-multitenant deployment target for every backend service. Postgres holds memory records + project registry + candidate registry. The cron emits the synthesis memo every 6h. |
| Vercel | apps/docs-site/ (this site, at tapestry-khaki.vercel.app) + apps/web-dashboard/ (the Project Observatory console, when deployed) | The frontend deployment target. Static docs + the dashboard. |
| OpenTelemetry collector | The OTel transport — receives OTLP traces/logs from the discipline plugin’s hooks + future runtime services | The canonical telemetry transport per the coordination contract. Without it, hook events go to local hooks.jsonl only — no cross-machine observability. |
| Grafana Cloud | The dashboards + Loki (logs) + Tempo (traces) + the OTLP gateway | The telemetry destination. Read by the observer (queried for coordination-quality signals); read by the operator (dashboards). |
Required for a consuming project (you, the operator wiring a new project)
Section titled “Required for a consuming project (you, the operator wiring a new project)”Most consumers do NOT need accounts at the four services above — those belong to whoever stands up the backend deployment. What a consuming project needs:
| Service | Why | Cost |
|---|---|---|
| Claude Code (Anthropic) | The agent that runs in your IDE / terminal. Without it, no hooks fire, no memory recall, no observer. | Per Anthropic’s pricing. |
GitHub access to Lizo-RoadTown/tapestry | So /plugin marketplace add Lizo-RoadTown/tapestry resolves. Public repo — no special access needed. | Free. |
| (Optional) Grafana Cloud OTel credentials | Only if you want your project’s hook events to flow to the shared Grafana stack alongside other consuming projects’ telemetry. Without these, the discipline plugin still works — local hooks.jsonl is the source of truth — but no cross-machine observability for your project. | Free tier sufficient for most projects. |
The OTel credentials live in your .env as OTEL_EXPORTER_OTLP_* env vars — see Load-bearing files §OTEL_*. Set these in your project .env.
What happens if one is missing
Section titled “What happens if one is missing”| Missing | What breaks |
|---|---|
| Render | The platform backend doesn’t exist. loom-memory MCP is unreachable; consuming projects with loom-memory declared in .mcp.json get connection errors. CORE DIRECTIVE 1 says the agent should HALT and report. |
| Vercel | This docs site doesn’t exist; the Project Observatory console doesn’t exist. Consuming projects’ Claude Code installs still work (the plugin doesn’t depend on Vercel) but you can’t read the docs or see the dashboard. |
| OTel collector | Hook events still write to local ~/.claude/logs/hooks.jsonl but don’t flow anywhere shared. No cross-machine observability. The observer’s runtime-telemetry inputs are blind (per the signal hierarchy — telemetry is one of several inputs; observer keeps working on the others). |
| Grafana Cloud | OTLP push goes to a dead endpoint; emission errors land in ~/.claude/logs/hook-otel-errors.log (per _observability.py); local hook writes still succeed. Dashboards don’t exist. |
| Anthropic / Claude Code | Nothing runs. The whole point is the agent. |
Self-host vs hosted-multitenant
Section titled “Self-host vs hosted-multitenant”The platform supports a two-mode commitment (every service has a PLATFORM_MODE=self_host default + a PLATFORM_MODE=hosted opt-in). Self-host means: run everything yourself, no JWT auth, single-tenant. Hosted-multitenant means: JWT-verified tenant isolation against a shared hosted deployment.
If you’re standing up a self-hosted Tapestry (the default), you need accounts + deployments at all four services above. If your projects connect to a shared hosted deployment that someone else runs, you only need the second table.
Related
Section titled “Related”- Load-bearing files —
OTEL_*— the env-var contract - OTel coordination contract — the attribute schema
- The observer — what reads the telemetry
- The memory MCP — the Render-hosted service