cd /news/ai-agents/show-hn-canopy-a-cross-platform-dag-… Β· home β€Ί topics β€Ί ai-agents β€Ί article
[ARTICLE Β· art-164130] src=univerlab.org β†— pub= topic=ai-agents verified=true sentiment=↑ positive

Show HN: Canopy, a cross-platform DAG engine for agents CLI

UniverLab released Canopy v3.1.1, an open-source Rust daemon and terminal UI that runs AI agent work as a directed-acyclic-graph engine, with agent, check, ensemble, router and resilience nodes wired by pass, fail and always edges. Canopy routes on real exit codes and verdicts rather than model claims, fans a step out to several models across harnesses with quorum, cascade or round-robin modes, and schedules a graph to wake at a quota reset after a rate-limit failure. The tool supports 22 named CLI harnesses including Claude Code, Codex CLI, Gemini CLI and Cursor CLI, and pairs to a phone over WebRTC with end-to-end encryption via the `canopy remote pair` command.

read5 min views32 publishedNov 4, 2026
Show HN: Canopy, a cross-platform DAG engine for agents CLI
Image: source

UniverLab Β· open laboratoryEXP-001

In a forest, the canopy is where the crowns touch β€” separate trees, one living layer.

A Rust daemon and terminal UI with a graph engine at its core. Work enters as a spec and walks a graph you design: agent nodes on any harness, check nodes that run your real commands, ensembles that fan out to several models and keep a quorum, routers that pick the branch, and a resilience node that turns a quota death into a scheduled wake-up. Underneath: memory, scheduling and sync for every agent.

AI agents β†’ a graph engine above every harness β†’ specs carried all the way to a commit

curl -fsSL https://install.univerlab.org/canopy | sh

  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ    β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–‘β–‘β–ˆβ–ˆβ–ˆ β–‘β–‘β–‘β–‘β–‘β–ˆβ–ˆβ–ˆ β–‘β–‘β–ˆβ–ˆβ–ˆβ–‘β–‘β–ˆβ–ˆβ–ˆ  β–ˆβ–ˆβ–ˆβ–‘β–‘β–ˆβ–ˆβ–ˆβ–‘β–‘β–ˆβ–ˆβ–ˆβ–‘β–‘β–ˆβ–ˆβ–ˆβ–‘β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–‘β–‘   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ  β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–‘β–‘β–ˆβ–ˆβ–ˆ  β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ β–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  β–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  β–‘β–‘β–‘β–‘β–‘β–‘   β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘ β–‘β–‘β–‘β–‘ β–‘β–‘β–‘β–‘β–‘  β–‘β–‘β–‘β–‘β–‘β–‘   β–‘β–ˆβ–ˆβ–ˆβ–‘β–‘β–‘    β–‘β–‘β–‘β–‘β–‘β–ˆβ–ˆβ–ˆ                                         β–‘β–ˆβ–ˆβ–ˆ       β–ˆβ–ˆβ–ˆ β–‘β–ˆβ–ˆβ–ˆ                                         β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ     β–‘β–‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ                                         β–‘β–‘β–‘β–‘β–‘       β–‘β–‘β–‘β–‘β–‘β–‘

EXP-001 Β· active Β· Β· release v3.1.1 Β· 2 weeks ago Β· DOI 10.5281/zenodo.23607434 Β· roadmap: Β· Β· Built with Canopy Β· Repository set up with ghScaff Β· Demo recorded with DemoStage Β· Commits checked by GitKit

daemontuigraph enginemcp

  • Antigravity CLI
  • BLACKBOX AI CLI
  • Claude Code
  • Cline CLI
  • CodeBuddy Code
  • Codex CLI
  • Command Code
  • Continue CLI
  • Copilot CLI
  • Cursor CLI
  • Devin CLI
  • Freebuff
  • Gemini CLI
  • Kilo Code CLI
  • Kiro CLI
  • MiMo Code CLI
  • Vibe
  • Muse Code
  • opencode
  • Qoder CLI
  • Qwen Code
  • UTIM

The one that started it all. #

It started as a folder of skills for work. Then I noticed what nobody was talking about: agent harnesses shipped a headless mode, just sitting there unused. I wired cron jobs to fire tasks through it β€” too much for a skill, and the models of the day choked on the instructions. So it became an MCP: task-trigger. It worked, but it ran blind in the background; only the agent ever saw what happened. Not enough. I killed it and built a TUI β€” then scheduling, memory, sync, identities, and a new name. Canopy. By then the twist was complete: Canopy was building Canopy, and everything else in this lab.

Graphs, not prompts

Agent, check, gate and router nodes wired with pass, fail and always edges. A spec walks the graph from entry to commit; routing keys on real exit codes and verdicts, not on what a model claims.

Ensembles across harnesses

Fan one step out to several models β€” parallel with a quorum, cascade to the next on failure, or round-robin across a crew β€” each member on whatever harness and model you pick.

Failure is a route

Red gates send the work back with the output attached. A resilience node reads quota errors and schedules the graph to wake at the exact reset. Only a real verdict ever reaches you.

Your sessions and graphs from your phone #

Encrypted end to end

Sessions travel over WebRTC with end-to-end encryption: the relay only carries signalling, and your screen never passes through it.

Pairing in one command

Run the command below: it prints a one-time code with its link and a terminal QR code. Scan it and the browser becomes a revocable device of the host.

Live graphs, shared

Watch specs walk the graph in real time from your phone, and hand single-use invite codes to guests you trust.

canopy remote pair Open remote β†’

Memory that persists

Every run writes facts, patterns and decisions to a project-scoped knowledge graph. The next session β€” on any harness β€” reads them instead of rediscovering the codebase.

Queues and scheduling

Specs live in ordered queues a graph works through in the background; graphs and agents also fire on cron schedules or file-change triggers, and hooks chain one graph into the next.

Multi-agent sync

Agents declare their mission, report status and message each other, so several sessions can share one workspace without stepping on each other.

How to cite #

Martinez Bolivar, J., & Solorzano, L. (2026). canopy (harness-canopy) (Version v3.1.1) [Computer software]. Zenodo. https://doi.org/10.5281/zenodo.23607434

@software{canopy,
  author = {Martinez Bolivar, Jheison and Solorzano, Lina},
  title = {canopy (harness-canopy)},
  year = {2026},
  version = {v3.1.1},
  publisher = {Zenodo},
  doi = {10.5281/zenodo.23607434},
  url = {https://doi.org/10.5281/zenodo.23607434}
}

FAQ #

  • What does Canopy actually do?
  • Canopy runs AI coding work as graphs. A spec enters, agent nodes do the work on the harnesses you choose β€” Claude, Codex, Gemini, OpenCode or any terminal agent β€” check nodes run your real tests, ensembles get several models to agree, and failures route back automatically until the spec is committed. One daemon, all your agents, all your free tiers.
  • How do I share work between Claude and Codex?
  • Canopy gives each agent a shared knowledge graph and sync protocol. When Claude finishes a task, the facts and patterns it discovered are available to Codex in the next session. No manual context copying.
  • Can I run AI agents on a schedule?
  • Yes. Canopy fires agents on cron schedules or file-change triggers via a background daemon. Set the schedule once; the daemon watches the workspace and runs tasks automatically.
  • How is Canopy different from just using Claude Code or Codex directly?
  • Those are individual harnesses. Canopy is the layer that connects them β€” shared memory, background scheduling, and multi-agent coordination. You keep your agents; Canopy adds the infrastructure.
── more in #ai-agents 4 stories Β· sorted by recency
── more on @univerlab 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain β€” perfect for shipping the agent you just read about.

$git push zahid main
β†’ Live at https://your-agent.zahid.host βœ“
Get free account β†’ Pricing
from €0/mo Β· no card required
LIVE [news/show-hn-canopy-a-cro…] indexed:0 read:5min 2026-11-04 Β· β€”