cygnus · river.io ★ GitHub
/* model the system, not the files */

Your codebase
as a knowledge graph

A native macOS app that extracts literal facts from repository evidence into an append-only graph — then renders it as a 2D pattern visualizer. Cycles, coverage, callers, and architectural roles, in one view.

~/projects/your-repo — cygnus analyze
1 2 3 4 5 6 7
// observations → graph → projection
let graph = analyze("~/projects/your-repo")
graph.cycles()        // -> 3 dependency cycles (amber)
graph.coverage()      // -> per-function rings, live
graph.callers(of: "AuthService")   // -> who calls whom
graph.role("WorkspaceStore")  == .Hub   // inferred
// evidence, with provenance. never a guess.
what it is

Evidence, not guesses.

Repositories are raw evidence. Cygnus emits atomic, literal observations — "file A imports module B" — into an append-only knowledge graph with full provenance. Every view is a disposable projection of that graph, never a second model.

engine/

struct KnowledgeGraph

Interval-versioned store, immutable revisions, provenance links — derived facts die with the observations that support them.

extractors/

enum Language

Swift, Python, C, Rust — source-level, no build required, error-tolerant on checkouts that don't even compile.

enrich/

func resolve()

Real reference & caller edges from the compiler's index store — the architecture as the compiler sees it, not directory guesses.

the 2D pattern visualizer

Every channel carries signal.

A dense, evidence-backed picture that reads at a glance — the first architecture smells jump out, and one click drills to the blast radius.

// visual grammar
node color & size

Group or inferred role; size scales with connections — hubs are large.

amber edges

Dependency cycles — the first smell — found with strongly-connected-component analysis.

coverage rings

Per-function test coverage as a segmented ring, red → green — filled live as the suite runs.

test links

Test → code links colored by the test's own pass / partial / fail verdict.

focus & flow

Click a node → zoom its blast radius; dependencies & dependents light with direction arrows, the rest dims.

grouping[]

Area · Folder · Layer · Pattern (MVVM/MVC) · Role — Core / Hub / Entry / Leaf, inferred from the dependency flow.

callers && symbols

File dependencies, class-to-class caller graph, or the raw declaration reference graph — weighted by reference count.

expand()

Orbit a node's functions as coverage-colored satellites; read them in a side panel with jump-to-source & syntax highlighting.

test coverage, live

Watch coverage fill in as tests run.

  • Run the suite from the graph — halos grow green, class by class.
  • Per-test attribution — select a test, see exactly what it exercises.
  • Per-function rings reveal which method is untested at a glance.
  • Pass / fail links show a failing test and the precise code it touches.
coverage.graph
dark-factory ops dashboard

Run each repo as a software factory.

Beyond the graph, every repository becomes an ops console — production orders, CI status, token-cost ledger, converge throughput — driven by your own git and gh.

production_orders[]

Create, comment on, close GitHub issues as work orders — launch a converge run straight from one.

portfolio()

All-repos overview with aggregate spend, plus fastlane screenshots and a live GitHub Pages preview per repo.

Swift Python C Rust
built right

Fast, native, and honest.

Swift 6 strict concurrency end to end, a hard memory ceiling so a pathological repo can't take the machine down, and a rendering pipeline that stays fluid at real-repo scale.

4
languages extracted
5 GB
hard memory ceiling
100%
facts with provenance
2D
Metal-free, always-on