Skip to main content

horsegraph

Plan node graphs (NODE-GRAPH.json) read through Tiny Horse canonical storage and visualized as ClaySpace worlds.

  • Tiny Horse is the source of truth. horsegraph reads the graph from a bound checkout (and can run tinyhorse doctor on it), or straight from the canonical bundle in storage (file: or gdrive://), or from a Drive project by name. When it reads from storage it fetches and verifies the bundle and reads the graph at canonical HEAD, so the view shows what was parked, not unparked local edits.
  • ClaySpace draws it. Every node is a ClaySpace Cell, every dependency is a Cell with an arrowhead, and the whole graph is a valid clayspace.world.snapshot. The HTML is ClaySpace's own self-contained orbit preview, plus a label, hover-detail and legend overlay.
pip install horsegraph            # add [gdrive] for Drive storage / --project

Use

# from a Tiny Horse-bound checkout (default graph path docs/runner-gateway/NODE-GRAPH.json)
horsegraph render --checkout . --doctor --out plan.html --world plan.world.json

# straight from canonical storage, no checkout needed
horsegraph render --storage gdrive://FOLDER_ID/Demo.bundle
horsegraph render --project "Demo"            # resolved like `tinyhorse claim`

# plan views
horsegraph next  --checkout .                 # "Needs you now" / "Claude starts next"
horsegraph path  --checkout .                 # critical path to the goal node
horsegraph check --checkout .                 # validate; exit 1 on warnings (e.g. done before its deps)

# any JSON file, no Tiny Horse
horsegraph render --file examples/NODE-GRAPH.json

--graph changes the path inside the repo; --ref reads a tag or commit from storage instead of HEAD.

The ClaySpace world it writes with --world opens with the usual tools (clayspace world inspect, clayspace world preview).

Reading the 3D view

Shape Meaning
low green slab done
blue block open, Claude's (agent) node
tall amber tower with a flagpole open owner action, needs you
cyan on the critical path to the goal
pink + sphere goal node
grey, thin parked (later, after-proof)

Flat graphs use columns by dependency depth and rows grouped by track. Graphs with parent relationships use nested regions and a containment outline. Borders and indentation mean containment; solid arrows mean prerequisites and dashed arrows mean authored semantic relations. Drag to orbit, scroll to zoom, and hover a label for the node's title, ancestry, deps and contract items it advances.

Graph format

{
  "title": "…", "goal": "G-RELEASE",
  "tracks": {"CLI": "Command Line Interface"},
  "nodes": [
    {"id": "CLI-2", "title": "…", "owner": "agent", "status": "open",
     "deps": ["CLI-1", "CORE-2"], "track": "CLI", "closes": ["C2"]}
  ]
}

owner is agent or owner. status is done, open, later, after-proof or available-verified. Extra fields are kept. Cycles, unknown deps and duplicate ids are rejected.

Optional parent identifies the node containing a record. Missing or null means a root. Each node has at most one parent; unknown parents, invalid parent values, and containment cycles are rejected. Containment is independent of deps: it does not change readiness, blocked state, dependency depth, critical paths, or completion rules. Existing flat graphs retain their layout.

See nested containment usage and development for a synthetic example, query API, and validation commands. Accepted containment is now on canonical main; feature/nested-containment-recovery-20261006 preserves the original accepted feature commit. Provenance records implementation attribution and the isolated recovery process. Checkpoint workflow describes the required Drive-centered park, clear, and fresh-restore boundary between finite milestones.

Optional top-level relations express authored links such as challenges, revises, influenced_by, and supported_by, with explicit IDs and preserved evidence/provenance. They never change task readiness or imply confidence/truth. See typed relation API, synthetic example, and preview. Typed relations are accepted on canonical main; the original reviewed commit is preserved on feature/typed-relations-20261006.

An optional synthetic inquiry/action example records a bounded proposal, explicit authorization, one manual start, a result and a subsequent reflection. Its code inspector and read-only spatial history retain purpose, sources, budgets and unanswered questions. It is an opt-in example, not part of core graph semantics or an execution engine. This example is included in the source distribution.

Python

from horsegraph import from_storage, render
graph, prov = from_storage("file:/srv/git/demo.bundle")
print(graph.critical_path(), [n.id for n in graph.ready("owner")])
render(graph, "plan.html", provenance=prov.to_dict(), subtitle=prov.summary())

Release

python -m build && twine upload dist/*

0.2.0

Adds nested containment, authored typed relationships, compact readable labels, full identity/provenance disclosures and robust embedded-canvas initialization. Relationships remain independent of prerequisite readiness and containment.

Four public JSON examples are included in the wheel under horsegraph/examples and can be located with importlib.resources.files("horsegraph").joinpath("examples"). Optional Python adapters and synthetic tests are included in the source distribution. Private Woolf source/annotation catalogs are intentionally omitted from public artifacts; use an explicitly supplied source catalog for archive projections.

Metadata

Release files for horsegraph 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for horsegraph 0.2.0
File Size Uploaded
horsegraph-0.2.0.tar.gz 64.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for horsegraph 0.2.0
File Interpreter ABI Platform
horsegraph-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 95.7 kB

Release files / horsegraph-0.2.0.tar.gz

Download URL horsegraph-0.2.0.tar.gz
Size 64.2 kB
Tags Source
SHA-256 checksum
How to use checksums
db8781875625c13520c273208b87b5e72d85db7f5a3b38872d99821651605369
BLAKE2b-256 checksum
How to use checksums
f61fdec875f24ded7d44c77c2e6ce237c27ef678802f3b4be88848aeb3454619
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release files / horsegraph-0.2.0-py3-none-any.whl

Download URL horsegraph-0.2.0-py3-none-any.whl
Size 31.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
227d8d2adf41f4eafea034a9d4ac9760cf3bbb2a715a5ba267950445fb32d875
BLAKE2b-256 checksum
How to use checksums
a90ef60cd306b6f9ace4717c38964701e06cc38980cd1ffbdcb5378429fd3853
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release history Release notifications | RSS feed

0.2.1

2 release files

This release

0.2.0 This release

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page