Skip to main content

max / everycycle

Make the repo the unit of publication, not the eight crates everycycle publishes as a project on MNW git, not as eight library crates on crates.io. It is one thing a reader clones and runs; eight crates would create eight version surfaces and eight release orderings to serve nobody. - publish = false on all eight members, so nothing reaches crates.io by accident and the registry answer lives in the source. - Drop bento.toml. Bento's Kind is App, Library or Service, and Library means a crates.io release path that is no longer the plan; there is no repo-only kind to switch to. Deregistered from the daemon config too. This project's release is a git push. - README stands on its own now that the repo is the artifact: the eight crates that exist are listed separately from the binaries that do not exist yet, which the old Components table ran together. The repo was already public on mnw (created 2026-07-25), contrary to the filed state; only the description was missing, and it is set now.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-08-06 18:30 UTC
Signed with PGP, not checked
Commit: 0ad0e42bae8938580b969e008a8c251b6f089181
Parent: 556346c
10 files changed, +47 insertions, -16 deletions
M README.md +31 -8
@@ -1,6 +1,6 @@
1 1 # EveryCycle
2 2
3 - A Linux system service for heterogeneous GPU compute. `everycycled` owns the GPU fleet on a host, intermediates between the system and the silicon, and exposes a unified API to userspace clients — across vendors, generations, and the long tail of hardware whose vendors have moved on.
3 + A Linux system service for heterogeneous GPU compute. `everycycled` owns the GPU fleet on a host, intermediates between the system and the silicon, and exposes a unified API to userspace clients, across vendors, generations, and the long tail of hardware whose vendors have moved on.
4 4
5 5 EveryCycle makes a box's mix of GPUs behave as one programmable resource. The first reference client is OpenAI-compatible LLM serving; other workloads (vision, scientific compute, batch ML pipelines) follow.
6 6
@@ -9,7 +9,7 @@
9 9 ## Two co-equal goals
10 10
11 11 1. **The daemon and ecosystem.** A Linux system service (`everycycled`) plus its clients, libraries, and operator tools. MIT-licensed, distributed via standard distro packaging. Open and permissive on principle.
12 - 2. **Reference appliances.** Specific hardware designs that ship pre-configured with EveryCycle — sold and supported as products. Hardware revenue funds the open-source software work.
12 + 2. **Reference appliances.** Specific hardware designs that ship pre-configured with EveryCycle, sold and supported as products. Hardware revenue funds the open-source software work.
13 13
14 14 ## Wedge
15 15
@@ -20,23 +20,40 @@
20 20
21 21 EveryCycle is the GPU-compute analog of what PipeWire is to audio, NetworkManager is to networking, CUPS is to printing. A Linux system service that owns a device class and provides a stable API to userspace, replacing the current chaos in which every program directly drives the GPU via vendor SDKs.
22 22
23 - ## Components
23 + ## Crates in this repo
24 +
25 + Eight workspace members under `crates/`. None is published to crates.io: the unit of
26 + publication is this repo, not the individual crates, so they version together and none
27 + of them is a stable dependency surface for outside code.
28 +
29 + | Crate | Role |
30 + |---|---|
31 + | `everycycle-runtime` | Inference runtime: model execution, heterogeneous layer placement, kernel dispatch |
32 + | `everycycle-scheduler` | Continuous batching, paged kv-cache, admission control, speculative-decode coordination |
33 + | `everycycle-orchestrator` | Multi-box control plane: capability map, request routing, fleet management |
34 + | `everycycle-hal` | Hardware abstraction: device enumeration, topology, memory pools, IPC primitives, telemetry |
35 + | `everycycle-api` | The stable client surface: request/event types, IPC framing, transport trait |
36 + | `everycycle-tui` | Operator dashboard over structured telemetry |
37 + | `everycycle-appraise` | Probe runner, canonical serializer, signer, and CLI for GPU appraisal reports |
38 + | `everycycle-bmc-agent` | Agent for the OpenBMC fork on EveryCycle boxes: telemetry, fan curves, power capping |
39 +
40 + ## Planned components
41 +
42 + The shape the above is being built toward. These do not exist yet.
24 43
25 44 | Binary | Role |
26 45 |---|---|
27 46 | `everycycled` | The system daemon. Audit, supervise, plan, dispatch. |
28 47 | `everycycle-cli` | Operator CLI |
29 - | `everycycle-tui` | Operator dashboard |
30 48 | `everycycle-serving` | OpenAI-compatible HTTP/SSE server (first-party client) |
31 - | `everycycle-exec-{cuda,rocm,cpu,vulkan}` | Executor modules — sidecars or in-process depending on libc constraints |
49 + | `everycycle-exec-{cuda,rocm,cpu,vulkan}` | Executor modules; sidecars or in-process depending on libc constraints |
32 50 | `libeverycycle` / `everycycle-client` | Client SDK (C ABI; Rust crate; other bindings to follow) |
33 - | `everycycle-bmc-agent` | Separate binary for OpenBMC; structured telemetry |
34 51
35 52 ## Platform
36 53
37 54 **Linux only by design.** macOS-native is not on the roadmap. Apple Silicon may eventually be supported via Asahi Linux as the project's GPU stack matures.
38 55
39 - **Pinned to Ubuntu LTS (24.04).** Ubuntu LTS is the single supported distro — the only target that gets formal support, the same distro MNW production servers run on. The codebase is generic Linux and should work elsewhere, but issues outside Ubuntu LTS are addressed best-effort. Executor isolation (in-process vs sidecar) is a per-executor choice driven by vendor SDK stability and crash blast-radius, not by libc compatibility.
56 + **Pinned to Ubuntu LTS (24.04).** Ubuntu LTS is the single supported distro, the only target that gets formal support, the same distro MNW production servers run on. The codebase is generic Linux and should work elsewhere, but issues outside Ubuntu LTS are addressed best-effort. Executor isolation (in-process vs sidecar) is a per-executor choice driven by vendor SDK stability and crash blast-radius, not by libc compatibility.
40 57
41 58 ## Building
42 59
@@ -54,4 +71,10 @@
54 71
55 72 ## Status and contact
56 73
57 - Pre-public. The project is unlisted on SourceHut until milestone A1 runs. Documentation will be incomplete until then. If you have somehow found this and want to talk, the founder's contact is in the commit history.
74 + Early. Pre-milestone-A1, and documentation will be incomplete until it runs.
75 +
76 + The repo is the release: it is public and clonable at
77 + [makenot.work/git/max/everycycle](https://makenot.work/git/max/everycycle), and there are
78 + no crates.io releases to depend on. Take it by cloning it or as a git dependency.
79 +
80 + If you want to talk, the founder's contact is in the commit history.
@@ -7,6 +7,8 @@
7 7 license.workspace = true
8 8 authors.workspace = true
9 9 repository.workspace = true
10 + # The unit of publication is the repo, not the crates (decided 2026-08-06).
11 + publish = false
10 12
11 13 [dependencies]
12 14 serde = { version = "1", features = ["derive"] }
@@ -7,6 +7,8 @@
7 7 license.workspace = true
8 8 authors.workspace = true
9 9 repository.workspace = true
10 + # The unit of publication is the repo, not the crates (decided 2026-08-06).
11 + publish = false
10 12
11 13 [dependencies]
12 14 everycycle-hal = { path = "../hal" }
@@ -7,6 +7,8 @@
7 7 license.workspace = true
8 8 authors.workspace = true
9 9 repository.workspace = true
10 + # The unit of publication is the repo, not the crates (decided 2026-08-06).
11 + publish = false
10 12
11 13 [lints]
12 14 workspace = true
@@ -7,6 +7,8 @@
7 7 license.workspace = true
8 8 authors.workspace = true
9 9 repository.workspace = true
10 + # The unit of publication is the repo, not the crates (decided 2026-08-06).
11 + publish = false
10 12
11 13 [dependencies]
12 14 serde = { version = "1", features = ["derive"] }
@@ -7,6 +7,8 @@
7 7 license.workspace = true
8 8 authors.workspace = true
9 9 repository.workspace = true
10 + # The unit of publication is the repo, not the crates (decided 2026-08-06).
11 + publish = false
10 12
11 13 [lints]
12 14 workspace = true
@@ -7,6 +7,8 @@
7 7 license.workspace = true
8 8 authors.workspace = true
9 9 repository.workspace = true
10 + # The unit of publication is the repo, not the crates (decided 2026-08-06).
11 + publish = false
10 12
11 13 [dependencies]
12 14 everycycle-hal = { path = "../hal" }
@@ -7,6 +7,8 @@
7 7 license.workspace = true
8 8 authors.workspace = true
9 9 repository.workspace = true
10 + # The unit of publication is the repo, not the crates (decided 2026-08-06).
11 + publish = false
10 12
11 13 [lints]
12 14 workspace = true
@@ -7,6 +7,8 @@
7 7 license.workspace = true
8 8 authors.workspace = true
9 9 repository.workspace = true
10 + # The unit of publication is the repo, not the crates (decided 2026-08-06).
11 + publish = false
10 12
11 13 [dependencies]
12 14 everycycle-hal = { path = "../hal" }
D bento.toml -8
@@ -1,8 +1,0 @@
1 - # How Bento releases everycycle. Lives here rather than in the daemon's config so it is
2 - # versioned with the code it describes.
3 -
4 - # A crate, not an app: one publish.rhai rather than a recipe per platform, and
5 - # the target below names the host that uploads rather than a build matrix.
6 - kind = "library"
7 -
8 - targets = ["linux/x86_64"]