AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
One folder, many repositories. Review your changes with Claude before you commit.
Developer toolsJavaScript · HTMLGitHub @MartinRovangOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Nimbus: a quiet git IDE. One workfolder, many repos, AI self-review with Claude Code. Tauri + React, Linux.
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
A quiet git IDE: one workfolder, many repos. Tauri 2 (Rust) + React.
Projects group repos around a goal: Nimbus makes a project folder with the repos linked in and a CLAUDE.md, and Claude works through Start → Development → Testing → Review → Merge, reporting on a GitHub issue or an HTML page. Site:Read the full README ↗A quiet git IDE: one workfolder, many repos. Tauri 2 (Rust) + React.
Projects group repos around a goal: Nimbus makes a project folder with the repos linked in and a CLAUDE.md, and Claude works through Start → Development → Testing → Review → Merge, reporting on a GitHub issue or an HTML page. Site: https://martinrovang.github.io/nimbus/
Experiments are projects where Claude loops on one number, after karpathy/autoresearch: you name a repo, the files it may edit, a command and how to read a metric from its output. Claude changes the code, runs it, keeps the commit when the number improves and undoes it when it doesn't, and the project page charts every try. It may edit those files, run that command and commit or reset in that repo without asking; anything else still asks you.
Writing projects are for texts meant to be read: documentation, a guide, an article, the pages of a frontend. Claude writes and revises with you, one commit per revision, and the project page shows the text as tracked changes, word by word: everything against main, or one commit at a time. It covers Markdown and other text files, or wherever you tell Claude the text lives. Claude may still change code when the text needs it; that shows in the Diff tab.
curl -fsSL https://raw.githubusercontent.com/MartinRovang/nimbus/main/get.sh | sh
Linux x86_64, no sudo. Puts nimbus (and the short nb) in ~/.local/bin and adds an app-menu entry and a desktop icon; Nimbus keeps itself up to date after that. Needs WebKitGTK 4.1 (sudo apt install libwebkit2gtk-4.1-0 on Debian/Ubuntu). From a checkout: ./install.sh builds and installs the same way.
git; gh for GitHub (the first-run wizard signs you in); claude (Claude Code) for AI self-review.~/work), stored in ~/.config/nimbus/workfolder; NIMBUS_WORKFOLDER overrides it.~/.config/nimbus/sandbox (Claude signs in there once); your tools, shell setup and Claude setup are read-only inside. No SSH keys or gh login in there: push from the source control panel. Extra bwrap arguments go in ~/.config/nimbus/sandbox-args, e.g. --ro-bind ~/.pyenv ~/.pyenv. A repo added later is seen by terminals opened after that.claude -p --safe-mode in the repo with read-only tools and a JSON contract; follow-up questions resume the same session. Nothing is posted unless you press Post.github.com/MartinRovang/nimbus/releases/latest/download/latest.json, verifies the signature and replaces itself. To release, bump VERSION, add its section to CHANGELOG.md and push to main; the release workflow builds, signs and publishes it (skips versions already tagged). Signing key: ~/.tauri/nimbus.key, stored as the repo secret TAURI_SIGNING_PRIVATE_KEY; keep it, losing it means installed copies can no longer update.Dev: npm run tauri dev · tests: npm test, cd src-tauri && cargo test (-- --ignored also runs a real Claude review).
A plugin is a folder in ~/.config/nimbus/plugins/<id>/ with a plugin.json (name, version, description, main, default index.js) and an ES module exporting activate(Nimbus). Settings → Plugins lists them, switches them on and off and opens the folder. plugins/example uses every call:
| Call | Does |
|---|---|
nimbus.addCommand({ label, icon?, hint?, run }) | adds a command palette entry |
nimbus.addMenuItem("repo" | "file" | "editor", { label, icon?, run({ repo, path }) }) | adds a right-click entry |
nimbus.addStatusItem({ text, icon?, title?, run? }) | adds status bar text; returns { update(fields), remove() } |
nimbus.addTheme({ id, name, dark, vars }) | adds a theme (same variables as the built-in Nimbus theme in src/themes.js) |
nimbus.on("repo" | "file" | "commit" | "review", fn) | runs fn when that happens |
nimbus.state() | { root, repo, file } right now |
nimbus.git(repo, ...args), nimbus.gh(repo, ...args) | runs git / gh in a repo, resolves to stdout |
nimbus.readFile(repo, path), nimbus.openFile(repo, path) | reads / opens a file |
nimbus.terminal(cmd, repo?) | opens a terminal tab and runs cmd |
nimbus.toast(text, isError?) | shows a message |
Icons are Phosphor class names such as ph-rocket-launch. Plugins run with the same access as Nimbus itself (your files, git, gh, a shell), so only install ones you trust.