Menu bar switch (macOS)
A SwiftBar plugin shows the onedot mark in the menu bar — solid while devkit is on, dimmed while it is off. Its menu runs devkit off or devkit on, switches Codex, OpenCode and every registry runtime between auto, on and off, picks the review runtime and the update channel, lists every CLI tool from tools.json with its installed and outdated state, runs devkit doctor in a Terminal window, links the documentation, and names a staged update or missing tools. The switch is optional: devkit does not install SwiftBar, so only people who want it need the app.
Install
Install SwiftBar:
install.shbashbashbrew install swiftbar1Run
devkit sync; on a Mac with SwiftBar installed and no folder set, devkit points SwiftBar at~/.onedot-devkit/swiftbar. That stable directory contains the generated SwiftBar plugin as a regular executable file. Every sync replaces an older managed link or generated file atomically.Release archives retain a generated compatibility copy under
content/swiftbar/, so a link created by an older devkit remains valid during the transition and after rollback.If SwiftBar is already running, quit it first, run
devkit sync, then start SwiftBar — the running app would overwrite the folder from its cache.Already using SwiftBar with your own plugin folder? devkit leaves it untouched and names the link command; SwiftBar also reads subfolders reached through a link:
Terminalbashbashln -s ~/.onedot-devkit/swiftbar \ "<your plugin folder>/devkit"1
2Start SwiftBar and confirm the icon:
Terminalbashbashopen -a SwiftBar1The mark appears in the menu bar. Click it and choose "devkit ausschalten"; the mark dims and
devkit status --jsonshows"enabled": false. The change applies from the next session on, like the commands themselves.
What the menu offers
| Entry | Runs | Takes effect |
|---|---|---|
| devkit ausschalten / einschalten | devkit off / devkit on | next session |
| Codex mit einrichten: automatisch / immer / nie | devkit config codex auto|on|off | next devkit sync or devkit apply |
| OpenCode mit einrichten: automatisch / immer / nie | devkit config opencode auto|on|off | next devkit sync or devkit apply |
| Update-Kanal: stable / latest | devkit config channel stable|latest | next devkit sync; shown only while the source is HTTP — a local checkout or Git source has no channel |
| Reviewer für /review: Claude Code / Codex / DeepSeek Harness / … | devkit config review-runtime <name> | next delegation; the list holds claude plus every registry runtime with review_role: true, and devkit refuses a name whose binary is missing |
| Werkzeuge für /delegate → Pi, DeepSeek Harness, … → automatisch / immer erlauben / sperren | devkit config runtime <name> auto|on|off | next delegation; every runtime from content/model-runtimes.json except claude and codex |
| CLI-Tools: N installiert, N fehlend, N veraltet → ✓ / ✗ / ↑ per tool → Fehlende Pflicht-Tools installieren / Optionale Tools mit installieren / Veraltete aktualisieren / Auf Updates prüfen | devkit tools, devkit tools --optional, devkit tools --upgrade, devkit tools --outdated | immediately; the install and upgrade entries appear only while something is missing or outdated, and a notification names the result. Installed means the name resolves on PATH, outdated comes from the last devkit tools --outdated run — the menu itself never calls the network |
| Doctor ausführen | devkit doctor | opens a Terminal window with the full report; Enter closes it |
| Dokumentation | opens https://devkit.one-dot.io/ | — |
A check mark sits on the current value; in automatisch mode the heading also says whether the runtime is installed, and every heading carries a tooltip explaining the setting.
Runtimes appear under the name a teammate knows them by (dsh → "DeepSeek Harness"); the registry name still travels in the click. Below the switch, the plugin names a staged update waiting for the session boundary, a stale update check, and missing required tools.
Every value comes from devkit status --json, which now carries source_type, channel, staged_version, runtimes.{codex,opencode,pi}.{mode,active}, review_runtime.{configured,eligible}, registry_runtimes[].{name,mode}, missing_tools, tools[].{name,tier,installed,outdated} and tools_outdated_check (fresh, stale or missing, from the outdated cache's age) next to enabled, version and stale.
When the icon is wrong
| Menu bar shows | Cause | Fix |
|---|---|---|
| ⚠ "devkit nicht gefunden" | devkit is not in ~/.local/bin, /opt/homebrew/bin or /usr/local/bin | Re-run the installer, or link devkit into ~/.local/bin |
| ⚠ "Status nicht lesbar" | The active version predates devkit status --json | Run devkit sync |
| A notification "devkit off fehlgeschlagen: …" or "devkit config … fehlgeschlagen: …" | The command itself failed, for example while a sync holds the lock | Run the same command in a terminal and read its full output |