|
|
|
@@ -1,6 +1,8 @@
|
|
|
|
|
# aiCentral
|
|
|
|
|
# aICentral
|
|
|
|
|
|
|
|
|
|
**Get Claude Code organized** — pool, project, and session management for [Claude Code](https://claude.com/claude-code), as a tray app with a built-in terminal, a draft panel, and a per-project document archive. macOS and Linux; Windows support follows. (Repository and binary name: `ai-control`.)
|
|
|
|
|
**Get Claude Code organized**
|
|
|
|
|
|
|
|
|
|
Pool, project, and session management for [Claude Code](https://claude.com/claude-code) — a tray app with a built-in terminal, a draft panel, and a per-project document archive. macOS and Linux; Windows support follows. (Repository and binary name: `ai-control`.)
|
|
|
|
|
|
|
|
|
|
> All code in this project was generated by Claude (Claude Code).
|
|
|
|
|
|
|
|
|
@@ -8,7 +10,7 @@
|
|
|
|
|
|
|
|
|
|
## Purpose
|
|
|
|
|
|
|
|
|
|
Running Claude Code with multiple accounts or credential sets means hitting the right `CLAUDE_CONFIG_DIR` (plus keychain entry) for every session. aiCentral turns that into clicks:
|
|
|
|
|
Running Claude Code with multiple accounts or credential sets means hitting the right `CLAUDE_CONFIG_DIR` (plus keychain entry) for every session. aICentral turns that into clicks:
|
|
|
|
|
|
|
|
|
|
- **Pools** — named credential sets (OAuth login or API key) under `~/.config/ai-control/pools/<pool>`. Each pool is a self-contained Claude config directory with its own keychain entry.
|
|
|
|
|
- **Projects** — arbitrary directories carrying their own identity in `<project>/.ai-control/config.json` (UUID, display name, terminal settings, archive home — this file syncs with the project). The machine-local registry `~/.config/ai-control/projects.json` maps that UUID to the directory and the assigned pool; paths under home are stored as `~/…` and therefore stable across machines.
|
|
|
|
@@ -31,10 +33,12 @@ The app ships an MCP stdio server (`ai-control --mcp-panel`, server key `text-pa
|
|
|
|
|
| `show_archive` | Render the archive overview as a wiki page — documents grouped by folder, with descriptions and clickable tag links; with `tag`, that tag's page. |
|
|
|
|
|
| `search_archive` | FTS5 full-text search over the archive (words, "phrases", prefix*); hits appear as tiles in the panel. |
|
|
|
|
|
|
|
|
|
|
The panel docks into the terminal window and can be detached into its own window. The header tab bar switches between **Befehle** (command tiles), the current **document**, **Wiki**, and **Suche** (live search, `#tag` filtering); without a configured archive home the archive tabs stay hidden. The draft's title is taken from its first heading and is editable, as is the content. Spell checking follows `spellcheckLang` (per-text override in the panel).
|
|
|
|
|
The panel docks into the terminal window and can be detached into its own window. The header tab bar switches between **Commands** (command tiles), the current **document**, **Wiki**, and **Search** (live search, `#tag` filtering); without a configured archive home the archive tabs stay hidden. The draft's title is taken from its first heading and is editable, as is the content. Spell checking follows `spellcheckLang` (per-text override in the panel).
|
|
|
|
|
|
|
|
|
|
The archive lives in the project's `archiveHome` (set in `.ai-control/config.json`); documents are plain Markdown files with frontmatter — no database, the search index is built in-memory per query.
|
|
|
|
|
|
|
|
|
|
The interface speaks English and German across all windows; the language follows the browser locale and can be switched in the app.
|
|
|
|
|
|
|
|
|
|
## Screenshots
|
|
|
|
|
|
|
|
|
|
| Pools | Usage |
|
|
|
|
@@ -113,7 +117,9 @@ Deleting a project is scoped in three stages, each preceded by a preview of the
|
|
|
|
|
├── kwin-script/ popup placement for KDE Wayland
|
|
|
|
|
├── dev.sh development mode (tauri dev)
|
|
|
|
|
├── build.sh release build for the current OS (see below)
|
|
|
|
|
└── deploy-linux.sh install the freshest local bundle (rpm/deb)
|
|
|
|
|
├── deploy-linux.sh install the freshest local bundle (rpm/deb)
|
|
|
|
|
├── deploy-macos.sh install the fresh .app into ~/Applications
|
|
|
|
|
└── deploy-windows.ps1 run the freshest NSIS installer
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Process roles from one binary:
|
|
|
|
@@ -138,11 +144,16 @@ Running projects are detected through their terminal processes (`pgrep` for `--t
|
|
|
|
|
## Development
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
./dev.sh # tauri dev with hot reload
|
|
|
|
|
./build.sh # release build for the current OS
|
|
|
|
|
./dev.sh # tauri dev with hot reload
|
|
|
|
|
./build.sh # release build for the current OS
|
|
|
|
|
./deploy-macos.sh # …then install it (pick the script for your OS)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
`build.sh` picks the bundles by platform: macOS `.app` + DMG (the bundle lands in `src-tauri/target/release/bundle/macos.noindex/`, unregistered from Launch Services so Spotlight only finds the installed copy), Linux deb + rpm, Windows NSIS. `deploy-linux.sh` installs the freshest locally built bundle via `rpm`/`dpkg`.
|
|
|
|
|
`build.sh` picks the bundles by platform: macOS `.app` + DMG, Linux deb + rpm, Windows NSIS. Installing is the job of the matching deploy script:
|
|
|
|
|
|
|
|
|
|
- **`deploy-macos.sh`** — installs the fresh bundle into `~/Applications` (replacing the previous copy) and registers it with Launch Services. The build output is then moved into `bundle/macos.noindex/` and unregistered, so Spotlight and the launcher only ever find the installed copy. It refuses to run while `ai-control` is still running.
|
|
|
|
|
- **`deploy-linux.sh`** — installs the freshest local bundle via `rpm`/`dpkg`.
|
|
|
|
|
- **`deploy-windows.ps1`** — runs the freshest NSIS installer.
|
|
|
|
|
|
|
|
|
|
Build dependencies on Linux: `webkit2gtk-4.1`, `libgtk-3`, `libayatana-appindicator3`, `librsvg2`, `patchelf`.
|
|
|
|
|
|
|
|
|
@@ -179,7 +190,9 @@ Prerequisites: Rust (stable), Node.js/npm. `dev.sh`/`build.sh` expect `CARGO_HOM
|
|
|
|
|
|
|
|
|
|
## Claude and Anthropic licensing
|
|
|
|
|
|
|
|
|
|
aiCentral is pool management only — it does not change, extend, or circumvent Anthropic's licensing in any way. Using Claude Code through aiCentral is subject to the same Anthropic terms as running it directly.
|
|
|
|
|
aICentral is an independent open-source project, not affiliated with, sponsored by, or endorsed by Anthropic. Claude and Claude Code are trademarks of Anthropic; they are named here only to describe what this app works with.
|
|
|
|
|
|
|
|
|
|
aICentral is pool management only — it does not change, extend, or circumvent Anthropic's licensing in any way. Using Claude Code through aICentral is subject to the same Anthropic terms as running it directly.
|
|
|
|
|
|
|
|
|
|
For that reason the app stores no OAuth tokens itself: with an OAuth pool, the first session of a project on that pool goes through the regular Anthropic login (`/login`, browser, against your subscription), run by Claude Code itself. Credentials live where Claude Code puts them — in the macOS Keychain or the freedesktop Secret Service, one entry per pool.
|
|
|
|
|
|
|
|
|
|