Name aICentral: README neu, sichtbare Titel umgestellt

README trägt jetzt aICentral mit der Tagline "Get Claude Code organized"
als eigene Zeile, dazu ein Hinweis auf die Unabhängigkeit von Anthropic
(Claude/Claude Code als fremde Marken, rein beschreibend genannt).

Sichtbare Stellen mitgezogen: Hauptfenster-Titel, Überschrift der
Verwaltung, Seitentitel, Linux-Tray-Titel und der AppImage-Hinweis
unter GNOME. Technische Bezeichner bleiben ai-control — Binary,
Identifier, SNI-Id und der Popup-Fenstertitel, auf den KWin-Script und
GNOME-Extension matchen.

Außerdem im README: deploy-macos.sh und deploy-windows.ps1 ergänzt, die
Installationswege pro OS beschrieben (macOS nach ~/Applications, das
Build-Bundle wandert danach nach macos.noindex), Panel-Tabs englisch
benannt und die Zweisprachigkeit der Oberfläche erwähnt.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
marcusH
2026-07-22 09:07:11 +02:00
parent e7f98dd072
commit 6b4afd2bc5
6 changed files with 27 additions and 14 deletions
+22 -9
View File
@@ -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). > All code in this project was generated by Claude (Claude Code).
@@ -8,7 +10,7 @@
## Purpose ## 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. - **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. - **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. | | `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. | | `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 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 ## Screenshots
| Pools | Usage | | 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 ├── kwin-script/ popup placement for KDE Wayland
├── dev.sh development mode (tauri dev) ├── dev.sh development mode (tauri dev)
├── build.sh release build for the current OS (see below) ├── 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: Process roles from one binary:
@@ -138,11 +144,16 @@ Running projects are detected through their terminal processes (`pgrep` for `--t
## Development ## Development
```sh ```sh
./dev.sh # tauri dev with hot reload ./dev.sh # tauri dev with hot reload
./build.sh # release build for the current OS ./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`. 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 ## 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. 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.
+1 -1
View File
@@ -4,7 +4,7 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>ai-control</title> <title>aICentral</title>
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>
+1 -1
View File
@@ -143,7 +143,7 @@ pub(crate) fn main_builder() -> tauri::Builder<tauri::Wry> {
// Fenster im Code statt in tauri.conf.json, damit der Terminal-Prozess // Fenster im Code statt in tauri.conf.json, damit der Terminal-Prozess
// (gleiches Binary, gleiche Config) kein main-Fenster anlegt. // (gleiches Binary, gleiche Config) kein main-Fenster anlegt.
let main_win = tauri::WebviewWindowBuilder::new(app, "main", tauri::WebviewUrl::default()) let main_win = tauri::WebviewWindowBuilder::new(app, "main", tauri::WebviewUrl::default())
.title("ai-control") .title("aICentral")
.inner_size(800.0, 600.0) .inner_size(800.0, 600.0)
// Fenster-Icon (_NET_WM_ICON) — deckt X11-DEs wie XFCE direkt ab, // Fenster-Icon (_NET_WM_ICON) — deckt X11-DEs wie XFCE direkt ab,
// unabhängig von der .desktop-Zuordnung; auf Windows das Titel-/Taskbar-Icon. // unabhängig von der .desktop-Zuordnung; auf Windows das Titel-/Taskbar-Icon.
+1 -1
View File
@@ -51,7 +51,7 @@ pub fn run() {
if std::env::var_os("APPIMAGE").is_some() && platform::is_gnome() { if std::env::var_os("APPIMAGE").is_some() && platform::is_gnome() {
rfd::MessageDialog::new() rfd::MessageDialog::new()
.set_level(rfd::MessageLevel::Warning) .set_level(rfd::MessageLevel::Warning)
.set_title("ai-control") .set_title("aICentral")
.set_description( .set_description(
"Die AppImage-Fassung wird unter GNOME nicht unterstützt: Das Tray-Icon \ "Die AppImage-Fassung wird unter GNOME nicht unterstützt: Das Tray-Icon \
braucht eine GNOME-Shell-Extension, die nur das deb-/rpm-Paket \ braucht eine GNOME-Shell-Extension, die nur das deb-/rpm-Paket \
+1 -1
View File
@@ -16,7 +16,7 @@ impl ksni::Tray for AiControlTray {
"ai-control".into() "ai-control".into()
} }
fn title(&self) -> String { fn title(&self) -> String {
"ai-control".into() "aICentral".into()
} }
fn icon_pixmap(&self) -> Vec<ksni::Icon> { fn icon_pixmap(&self) -> Vec<ksni::Icon> {
self.icon.clone() self.icon.clone()
+1 -1
View File
@@ -51,7 +51,7 @@ async function toggleAutostart() {
<template> <template>
<header data-tauri-drag-region> <header data-tauri-drag-region>
<h1 data-tauri-drag-region>ai-control</h1> <h1 data-tauri-drag-region>aICentral</h1>
<nav> <nav>
<button :class="{ active: tab === 'projects' }" @click="tab = 'projects'"> <button :class="{ active: tab === 'projects' }" @click="tab = 'projects'">
{{ $t("app.projects") }} {{ $t("app.projects") }}