Sitelet https://github.com/opencharly/opencharly
Skip to content

About

OpenCharly umbrella — one clone of the whole org: every opencharly repo as a flat gitlink (charly, sdk, spec, marketplace, docs, distro-*, packaging, tooling)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1,310 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenCharly — umbrella

Ask DeepWiki

One clone of the whole org — and the place all charly development happens. opencharly/opencharly is an org-level umbrella repo: every OpenCharly repo (409 today) is pinned here as a git submodule ("gitlink", in the org's vocabulary), flat at the root — submodule path == repo name for all but one alias (.github, pinned at the dotgithub/ path).

It is two things at once. It is a view of the org: one checkout in which every repo sits at the exact commit the rest of the org builds against. And it is the working root for the product — charly development happens here, in per-session worktrees, and lands through the org's PR-only chain. charly remains the product repo and the single source of truth; this umbrella is where you work on it.

Product docs: charly's README · opencharly.ai.

Start developing

git clone https://github.com/opencharly/opencharly.git
cd opencharly
bash scripts/init-submodules.sh        # materialize the working set (needs only git + python3)
./charly/scripts/bootstrap-charly.sh   # builds charly/bin/charly — once per clone
export PATH="$PWD/charly/bin:$PATH"    # from here on this page reads `charly …`
charly task hooks                      # installs this clone's pre-commit gate

The umbrella has two non-charly entrypoints, and both have to be: the build that produces the charly binary cannot itself be a charly task, and neither can the materialization — the working set includes charly itself, so the binary does not exist yet when the first clone happens. scripts/init-submodules.sh materializes the working set, and charly/scripts/bootstrap-charly.sh builds the binary from the charly checkout it materialized; the initializer needs git and python3, and it checks both and names a missing one. Every command after the bootstrap is the installed-binary form — charly task …, exactly as on a host that installed a package. charly task init is that binary form of the same materialization: it runs the same script, so it carries the same two requirements. Without the export, the same commands run as ./charly/bin/charly task …; both forms are the same binary.

The umbrella is a view over the org, not a 9.5 GB checkout (measured 2026-10-22). It pins every OpenCharly repo as gitlinks, and the pins live in the umbrella's index — every pin is audited from the index, so a checkout is only needed for the repos you actually build against or edit. scripts/init-submodules.sh materializes a working set — the repos the project loads from, the pin contract's own repos, the harness corpus root, and the repos the umbrella's own gate scripts read — and leaves the rest as index entries:

clone shape on disk wall clock
git clone --recurse-submodules (every checkout, full history) 9.5 G minutes
git clone + scripts/init-submodules.sh (the working set, blobless) 77–77 M 14–15 s
git clone + scripts/init-submodules.sh --all (every path, blobless) 1.9–2.2 G 5 m 44 s – 6 m 43 s

Every figure in the table was measured on this machine on 2026-10-22; the bands carry the readings taken on 2026-10-27 as well.

Those sizes are the clone; the bootstrap builds the binary and leaves its build cache in the tree, so a bootstrapped light tree measures 129–129 M, against the 9.5 G a full checkout occupied on 2026-10-22. Sizes are du -sh at whole-unit granularity, and the packs move with the upstream repos, so the two shapes the runs repeated carry a band — the range the runs produced — rather than a number that stays put: the light clone measured between 77 M and 77 M, and the --all shape between 1.9 G and 2.2 G. The --recurse-submodules row is the baseline this replaces: one measurement, of a full checkout; it tracks the upstream mirrors, so it moves as they do. The --all shape's band is the openclaw mirror's module store — 480–520 M in a from-scratch clone, and more in a tree whose store was reused across runs, which holds more of that mirror's history and grows as the mirror does.

The bands are re-derived, not remembered. scripts/measure-clone.sh measures the shapes above from fresh clones of the tree under test and prints every reading; scripts/check-readme-measurements.mjs reads the bands this table commits, asserts that the prose agrees with the table, and — handed that script's log — asserts that every reading falls inside its band. The second is a step of charly task verify and of the pre-commit hook, so a figure the prose and the table disagree about is a failed gate rather than a sentence nobody notices.

A reading is a property of the TREE, not of the machine. The measurement clones the superproject over the transport, on the one branch that holds the tree under test: a local clone copies the source's entire object store — every commit on every branch, including other sessions' pushed branches — so a reading made that way drifts with the org's push traffic while the tree stands still. The gate fails on a measurement that clones the tree locally, and its self-test mutates the measurement's own clone invocation to prove the assertion can fail.

The samples half needs the run's own log, so it is a manual step after a measurement: the two automatic steps above run the comparison without --samples, and a reading nobody measured is a reading no gate can see.

bash scripts/measure-clone.sh > /tmp/measure.log
node scripts/check-readme-measurements.mjs --samples /tmp/measure.log

So a band a reading has outgrown is a failed check against the run that produced the reading — the run stamps the day it was taken (MEASURED=), and the comparison holds that day to the span this table states.

The last of those four sources is what keeps the light tree honest. The umbrella's gate scripts compare surfaces that live in submodules — the committed rulebook in action-review/charly.yml and the coordination shell in marketplace/scripts/coord.sh — and a gate skips a comparison whose surface is not checked out, so it still exits 0. Measured on a light clone, 2026-10-22: charly task verify reported 26/26 steps passed while six cross-repo comparisons never ran. The working set therefore includes the repos the gates read, so a light tree's gate covers what the full tree's covers — and the light tree now reports every step passed, none skipped, the same as the full tree.

The wall clocks are samples of repeated runs of the same step, measured from a fresh clone, so the two shapes the runs repeated carry the band the runs actually produced across this branch — rather than a single number: the light row's fresh clones measured between 14 s and 15 s — the whole of it is the network fetch of the working set's blobless clones — and the --all row's from-scratch materializations measured between 5 m 44 s and 6 m 43 s. The --recurse-submodules row is stated coarsely, as minutes: that shape was measured once, and its time is the mirrors' fetch. The --all row is the maintenance shape: it clones every declared path in parallel and then checks them out one at a time, and its time is dominated by the vendored upstream mirrors — openclaw alone, whose history measured 7.6 GB on 2026-10-22, is the largest of them, and a blobless fetch still brings down every commit and tree it holds.

scripts/init-submodules.sh clones blobless (--filter=blob:none): every commit and every tree are present, so "is this pin an ancestor of the remote's tip?" stays answerable, while the blobs of history are never fetched. --depth 1 is deliberately not used — a shallow clone cannot answer that question, so a healthy pin reads as divergent. The filter has to be an explicit flag: a filter = key in .gitmodules is not honoured by git submodule update.

charly task init is the same operation through the binary. The mode is chosen by the environment, not by a task parameter:

charly task init                                 # the working set
CHARLY_INIT_MODE=all charly task init            # every declared path
CHARLY_INIT_MODE=list charly task init --output  # print the set, change nothing
CHARLY_INIT_PATHS=a,b charly task init           # the named repos

--output is what makes the task's own output visible: the task runner prints its report on stderr and the step's output on stdout only in that mode.

The environment is the only channel that carries an operator's value as data: an upper-case task parameter's value is substituted into the command's text, and the shell then parses that text, so a parameter carrying a shell metacharacter would execute (measured: a parameter of $(touch /tmp/marker) created the marker). A lower-case parameter is not substituted at all — the expander's grammar is upper-case-initial — so it reaches the shell, finds no such variable, and its empty word vanishes. An environment value reaches the shell as a parameter-expansion result, which is never re-parsed — and an unknown mode is reported as a value, not run:

$ CHARLY_INIT_MODE='all; touch /tmp/pwned' charly task init
  [fail] run — materialize the umbrella's submodules
      exit=2, want 0 (stderr: FAIL: CHARLY_INIT_MODE must be working-set, all or list (got 'all; touch /tmp/pwned'))

The same law governs the manifest's own command steps: a braced reference in a command: step's text is claimed by the plan runner and expanded against the task's merged environment, and one it cannot resolve does not fail the step — it skips it, so the gate reads green over a check that never ran. A command step's text therefore carries no value at all: read the environment at run time, so the runner never sees it — with a bare $NAME, or, under set -eu, through $(printenv NAME 2>/dev/null || true) so an unset variable cannot abort the step before it runs. node scripts/check-task-command-vars.mjs holds that line, in the pre-commit gate and in charly task verify.

All submodule URLs are plain HTTPS, so forks work without extra configuration: every gitlink resolves to its opencharly/<repo> upstream over HTTPS, no credentials needed for a read-only checkout.

Then the one rule that keeps the checkout honest: never edit a submodule in place. Every repo you change gets its own worktree at .worktrees/<slug>/<repo>/, branched off a fresh origin/main, so the submodule's tracked checkout stays detached and clean at its recorded gitlink. Change lands only by pull request. The full model — worktrees, the pin contract — its intent model, the producer-first landing order, after-merge cleanup — is in AGENTS.md under The development model.

Built for agent sessions

AGENTS.md is the one rulebook, and it is harness-neutral: every agent harness reads that same file directly, so no second copy exists to drift. Harness configuration now lives at this umbrella root and only here — a plain move-in of every harness's settings and workflows (Claude Code, Codex, opencode, pi, Kimi/reasonix, DSH), with no mirror and no parity gate. Skills live in neither: they come from the opencharly/marketplace corpus, which each harness resolves per its own conventions.

Every change lands the same way: a feat/ branch, a PR validated by charly/pr-validator, then native auto-merge — and tag-on-merge writes the CHANGELOG entry and the CalVer tag.

Maintenance commands

Build the binary once per clone and put it on PATH (both in Start developing above), then run the umbrella's own maintenance from the umbrella root. Every command below is the installed-binary form — charly task …, the same shape a packaged charly gives you:

command purpose
charly task init materialize the umbrella's submodules on demand (the working set; CHARLY_INIT_MODE=all|list and CHARLY_INIT_PATHS select the others)
charly task map list every submodule with its pin and sync state
charly task sync advance EVERY submodule pin this repo declares, per the pin contract (it rolls the checkouts that exist to their default-branch HEAD and stages the gitlinks; it does not commit)
charly task verify the full pinning gate, on demand (every pin, incl. the remote branch audit)
charly task design-check run the DESIGN gate — the seven controls of DESIGN.md A.1/A.2 (the CUE toolchain, DESIGN.md↔DESIGN.cue, the examples and their negatives, the capability ledger, every citation into a pinned module resolved at its pin, the schema patterns of every pinned plugin module, every pin's relation to a release tag). It is the same command hooks/pre-push runs for a push that changes a surface those controls read — the caller is asserted by node scripts/check-design-gate.mjs
charly task hooks install hooks/pre-commit for this clone (once)
charly task org-map verify the README org-map tables against the repo and .gitmodules
charly task skills splice the generated R0 dispatcher from the pinned marketplace into AGENTS.md
charly task pin-check assert the pin contract's consistency half — the EDGE (every pin_map entry equals its twin in the pinned_from checkout) and the CHECKOUT AUDIT (every declared path clean and at its recorded gitlink). It READS the index's gitlinks, the MANIFEST charly.yml's pins: block and the DECLARED PATH SET .gitmodules, so a commit can violate it by moving a gitlink or by editing the manifest or by editing the declared path set — a commit that moves NO gitlink can still violate it. It is the half of verify that needs no remote (the per-submodule git ls-remote default-branch audit is the rest), and it is what hooks/pre-commit runs. Checkout DRIFT on its own — a checkout dirty or at another commit, caused by NO commit — stays with charly task verify
charly task pins the pin-contract pin operation over EVERY declared path (mode via param) — the distro-* paths are its EDGE subset (the pin_map); MODE=bump advances EVERY pin this repo declares
charly task self-test self-test the committed CI body/pin-evidence builders + the dispatcher splice + the submodule initializer
charly task prune reap merged-upstream session worktrees + branches (MODE=report is a dry run)

charly task list enumerates them. Without the PATH export, the same commands run as ./charly/bin/charly task ….

The org map

Every submodule is listed below, grouped by category and alphabetically ordered within each table. The pinning policy in the next section says how each pin is kept current.

Two repos are deliberately not listed as their own-name submodules:

  • opencharly/opencharly itself — the umbrella cannot pin itself; it is this repo.
  • opencharly/.github — the org-wide community-health defaults and the reusable validation/merge workflows every repo inherits. It is pinned at the dotgithub/ path (submodule path != repo name), so this repo's own .github/workflows/ stays free for its CI dispatchers.

heroic-heroic is archived and intentionally not a submodule.

Each class has ONE placement rule, and the class prefix in the repo name states it:

  • Core & contract — bare names (charly, sdk, spec, marketplace, docs): the product, the wire/IR contract, the generated corpus, the site.
  • Distro image families — distro-<distro>: the base and builder, distro-exclusive OS layers, that distro's VMs and beds.
  • Package repositories — charly-<distro> for the published repo and pkg-<distro> for package source: packaging plus its publishing bed.
  • Candy layers — layer-<name>: ONE candy with its files beside it. A family's skill: entities live beside the code, plugin, or config they describe (AGENTS.md Part II #5), never in a repo that holds nothing else: a repo whose only content is skills is not a class.
  • Product families — layer-<family>: a family's box(es), candy, VM, beds and skills (layer-agentteams is the canonical example; layer-openclaw follows it).
  • Plugins — plugin-<word>: the provider candy, its Go module and its CUE schema.
  • Pods / service bundles — pod-<name>: a candy with service: plus its skill.
  • VMs — vm-<family>: kind: vm definitions plus VM skills.
  • Product & tooling — bare or product-specific: appliances, CI action config, vendored upstreams.

The rule these placements follow — what may be bare, and why a product family is a layer-<family> repo — is stated once in AGENTS.md ("Repo classes and naming"); the lines above only place each class. The authoring procedure is /charly-internals:repo-setup, and charly task org-map verifies the tables below against the repo and .gitmodules.

Core & contract

6 repos — the product and the contracts it consumes.

path repo role
charly/ opencharly/charly The agentic DevOps tool for you and your agents.
charly-lib/ opencharly/charly-lib The shared multi-call plugin host for charly — ONE binary serving every welded plugin (opencharly/sdk/charlylib)
docs/ opencharly/docs Documentation site for OpenCharly — the agentic DevOps tool, its candies, and its plugins. Published at opencharly.ai.
marketplace/ opencharly/marketplace OpenCharly plugins — Claude Code skills, agents, and workflows for the charly CLI
sdk/ opencharly/sdk OpenCharly plugin SDK + contract repo
spec/ opencharly/spec OpenCharly wire/IR contract module: spec + proto (generated from CUE schema). The dedicated contract every pl…

Distro image families

6 repos — each maps to a box/<distro> inside charly; their pins follow charly's own gitlinks (the pin contract's edge).

path repo role
distro-arch/ opencharly/distro-arch OpenCharly — the Arch Linux image family
distro-cachyos/ opencharly/distro-cachyos OpenCharly — the CachyOS image family
distro-debian/ opencharly/distro-debian OpenCharly — the Debian image family
distro-fedora/ opencharly/distro-fedora OpenCharly — the Fedora image family (incl. the nvidia GPU base)
distro-omarchy/ opencharly/distro-omarchy Omarchy image family (charly's box/omarchy) - vanilla Arch + Hyprland
distro-ubuntu/ opencharly/distro-ubuntu OpenCharly — the Ubuntu image family

Package repositories

10 repos — native package repos for supported distros.

path repo role
charly-alpine/ opencharly/charly-alpine charly native package repo
charly-arch/ opencharly/charly-arch charly native package repo
charly-debian/ opencharly/charly-debian charly native package repo
charly-fedora/ opencharly/charly-fedora charly native package repo
charly-openwrt/ opencharly/charly-openwrt charly native package repo
charly-ubuntu/ opencharly/charly-ubuntu charly native package repo
pkg-arch/ opencharly/pkg-arch OpenCharly — native Arch PKGBUILD for the charly CLI binary
pkg-debian/ opencharly/pkg-debian OpenCharly — native Debian/Ubuntu packaging for the charly CLI binary
pkg-fedora/ opencharly/pkg-fedora OpenCharly — native Fedora RPM packaging for the charly CLI binary
plugin-generate-packages/ opencharly/plugin-generate-packages charly native package repo

Product & tooling

13 repos — streamer product, appliance provisioning, org action, third-party pins, and the six vendored OpenClaw upstream forks.

path repo role
action-review/ opencharly/action-review Charly config for the org AI PR-review gate: dual-runner workflow, env/secret contract, review plan
charly-jetkvm/ opencharly/charly-jetkvm Provision the appliance-resident charly on a JetKVM (armv7) — install the published release binary + welded plugins over ssh and verify it runs project-less
charly-streamer/ opencharly/charly-streamer charly-streamer (cstream) — Hyprland desktops streamed to a browser over WebRTC: Rust streamer + leader, Go g…
clawsweeper/ opencharly/clawsweeper Vendored upstream fork of openclaw/clawsweeper — scans the org's issues and PRs weekly and proposes what to close, and why
crabbox/ opencharly/crabbox Vendored upstream fork of openclaw/crabbox — warm a box, sync the diff, run the suite (the remote-execution CLI the plugin-crabbox provider drives)
crabhelm/ opencharly/crabhelm Vendored upstream fork of openclaw/crabhelm — the OpenClaw meta orchestrator
dotgithub/ opencharly/.github OpenCharly org-wide community-health defaults (PR template, etc.) — single source inherited by every repo wit…
gst-wayland-display/ opencharly/gst-wayland-display A micro Wayland compositor that can be used as a Gstreamer plugin
lobster/ opencharly/lobster Vendored upstream fork of openclaw/lobster — the OpenClaw-native workflow shell that plugin-lobster implements (workflow:lobster)
openclaw/ opencharly/openclaw Vendored upstream fork of openclaw/openclaw — the OpenClaw agent gateway the layer-openclaw family packages
openclaw-enterprise/ opencharly/openclaw-enterprise Vendored upstream fork of openclaw/openclaw-enterprise — the enterprise control plane for the same gateway family
pi-review-action/ opencharly/pi-review-action Archived — the org PR-review gate now runs the charly engine (opencharly/action-review)
pixelflux/ opencharly/pixelflux Patched pixelflux wl-screenshot/record library for OpenCharly selkies desktops (migrated from overthinkos)

pi packages

4 repos — vendored pi agent packages and extensions (the OpenCharly pi-plugin forks and mirrors).

path repo role
pi-asciinema/ opencharly/pi-asciinema pi agent extension: cast_read — read and analyze asciinema .cast recordings from agents
pi-fabric/ opencharly/pi-fabric Vendored mirror of monotykamary/pi-fabric (npm 0.70.0)
pi-lsp/ opencharly/pi-lsp Vendored mirror of pi-lsp (npm 0.1.7, no upstream repo)
rpiv-todo/ opencharly/rpiv-todo Vendored mirror of juicesharp/rpiv-mono packages/rpiv-todo (npm 2.8.0)

Charly candy layers

2 repos — the charly meta/skill candy layers.

path repo role
layer-charly-check/ opencharly/layer-charly-check The charly-check candy — 14 check skills (extracted from charly/candy)
layer-charly-tools/ opencharly/layer-charly-tools image layer / candy

Omarchy layers

13 repos — the omarchy desktop image composition layers.

path repo role
layer-omarchy-base/ opencharly/layer-omarchy-base Omarchy base - the [omarchy] pacman repo, keyring and core runtime
layer-omarchy-boot/ opencharly/layer-omarchy-boot Omarchy boot chain - limine, snapper, plymouth, sddm (machine-only)
layer-omarchy-desktop-apps/ opencharly/layer-omarchy-desktop-apps Omarchy desktop applications - files, productivity, input methods, web apps
layer-omarchy-dev/ opencharly/layer-omarchy-dev Omarchy developer toolchain - editors, language runtimes, containers
layer-omarchy-fonts/ opencharly/layer-omarchy-fonts Omarchy font set
layer-omarchy-gpu-nvidia/ opencharly/layer-omarchy-gpu-nvidia Omarchy NVIDIA GPU stack (machine-only, opt-in)
layer-omarchy-hardware/ opencharly/layer-omarchy-hardware Omarchy hardware and laptop support - dkms and vendor quirks (machine-only, opt-in)
layer-omarchy-hyprland/ opencharly/layer-omarchy-hyprland Omarchy Hyprland compositor stack and desktop portals
layer-omarchy-media/ opencharly/layer-omarchy-media Omarchy media stack - audio, video, imaging, capture
layer-omarchy-network/ opencharly/layer-omarchy-network Omarchy networking - NetworkManager, bluetooth, printing, firewall (machine-only)
layer-omarchy-shell/ opencharly/layer-omarchy-shell Omarchy Quickshell desktop shell - bar, notifier, launcher, OSD
layer-omarchy-terminal/ opencharly/layer-omarchy-terminal Omarchy terminal and CLI toolkit - foot, starship, modern coreutils
layer-omarchy-themes/ opencharly/layer-omarchy-themes Omarchy's 22 themes and the theme-token renderers

Omarchy evaluation

2 repos — the omarchy PR evaluation beds and their run artifacts.

path repo role
eval-omarchy/ opencharly/eval-omarchy omarchy PR evaluation: check beds + eval results
omarchy-eval-artifacts/ opencharly/omarchy-eval-artifacts omarchy PR evaluation artifacts (screenshots, GIFs, run logs)

Check & fixture layers

15 repos — check-bed and plugin fixture layers.

path repo role
layer-check-base-layer/ opencharly/layer-check-base-layer image layer / candy
layer-check-builder-npm/ opencharly/layer-check-builder-npm image layer / candy
layer-check-composition-layer/ opencharly/layer-check-composition-layer image layer / candy
layer-check-cross-local-driver-layer/ opencharly/layer-check-cross-local-driver-layer image layer / candy
layer-check-group-layer/ opencharly/layer-check-group-layer image layer / candy
layer-check-local-layer/ opencharly/layer-check-local-layer The check-local-layer candy — kind:local check fixture (extracted from charly/candy)
layer-check-retention-fixture/ opencharly/layer-check-retention-fixture image layer / candy
layer-check-stack-layer/ opencharly/layer-check-stack-layer The check-stack-layer candy — stack check fixture (extracted from charly/candy)
layer-check-structkind-layer/ opencharly/layer-check-structkind-layer image layer / candy
layer-check-substrate-layer/ opencharly/layer-check-substrate-layer image layer / candy
layer-check-tier1-layer/ opencharly/layer-check-tier1-layer image layer / candy
layer-examplebuilder-consumer/ opencharly/layer-examplebuilder-consumer image layer / candy
layer-examplestep-consumer/ opencharly/layer-examplestep-consumer The examplestep-consumer fixture — build-context plugin-execution consumer (extracted from charly/candy)
layer-examplestep-deploy-consumer/ opencharly/layer-examplestep-deploy-consumer The examplestep-deploy-consumer fixture — deploy-context plugin-execution consumer (extracted from charly/can…
layer-stepkind-build-consumer/ opencharly/layer-stepkind-build-consumer The stepkind-build-consumer fixture — class:step build-emit consumer (extracted from charly/candy)

Other layers

144 repos.

path repo role
layer-a11y-tools/ opencharly/layer-a11y-tools image layer / candy
layer-agent-forwarding/ opencharly/layer-agent-forwarding image layer / candy
layer-agentteams/ opencharly/layer-agentteams image layer / candy
layer-agentteams-cli/ opencharly/layer-agentteams-cli image layer / candy
layer-agentteams-openclaw/ opencharly/layer-agentteams-openclaw image layer / candy
layer-agentteams-snapshot/ opencharly/layer-agentteams-snapshot image layer / candy
layer-android-apidemos/ opencharly/layer-android-apidemos image layer / candy
layer-android-sdk/ opencharly/layer-android-sdk image layer / candy
layer-android-test-apps/ opencharly/layer-android-test-apps image layer / candy
layer-asciinema/ opencharly/layer-asciinema image layer / candy
layer-blogwatcher/ opencharly/layer-blogwatcher image layer / candy
layer-build-toolchain/ opencharly/layer-build-toolchain image layer / candy
layer-cachyos-extras/ opencharly/layer-cachyos-extras image layer / candy
layer-camsnap/ opencharly/layer-camsnap image layer / candy
layer-charly/ opencharly/layer-charly The charly meta-candy — the full charly toolchain layer (extracted from charly/candy)
layer-chrome/ opencharly/layer-chrome charly candy: layer-chrome (standalone repo of the candy de-submodule cutover)
layer-chrome-sway/ opencharly/layer-chrome-sway image layer / candy
layer-claude-code/ opencharly/layer-claude-code image layer / candy
layer-clawhub/ opencharly/layer-clawhub image layer / candy
layer-codex/ opencharly/layer-codex image layer / candy
layer-container-nesting/ opencharly/layer-container-nesting image layer / candy
layer-crabbox/ opencharly/layer-crabbox image layer / candy
layer-cstream-desktop/ opencharly/layer-cstream-desktop charly metalayer: the full cstream streaming desktop — pod-cstream + pod-hyprland + fixings
layer-cua/ opencharly/layer-cua image layer / candy: the Cua computer-use candies
layer-cuda/ opencharly/layer-cuda charly candy: layer-cuda (standalone repo of the candy de-submodule cutover)
layer-cue/ opencharly/layer-cue image layer / candy
layer-debootstrap-builder/ opencharly/layer-debootstrap-builder image layer / candy
layer-debug-tools/ opencharly/layer-debug-tools image layer / candy
layer-desktop-fonts/ opencharly/layer-desktop-fonts image layer / candy
layer-desktop-media/ opencharly/layer-desktop-media image layer / candy
layer-dev-tools/ opencharly/layer-dev-tools image layer / candy
layer-devops-tools/ opencharly/layer-devops-tools image layer / candy
layer-direnv/ opencharly/layer-direnv image layer / candy
layer-docker-ce/ opencharly/layer-docker-ce image layer / candy
layer-docs-site/ opencharly/layer-docs-site image layer / candy
layer-fastfetch/ opencharly/layer-fastfetch image layer / candy
layer-ffmpeg/ opencharly/layer-ffmpeg charly candy: layer-ffmpeg (standalone repo of the candy de-submodule cutover)
layer-fonts-extended/ opencharly/layer-fonts-extended image layer / candy
layer-forgecode/ opencharly/layer-forgecode image layer / candy
layer-gemini/ opencharly/layer-gemini charly candy: layer-gemini (standalone repo of the candy de-submodule cutover)
layer-gh/ opencharly/layer-gh image layer / candy
layer-gifgrep/ opencharly/layer-gifgrep image layer / candy
layer-github-actions/ opencharly/layer-github-actions image layer / candy
layer-gnupg/ opencharly/layer-gnupg image layer / candy
layer-gocryptfs/ opencharly/layer-gocryptfs image layer / candy
layer-gogcli/ opencharly/layer-gogcli image layer / candy
layer-golang/ opencharly/layer-golang charly candy: layer-golang (standalone repo of the candy de-submodule cutover)
layer-google-cloud/ opencharly/layer-google-cloud image layer / candy
layer-google-cloud-npm/ opencharly/layer-google-cloud-npm image layer / candy
layer-goplaces/ opencharly/layer-goplaces image layer / candy
layer-grafana-tools/ opencharly/layer-grafana-tools image layer / candy
layer-gst-wayland-display/ opencharly/layer-gst-wayland-display charly candy building gst-wayland-display — the Smithay compositor packaged as the GStreamer source waylanddi…
layer-helm-chart/ opencharly/layer-helm-chart image layer / candy
layer-hermes-playwright/ opencharly/layer-hermes-playwright image layer / candy
layer-heroic/ opencharly/layer-heroic image layer / candy
layer-himalaya/ opencharly/layer-himalaya image layer / candy
layer-java-openjdk/ opencharly/layer-java-openjdk image layer / candy
layer-jupyter-mcp/ opencharly/layer-jupyter-mcp image layer / candy
layer-k3s/ opencharly/layer-k3s image layer / candy
layer-k3s-kernel/ opencharly/layer-k3s-kernel image layer / candy
layer-kde-shell/ opencharly/layer-kde-shell image layer / candy
layer-keepassxc/ opencharly/layer-keepassxc image layer / candy
layer-kimi/ opencharly/layer-kimi image layer / candy
layer-kind/ opencharly/layer-kind image layer / candy
layer-kubernetes/ opencharly/layer-kubernetes image layer / candy
layer-kubevirt/ opencharly/layer-kubevirt virtctl CLI (the KubeVirt client) at a stable path — installs the pinned virtctl release binary for driving a KubeVirt cluster.
layer-kubevirt-operator/ opencharly/layer-kubevirt-operator KubeVirt + CDI platform install: applies the pinned KubeVirt operator + CR and the CDI operator + CR to a Kubernetes cluster, then waits for the CRs Available.
layer-language-runtimes/ opencharly/layer-language-runtimes image layer / candy
layer-libnotify/ opencharly/layer-libnotify image layer / candy
layer-llama-cpp/ opencharly/layer-llama-cpp image layer / candy
layer-maplibre-versatiles-styler/ opencharly/layer-maplibre-versatiles-styler image layer / candy
layer-mcporter/ opencharly/layer-mcporter image layer / candy
layer-nano-pdf/ opencharly/layer-nano-pdf image layer / candy
layer-nerdctl/ opencharly/layer-nerdctl image layer / candy: the containerd engine stack (nerdctl CLI + buildkit + CNI)
layer-nodejs/ opencharly/layer-nodejs charly candy: layer-nodejs (standalone repo of the candy de-submodule cutover)
layer-notebook-finetuning/ opencharly/layer-notebook-finetuning image layer / candy
layer-notebook-graph/ opencharly/layer-notebook-graph image layer / candy
layer-notebook-llm-on-supercomputers/ opencharly/layer-notebook-llm-on-supercomputers image layer / candy
layer-notebook-ollama/ opencharly/layer-notebook-ollama image layer / candy
layer-notebook-openrouter/ opencharly/layer-notebook-openrouter image layer / candy
layer-notebook-osm/ opencharly/layer-notebook-osm image layer / candy
layer-notebook-templates/ opencharly/layer-notebook-templates image layer / candy
layer-nvenc-headers/ opencharly/layer-nvenc-headers image layer / candy
layer-nvidia/ opencharly/layer-nvidia charly candy: layer-nvidia (standalone repo of the candy de-submodule cutover)
layer-ollama-cuda/ opencharly/layer-ollama-cuda image layer / candy
layer-ollama-rocm/ opencharly/layer-ollama-rocm image layer / candy
layer-openclaw/ opencharly/layer-openclaw product family (box + candy + beds + skills)
layer-oracle/ opencharly/layer-oracle image layer / candy
layer-ordercli/ opencharly/layer-ordercli image layer / candy
layer-pacstrap-builder/ opencharly/layer-pacstrap-builder image layer / candy
layer-pavucontrol/ opencharly/layer-pavucontrol image layer / candy
layer-pi-agent/ opencharly/layer-pi-agent image layer / candy
layer-pixi/ opencharly/layer-pixi image layer / candy
layer-playwright/ opencharly/layer-playwright image layer / candy
layer-pod-addcandy-marker/ opencharly/layer-pod-addcandy-marker image layer / candy
layer-pre-commit/ opencharly/layer-pre-commit image layer / candy
layer-punktfunk/ opencharly/layer-punktfunk Punktfunk streaming host candy — punktfunk/1 QUIC host daemon, web console and plugin runner from unom's sign…
layer-punktfunk-client/ opencharly/layer-punktfunk-client The punktfunk streaming CLIENT — punktfunk-client and its headless punktfunk CLI, installed from unom's signe…
layer-python/ opencharly/layer-python charly candy: layer-python (standalone repo of the candy de-submodule cutover)
layer-python-ml/ opencharly/layer-python-ml image layer / candy
layer-qdrant/ opencharly/layer-qdrant charly candy: the Qdrant vector-search service layer — pinned static-musl binary, supervisord REST 6333 + gRPC 6334, ~/.qdrant volume, admin API-key auth from the credential store
layer-ripgrep/ opencharly/layer-ripgrep charly candy: ripgrep (standalone repo of the candy de-submodule cutover)
layer-rocm/ opencharly/layer-rocm image layer / candy
layer-rpmfusion/ opencharly/layer-rpmfusion image layer / candy
layer-rust/ opencharly/layer-rust image layer / candy
layer-sag/ opencharly/layer-sag image layer / candy
layer-selkies-kde-desktop/ opencharly/layer-selkies-kde-desktop image layer / candy
layer-sherpa-onnx/ opencharly/layer-sherpa-onnx image layer / candy
layer-shortbread/ opencharly/layer-shortbread image layer / candy
layer-socat/ opencharly/layer-socat charly candy: layer-socat (standalone repo of the candy de-submodule cutover)
layer-songsee/ opencharly/layer-songsee image layer / candy
layer-sqlite/ opencharly/layer-sqlite image layer / candy
layer-ssh-client/ opencharly/layer-ssh-client image layer / candy
layer-steam/ opencharly/layer-steam image layer / candy
layer-strata/ opencharly/layer-strata The strata candy + box/strata — Qwen3.8-Flash-Next on one consumer NVIDIA card, OpenAI/Anthropic/Responses-compatible API on :8080
layer-summarize/ opencharly/layer-summarize image layer / candy
layer-supervisord/ opencharly/layer-supervisord charly candy: layer-supervisord (standalone repo of the candy de-submodule cutover)
layer-sway-desktop/ opencharly/layer-sway-desktop image layer / candy
layer-sway-desktop-vnc/ opencharly/layer-sway-desktop-vnc image layer / candy
layer-tailscale/ opencharly/layer-tailscale image layer / candy
layer-tailscale-up/ opencharly/layer-tailscale-up image layer / candy
layer-thunar/ opencharly/layer-thunar image layer / candy
layer-tmux/ opencharly/layer-tmux charly candy: layer-tmux (standalone repo of the candy de-submodule cutover)
layer-typst/ opencharly/layer-typst image layer / candy
layer-unsloth/ opencharly/layer-unsloth image layer / candy
layer-uv/ opencharly/layer-uv image layer / candy
layer-vectorchord/ opencharly/layer-vectorchord image layer / candy
layer-versatiles-fonts/ opencharly/layer-versatiles-fonts image layer / candy
layer-versatiles-style/ opencharly/layer-versatiles-style image layer / candy
layer-vscode/ opencharly/layer-vscode image layer / candy
layer-wacli/ opencharly/layer-wacli image layer / candy
layer-wf-recorder/ opencharly/layer-wf-recorder image layer / candy
layer-whisper/ opencharly/layer-whisper image layer / candy
layer-wl-overlay/ opencharly/layer-wl-overlay image layer / candy
layer-wl-record-pixelflux/ opencharly/layer-wl-record-pixelflux image layer / candy
layer-wl-screenshot-grim/ opencharly/layer-wl-screenshot-grim image layer / candy
layer-wl-screenshot-pixelflux/ opencharly/layer-wl-screenshot-pixelflux image layer / candy
layer-wl-tools/ opencharly/layer-wl-tools image layer / candy
layer-workspace-mount/ opencharly/layer-workspace-mount image layer / candy
layer-xdg-portal/ opencharly/layer-xdg-portal image layer / candy
layer-xfce4-terminal/ opencharly/layer-xfce4-terminal image layer / candy
layer-xterm/ opencharly/layer-xterm image layer / candy
layer-xurl/ opencharly/layer-xurl image layer / candy
layer-yay/ opencharly/layer-yay image layer / candy

Plugins

120 repos — charly plugin candies. Their providers: blocks register the kinds, deploys, verbs, steps, builds, builders, commands, engines, loaders, refs, agent runtimes and terminals charly speaks.

path repo role
charly-registry/ opencharly/charly-registry charly plugin: the charly registry command — the local OCI image cache and the command:registry word (an in-process OCI registry over the shared cache; the registry-based delivery surface for pod, VM and Kubernetes)
plugin-adb/ opencharly/plugin-adb charly plugin
plugin-addr/ opencharly/plugin-addr charly plugin
plugin-agent/ opencharly/plugin-agent charly plugin
plugin-agent-pi/ opencharly/plugin-agent-pi charly plugin
plugin-agentteams/ opencharly/plugin-agentteams charly plugin
plugin-alias/ opencharly/plugin-alias charly plugin
plugin-appium/ opencharly/plugin-appium charly plugin
plugin-authoring/ opencharly/plugin-authoring charly plugin
plugin-boot-kind/ opencharly/plugin-boot-kind charly plugin: the bootloader and snapshot kinds
plugin-box/ opencharly/plugin-box charly plugin
plugin-bpf/ opencharly/plugin-bpf charly generic eBPF/BPF kernel plugin — command:bpf (status/lsm/config/probe) + verb:bpf check steps
plugin-build/ opencharly/plugin-build charly plugin
plugin-builder/ opencharly/plugin-builder charly plugin
plugin-builder-aur/ opencharly/plugin-builder-aur charly plugin
plugin-builder-cargo/ opencharly/plugin-builder-cargo charly plugin
plugin-builder-npm/ opencharly/plugin-builder-npm charly plugin
plugin-builder-pixi/ opencharly/plugin-builder-pixi charly plugin
plugin-cache/ opencharly/plugin-cache charly plugin: the `charly cache status
plugin-candy/ opencharly/plugin-candy charly plugin
plugin-candy-kind/ opencharly/plugin-candy-kind charly plugin
plugin-cardwire/ opencharly/plugin-cardwire charly plugin: cardwire (eBPF LSM GPU manager) — install + command:cardwire CLI
plugin-cdp/ opencharly/plugin-cdp charly plugin
plugin-check/ opencharly/plugin-check charly plugin
plugin-clean/ opencharly/plugin-clean charly plugin
plugin-cmd/ opencharly/plugin-cmd charly plugin
plugin-command/ opencharly/plugin-command charly plugin
plugin-crabbox/ opencharly/plugin-crabbox charly plugin
plugin-cstream/ opencharly/plugin-cstream charly plugin serving the cstream: check verb — session/login/frame/stats probes for charly-streamer deployme…
plugin-cua/ opencharly/plugin-cua charly plugin: verb:cua + kind:cua (the Cua computer-use provider)
plugin-dbus/ opencharly/plugin-dbus charly plugin
plugin-deploy-local/ opencharly/plugin-deploy-local charly plugin
plugin-deploy-pod/ opencharly/plugin-deploy-pod charly plugin
plugin-deploy-vm/ opencharly/plugin-deploy-vm charly plugin
plugin-desktop-kind/ opencharly/plugin-desktop-kind charly plugin: the theme, session, displaymanager and desktopentry kinds
plugin-distro/ opencharly/plugin-distro charly plugin
plugin-dns/ opencharly/plugin-dns charly plugin
plugin-docs/ opencharly/plugin-docs charly plugin
plugin-doctor/ opencharly/plugin-doctor charly plugin
plugin-dsh/ opencharly/plugin-dsh charly plugin
plugin-egress/ opencharly/plugin-egress charly plugin
plugin-enc/ opencharly/plugin-enc charly plugin
plugin-example/ opencharly/plugin-example charly plugin
plugin-example-bootstrap/ opencharly/plugin-example-bootstrap charly plugin
plugin-example-builder/ opencharly/plugin-example-builder charly plugin
plugin-example-command/ opencharly/plugin-example-command charly plugin
plugin-example-deploy/ opencharly/plugin-example-deploy charly plugin
plugin-example-dispatch/ opencharly/plugin-example-dispatch charly plugin
plugin-example-external/ opencharly/plugin-example-external charly plugin
plugin-example-kind/ opencharly/plugin-example-kind charly plugin
plugin-example-lifecycle/ opencharly/plugin-example-lifecycle charly plugin
plugin-example-require/ opencharly/plugin-example-require charly plugin
plugin-example-step/ opencharly/plugin-example-step charly plugin
plugin-example-stepkind/ opencharly/plugin-example-stepkind charly plugin
plugin-example-structkind/ opencharly/plugin-example-structkind charly plugin
plugin-examplerunverb/ opencharly/plugin-examplerunverb charly plugin
plugin-feature/ opencharly/plugin-feature charly plugin
plugin-file/ opencharly/plugin-file charly plugin
plugin-fleet/ opencharly/plugin-fleet charly plugin
plugin-gh/ opencharly/plugin-gh The canonical GitHub surface for opencharly plugins — verb:gh + command:gh + the ghkit client (one gh implementation, zero hand-rolled subprocesses)
plugin-gpu/ opencharly/plugin-gpu charly plugin
plugin-harness-kind/ opencharly/plugin-harness-kind charly plugin
plugin-helm/ opencharly/plugin-helm charly plugin
plugin-herdr/ opencharly/plugin-herdr charly plugin: command:herdr + verb:herdr — control a Herdr terminal-multiplexer session over its NDJSON socket API
plugin-http/ opencharly/plugin-http charly plugin
plugin-init/ opencharly/plugin-init charly plugin
plugin-installstep/ opencharly/plugin-installstep charly plugin
plugin-interface/ opencharly/plugin-interface charly plugin
plugin-jetkvm/ opencharly/plugin-jetkvm charly plugin: the jetkvm: IP-KVM verb — drive a JetKVM device (WebRTC/JSON-RPC/HID) from a charly plan without a browser
plugin-k8sgen/ opencharly/plugin-k8sgen charly plugin
plugin-kernel-param/ opencharly/plugin-kernel-param charly plugin
plugin-kube/ opencharly/plugin-kube charly plugin
plugin-kubevirt/ opencharly/plugin-kubevirt OUT-OF-TREE charly plugin owning ALL KubeVirt interaction: the kind:kubevirt substrate, the deploy:kubevirt venue lifecycle, the kubevirt: check verb, and the charly kubevirt CLI.
plugin-loader/ opencharly/plugin-loader charly plugin
plugin-lobster/ opencharly/plugin-lobster charly plugin: the native lobster workflow engine — workflow:lobster (workflow-run/resume/schedule/emit) + command:lobster (the .lobster importer/exporter and doctor), plus the systemd-user timer scheduler
plugin-marketplace/ opencharly/plugin-marketplace charly plugin
plugin-matching/ opencharly/plugin-matching charly plugin
plugin-mcp/ opencharly/plugin-mcp charly plugin
plugin-media/ opencharly/plugin-media charly plugin: the transcode pipeline verb — host-side MJPEG → H.264 MP4 transcoding
plugin-migrate/ opencharly/plugin-migrate charly plugin
plugin-mise/ opencharly/plugin-mise charly plugin: builder:mise + verb:mise — full mise (jdx/mise) support
plugin-mount/ opencharly/plugin-mount charly plugin
plugin-nerdctl/ opencharly/plugin-nerdctl charly plugin: engine:containerd — the containerd engine provider (the nerdctl CLI drives it)
plugin-oci/ opencharly/plugin-oci charly plugin
plugin-ollama/ opencharly/plugin-ollama charly plugin
plugin-omarchy/ opencharly/plugin-omarchy charly plugin: the omarchy CLI surface as a check verb
plugin-openclaw/ opencharly/plugin-openclaw charly plugin
plugin-package/ opencharly/plugin-package charly plugin
plugin-pipeline/ opencharly/plugin-pipeline charly plugin: the generic agent/workflow engine — the bare agent runtime, the plan executor, the kind:pipeline entity
plugin-pod/ opencharly/plugin-pod charly plugin
plugin-port/ opencharly/plugin-port charly plugin
plugin-preempt/ opencharly/plugin-preempt charly plugin
plugin-process/ opencharly/plugin-process charly plugin
plugin-punktfunk/ opencharly/plugin-punktfunk OUT-OF-TREE charly plugin serving the punktfunk: check verb — probe and manage a punktfunk streaming host ove…
plugin-qdrant/ opencharly/plugin-qdrant OUT-OF-TREE charly plugin serving the qdrant: check verb + the charly qdrant CLI, driving the official Go client (gRPC 6334)
plugin-quickshell/ opencharly/plugin-quickshell The quickshell: check verb — IPC against any Quickshell desktop shell
plugin-record/ opencharly/plugin-record charly plugin
plugin-refs/ opencharly/plugin-refs charly plugin
plugin-resource/ opencharly/plugin-resource charly plugin
plugin-review/ opencharly/plugin-review charly plugin: read-only GitHub PR review — deterministic verb:pr tools + command:review
plugin-secrets/ opencharly/plugin-secrets charly plugin
plugin-service/ opencharly/plugin-service charly plugin
plugin-settings/ opencharly/plugin-settings charly plugin
plugin-sidecar/ opencharly/plugin-sidecar charly plugin
plugin-spice/ opencharly/plugin-spice charly plugin
plugin-ssh/ opencharly/plugin-ssh charly plugin
plugin-status/ opencharly/plugin-status charly plugin
plugin-strata/ opencharly/plugin-strata The charly strata management CLI — read-only inspection of a deployed Strata engine
plugin-substrate/ opencharly/plugin-substrate charly plugin
plugin-task/ opencharly/plugin-task Generic declarative task runner for charly — kind:task entities + command:task + verb:task
plugin-tmux/ opencharly/plugin-tmux charly plugin
plugin-tunnel/ opencharly/plugin-tunnel charly plugin
plugin-udev/ opencharly/plugin-udev charly plugin
plugin-unit/ opencharly/plugin-unit charly plugin serving the unit: act/assert verb — declarative init-unit authoring (.socket/.target/.slice/dro…
plugin-unix-group/ opencharly/plugin-unix-group charly plugin
plugin-user/ opencharly/plugin-user charly plugin
plugin-vision/ opencharly/plugin-vision The vision: check verb — validate a screenshot by sending it directly to an OpenAI-compatible vision endpoint from charly
plugin-vm/ opencharly/plugin-vm charly plugin
plugin-vnc/ opencharly/plugin-vnc charly plugin
plugin-wl/ opencharly/plugin-wl charly plugin

Pods

72 repos — pod/deployment bundles.

path repo role
pod-agentteams-controller/ opencharly/pod-agentteams-controller pod / deployment bundle
pod-agentteams-element/ opencharly/pod-agentteams-element pod / deployment bundle
pod-agentteams-higress/ opencharly/pod-agentteams-higress pod / deployment bundle
pod-agentteams-manager/ opencharly/pod-agentteams-manager pod / deployment bundle
pod-agentteams-matrix/ opencharly/pod-agentteams-matrix pod / deployment bundle
pod-agentteams-minio/ opencharly/pod-agentteams-minio pod / deployment bundle
pod-agentteams-worker/ opencharly/pod-agentteams-worker pod / deployment bundle
pod-airflow/ opencharly/pod-airflow pod / deployment bundle
pod-android-emulator-layer/ opencharly/pod-android-emulator-layer pod / deployment bundle
pod-appium-server/ opencharly/pod-appium-server pod / deployment bundle
pod-charly-hooks/ opencharly/pod-charly-hooks pod / deployment bundle
pod-charly-mcp/ opencharly/pod-charly-mcp The charly-mcp candy — the charly MCP gateway pod (extracted from charly/candy)
pod-charly-versa/ opencharly/pod-charly-versa pod / deployment bundle
pod-check-keepalive/ opencharly/pod-check-keepalive pod / deployment bundle
pod-check-redis-init-layer/ opencharly/pod-check-redis-init-layer pod / deployment bundle
pod-check-tier23-layer/ opencharly/pod-check-tier23-layer pod / deployment bundle
pod-chrome-cdp/ opencharly/pod-chrome-cdp charly candy: pod-chrome-cdp (standalone repo of the candy de-submodule cutover)
pod-chrome-devtools-mcp/ opencharly/pod-chrome-devtools-mcp pod / deployment bundle
pod-chrome-headless/ opencharly/pod-chrome-headless pod / deployment bundle
pod-cloud-init/ opencharly/pod-cloud-init pod / deployment bundle
pod-comfyui/ opencharly/pod-comfyui pod / deployment bundle
pod-crabbox-coordinator/ opencharly/pod-crabbox-coordinator pod / deployment bundle
pod-cstream/ opencharly/pod-cstream charly candy: the charly-streamer transport spine — streamer/gateway/broker/leader services, PAM stack, PipeW…
pod-dbus/ opencharly/pod-dbus charly candy: pod-dbus (standalone repo of the candy de-submodule cutover)
pod-dsh/ opencharly/pod-dsh pod / deployment bundle
pod-filebrowser/ opencharly/pod-filebrowser pod / deployment bundle
pod-github-runner/ opencharly/pod-github-runner pod / deployment bundle
pod-herdr/ opencharly/pod-herdr pod / deployment bundle — the herdr stack box + check-herdr-pod R10 bed
pod-hermes/ opencharly/pod-hermes pod / deployment bundle
pod-hermes-full/ opencharly/pod-hermes-full pod / deployment bundle
pod-hyprland/ opencharly/pod-hyprland charly candy: Hyprland as a nested compositor inside charly-streamer's Wayland parent
pod-immich/ opencharly/pod-immich pod / deployment bundle
pod-immich-ml/ opencharly/pod-immich-ml pod / deployment bundle
pod-jupyter/ opencharly/pod-jupyter pod / deployment bundle
pod-jupyter-ml/ opencharly/pod-jupyter-ml pod / deployment bundle
pod-k8s-layer/ opencharly/pod-k8s-layer pod / deployment bundle
pod-kde-desktop/ opencharly/pod-kde-desktop pod / deployment bundle
pod-kde-selkies/ opencharly/pod-kde-selkies pod / deployment bundle
pod-labwc/ opencharly/pod-labwc pod / deployment bundle
pod-maputnik/ opencharly/pod-maputnik pod / deployment bundle
pod-marimo/ opencharly/pod-marimo pod / deployment bundle
pod-mcp-layer/ opencharly/pod-mcp-layer pod / deployment bundle
pod-nested-podman-socket/ opencharly/pod-nested-podman-socket pod / deployment bundle
pod-ollama/ opencharly/pod-ollama pod / deployment bundle
pod-openwebui/ opencharly/pod-openwebui pod / deployment bundle
pod-os-layer/ opencharly/pod-os-layer pod / deployment bundle
pod-osm-tools/ opencharly/pod-osm-tools pod / deployment bundle
pod-pipewire/ opencharly/pod-pipewire charly candy: pod-pipewire (standalone repo of the candy de-submodule cutover)
pod-pmtiles-viewer/ opencharly/pod-pmtiles-viewer pod / deployment bundle
pod-postgresql/ opencharly/pod-postgresql pod / deployment bundle
pod-qdrant/ opencharly/pod-qdrant pod / deployment bundle — the qdrant box + check-qdrant-pod R10 bed
pod-qemu-guest-agent/ opencharly/pod-qemu-guest-agent pod / deployment bundle
pod-redis/ opencharly/pod-redis pod / deployment bundle
pod-redis-client-layer/ opencharly/pod-redis-client-layer pod / deployment bundle
pod-redis-server-layer/ opencharly/pod-redis-server-layer pod / deployment bundle
pod-selkies/ opencharly/pod-selkies charly candy: pod-selkies (standalone repo of the candy de-submodule cutover)
pod-selkies-core/ opencharly/pod-selkies-core pod / deployment bundle
pod-selkies-desktop/ opencharly/pod-selkies-desktop pod / deployment bundle
pod-sshd/ opencharly/pod-sshd pod / deployment bundle
pod-sway/ opencharly/pod-sway charly candy: pod-sway (standalone repo of the candy de-submodule cutover)
pod-swaync/ opencharly/pod-swaync pod / deployment bundle
pod-testapi/ opencharly/pod-testapi pod / deployment bundle
pod-traefik/ opencharly/pod-traefik pod / deployment bundle
pod-unsloth-studio/ opencharly/pod-unsloth-studio pod / deployment bundle
pod-valkey/ opencharly/pod-valkey pod / deployment bundle
pod-versatiles/ opencharly/pod-versatiles pod / deployment bundle
pod-versatiles-frontend/ opencharly/pod-versatiles-frontend pod / deployment bundle
pod-virtualization/ opencharly/pod-virtualization pod / deployment bundle
pod-waybar/ opencharly/pod-waybar pod / deployment bundle
pod-waybar-labwc/ opencharly/pod-waybar-labwc pod / deployment bundle
pod-wayvnc/ opencharly/pod-wayvnc pod / deployment bundle
pod-web-layer/ opencharly/pod-web-layer pod / deployment bundle

VMs

2 repos.

path repo role
vm-k3s-agent/ opencharly/vm-k3s-agent VM image definition
vm-k3s-server/ opencharly/vm-k3s-server VM image definition

Pinning — the umbrella tracks charly's graph

Every submodule is pinned to a specific commit (a gitlink), and currency answers whether the whole org is a single coherent snapshot:

  • charly tracks its own default branch — the pin is the main commit the last sync recorded.
  • every distro-* follows exactly the commit charly's own gitlinks pin (charly's box/<distro> ↔ this repo's distro-<distro>), so the umbrella means "the org exactly as charly sees it".
  • sdk and spec are pinned the same way, at their own default branch's HEAD.
  • every other repo follows its own default-branch HEAD.

This umbrella's .gitmodules records branch = <repo default> on all of its entries, so a future default-branch rename keeps working. The pins are advanced with charly task sync (the pin-contract bump — it advances EVERY pin this repo declares), run by hand and landed through the org's PR-only validation chain, which opens a PR and never pushes to the default branch. There is no scheduled workflow; charly task sync is the one path that moves a pin.

A pin is a gitlink — the recorded commit, checked out detached and clean — and charly task verify asserts exactly that. A dangling pin is a failure.

Catching up with upstream

The pins move only through the pin contract, and three different questions have three different answers. Ask the right one:

question command what it answers
where is each repo pinned? charly task map the state — every submodule with its pin and sync state
does this tree agree with itself? charly task verify the consistency — every checkout sits at the gitlink the index records, and every pin's branch is its remote's default branch — plus a report of the currency below, which never fails the gate
is the org current with its upstreams? charly task pins --param MODE=currency the currency — every pin against the ref its intent names, judged from the index and the remote, never from a checkout

verify being green does not mean the org is current: a tree can be perfectly consistent while every pin is behind what its repo serves. So the gate names the pins that are not current — currency asks that other question, and when a pin waits on its source it names the producer leg instead of leaving you to discover it an hour later. A pin that is behind is an advance available NOW, in its producer's own repo, so the gate reports it and stays green; only a pin the workflow cannot judge, or two sides that disagree, fails it.

The sanctioned catch-up is one sequence, and it is the only one that moves a pin:

charly task sync                        # the pin-contract bump — it advances EVERY pin this repo declares, in the index; it commits nothing
charly task init                        # materialize the paths the wave advanced, AT their new pins
charly task verify                      # judge the tree against the pins it records
# …then land the pin wave as a PR through the org's validation chain

On a tree that was never materialized, the materialization comes first — the project cannot load before its import: paths exist, so the wave's own first verb would not run. bash scripts/init-submodules.sh is that step (see Start developing); the sequence above follows it unchanged.

A wave needs no full set: the bump advances a path with no checkout in the index — a leaf to the tip its remote serves for its branch=, an edge to the twin the source's tree records — and a path with a checkout is still rolled in that checkout, so the two keep agreeing. It still fails loud for every path it cannot advance: a sync over a tree it could not fully advance must never report success. That is why the order is sync → init → verify — the sync writes the pins, the init materializes the checkouts at those pins, and the verify judges them. The daily tree stays light, and so does a wave. A repo you merely want to work on is one CHARLY_INIT_PATHS=<repo> charly task init away.

Never catch up by hand. A pin is advanced by charly task sync and lands as a PR. It is never hand-edited in the index, never re-pointed at a branch tip, and never "fixed" by checking out a newer commit inside the submodule: the pin is the index entry, and the checkout follows it.

License

MIT — see LICENSE. Each submodule is governed by its own repository's license.

About

OpenCharly umbrella — one clone of the whole org: every opencharly repo as a flat gitlink (charly, sdk, spec, marketplace, docs, distro-*, packaging, tooling)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages