aiur-cli 0.0.3 → 0.0.5-nightly.24dcc4d

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,6 +4,10 @@
4
4
 
5
5
  Oversee a fleet of coding agents that **coordinate via events**.
6
6
 
7
+ Aiur watches your issue tracker, dispatches one agent per ticket into its own
8
+ workspace and checkout, and gives you four ways to supervise the fleet instead
9
+ of babysitting individual coding sessions.
10
+
7
11
  > [!WARNING]
8
12
  > **Use at your own risk.** Aiur is an unstable, vibecoded engineering preview for trusted
9
13
  > environments only. It **bypasses all agent permission prompts** and has very few efficiency
@@ -12,72 +16,104 @@ Oversee a fleet of coding agents that **coordinate via events**.
12
16
  > Provided "as is", without warranty of any kind. You assume all risk for any cost, token
13
17
  > spend, data loss, or damage from running it.
14
18
 
15
- ## Install
16
-
17
- ```bash
18
- npm install -g aiur-cli
19
- ```
20
-
21
- Requires [tmux](https://github.com/tmux/tmux) at runtime. Install
22
- [opencode](https://opencode.ai) too for in-pane agent chat.
23
-
24
- When a newer `aiur-cli` is published, a one-line update notice is printed to
25
- stderr (checked in the background at most once a day, never blocking your
26
- command). Set `AIUR_NO_UPDATE_NOTIFIER=1` to silence it; it is also skipped under
27
- CI (`CI=true`).
28
-
29
19
  ## Get started
30
20
 
31
21
  ```bash
22
+ npm install -g aiur-cli # Node.js 18+
23
+
32
24
  cd your-repo
33
- aiur init # interactive setup wizard
34
- aiur # start agents (foreground); use `aiur --bg` to detach
25
+ aiur init # interactive setup wizard
26
+ aiur # start the run
35
27
  ```
36
28
 
37
- `aiur init` scaffolds `.aiurconfig` and provisions the repo. It walks you through:
29
+ `aiur init` scaffolds `.aiur/config` and provisions the repo: tracker and
30
+ repository, agent backends and routing, concurrency and turn limits, the GitHub
31
+ token, and the `agent:*` lifecycle labels. Re-running resumes from your saved
32
+ answers.
33
+
34
+ When setup finishes, label the issues you want worked `agent:todo` and run
35
+ `aiur`.
36
+
37
+ | Requirement | Why |
38
+ | --- | --- |
39
+ | [tmux](https://github.com/tmux/tmux) | Runtime for the TUI and agent panes |
40
+ | [opencode](https://opencode.ai) | In-pane agent chat (provisioned on install) |
41
+ | Claude Code or Codex | The agents themselves |
38
42
 
39
- 1. **Where to store config** — repo-local `./.aiurconfig` or global `~/.aiurconfig`.
40
- 2. **Tracker** — GitHub or Linear, plus the repo.
41
- 3. **Agents & routing** — Claude and/or Codex, optional per-complexity model
42
- routing, and the permission mode.
43
- 4. **Limits** — max concurrent agents, turns, duration, pre-warmed sessions, and
44
- polling interval.
45
- 5. **GitHub token** — to create labels and act as the bot account.
46
- 6. **Labels** — the lifecycle (`agent:*`), complexity, model, and remote-control
47
- labels aiur routes on. Only missing labels are created; a group that already
48
- exists is reported as created and skipped.
43
+ ## The four surfaces
49
44
 
50
- Re-running resumes from your saved answers. When setup finishes, add `agent:todo`
51
- to the issues you want worked and run `aiur`.
45
+ | Surface | What it gives you | How to open it |
46
+ | --- | --- | --- |
47
+ | **CLI** | Scriptable control of a run from any shell | `aiur status`, `aiur pause 142` |
48
+ | **TUI** | Live agent board plus chat panes, in your terminal | `aiur` (foreground) |
49
+ | **Dashboard** | Browser view of the fleet, decisions, and analytics | `http://127.0.0.1:4000` |
50
+ | **Stream Deck** | Physical keys and dictation for the fleet | Separate sidecar, see below |
52
51
 
53
- ## Commands
52
+ ### CLI
54
53
 
55
54
  | Command | What it does |
56
- |---|---|
57
- | `aiur init` | Interactive setup wizard (scaffold `.aiurconfig`) |
58
- | `aiur` | Start the workflow in the foreground (local-only bind) |
59
- | `aiur --bg` | Start a headless BEAM in one detached tmux lifetime session |
60
- | `aiur status` | Show active agents and their state |
61
- | `aiur pause <id…>` / `resume <id…>` | Pause or resume agents by issue ID |
62
- | `aiur stop` | Stop the running session |
63
-
64
- ## Features
65
-
66
- - **Issue Monitoring** — Dispatch agents automatically via GitHub or Linear tickets.
67
- - **Shared Bus** — Agents auto-pub/sub to dependency events, unblocking work early.
68
- - **Optimize Effort** — Story points guide model sizes and skills. Supports Claude and Codex.
69
- - **Take the Wheel** — Drive at any moment via pre-warmed [Opencode](https://opencode.ai) sessions in configurable tmux panes.
70
- - **Smart Alerts** — Customize notifications and sounds when agents finish, stall, or need a decision.
71
- - **Live Dashboard** — Shareable web view of every agent, event, and progress bar.
72
-
73
- Background mode is headless inside Aiur: it skips the interactive agent-list
74
- pane, chat/prewarm panes, and dashboard unless you explicitly opt into a
75
- dashboard port. The launcher still keeps one detached tmux session as the BEAM
76
- lifetime holder. Re-running `aiur --bg` against a live session exits with an
77
- already-running hint; stale tmux state is cleaned up before restart.
55
+ | --- | --- |
56
+ | `aiur init` | Interactive setup wizard |
57
+ | `aiur` | Start the run in the foreground with the TUI |
58
+ | `aiur --bg` | Start a detached headless run, dashboard still served |
59
+ | `aiur status` | Daemon state, active agents, and the current concurrency cap |
60
+ | `aiur alerts --needs-attention` | Unresolved items waiting on you |
61
+ | `aiur pause <id…>` / `aiur resume <id…>` | Pause or resume agents by issue id |
62
+ | `aiur message <id> "<text>"` | Send text into a live agent session |
63
+ | `aiur set max-agents <n>` | Change the concurrency cap without restarting |
64
+ | `aiur --todo <id…> [--only]` | Queue tickets; `--only` dequeues the rest |
65
+ | `aiur stop` / `aiur restart` | Stop the session, or refresh the release and restart |
66
+
67
+ Add `--no-dashboard` to either mode to skip the web listener.
68
+
69
+ ### TUI
70
+
71
+ The foreground run opens a tmux board with one row per ticket, showing runtime,
72
+ turn count, backend, pinned model, and a state glyph. Press `enter` on a row to
73
+ open that agent's chat pane beside the board, `space` to pause or resume, `←`
74
+ and `→` to change the concurrency cap, and `?` for the full keymap.
75
+
76
+ ### Dashboard
77
+
78
+ Served on foreground and `--bg` runs at the host and port in your config,
79
+ `http://127.0.0.1:4000` by default. The launch output prints the real URL.
80
+
81
+ | Page | What it shows |
82
+ | --- | --- |
83
+ | Units | Fleet table, ticket backlog, provider rate meters |
84
+ | Commands | Durable decision inbox: answer, revise, retry delivery |
85
+ | Build Order | Ticket dependency graph and phases |
86
+ | Analytics | Throughput, complexity tiers, and spend over a chosen window |
87
+
88
+ Writable mode is the default and requires `AIUR_DASHBOARD_USERNAME` and
89
+ `AIUR_DASHBOARD_PASSWORD`, even on loopback. Set
90
+ `observability.dashboard_writable: false` for an unauthenticated read-only
91
+ loopback dashboard. Basic Auth is unencrypted, so put a TLS proxy in front of any
92
+ non-loopback bind.
93
+
94
+ ### Stream Deck
95
+
96
+ An Elgato Stream Deck + can drive the fleet: agent keys ranked by urgency, pause
97
+ and resume, a live log surface, and hold-to-dictate voice messages. A browser
98
+ emulator of the same layout is at `/streamdeck` on the dashboard.
99
+
100
+ > The physical sidecar is **experimental** and ships separately from this
101
+ > package, as a Linux x64 archive (glibc 2.28+, systemd user session). It is not
102
+ > installed by `npm install aiur-cli`. See the
103
+ > [Stream Deck guide](https://aiur.team/docs/guide/stream-deck).
104
+
105
+ ## Update notices
106
+
107
+ When a newer `aiur-cli` is published, a one-line notice is printed to stderr,
108
+ checked in the background at most once a day and never blocking your command.
109
+ Set `AIUR_NO_UPDATE_NOTIFIER=1` to silence it; it is skipped under CI.
110
+
111
+ Prerelease builds are published under the `nightly` dist-tag and never reach
112
+ `latest`, so a plain `npm install -g aiur-cli` always gives you a stable release.
113
+ To try one: `npm install -g aiur-cli@nightly`.
78
114
 
79
115
  ---
80
116
 
81
117
  _Command macro, delegate micro, maximize APM._
82
118
 
83
- [github.com/its-everdred/aiur](https://github.com/its-everdred/aiur)
119
+ [github.com/aiur-team/aiur](https://github.com/aiur-team/aiur)
package/bin/aiur.js CHANGED
@@ -50,7 +50,7 @@ function resolveReleaseDir() {
50
50
  fail(
51
51
  `unsupported platform ${process.platform}/${process.arch}. ` +
52
52
  "Supported: darwin/linux on arm64/x64. " +
53
- "See https://github.com/its-everdred/aiur",
53
+ "See https://github.com/aiur-team/aiur",
54
54
  );
55
55
  }
56
56
 
@@ -64,7 +64,7 @@ function resolveReleaseDir() {
64
64
  `platform package "${pkg}" is not installed. ` +
65
65
  "This usually means optional dependencies were skipped " +
66
66
  "(--no-optional, a shared lockfile, or a known npm install bug). " +
67
- "Reinstall aiur-cli, or see https://github.com/its-everdred/aiur",
67
+ "Reinstall aiur-cli, or see https://github.com/aiur-team/aiur",
68
68
  );
69
69
  }
70
70
  throw err;
@@ -162,8 +162,9 @@ function ensureTmux() {
162
162
  }
163
163
  }
164
164
 
165
- // True only when the pinned opencode is on PATH; a wrong version (e.g. 1.17.x,
166
- // which broke the panes) must be replaced, so presence alone isn't enough.
165
+ // True only when the pinned opencode is on PATH; a wrong (e.g. newer,
166
+ // unverified) version must be replaced with the pin, so presence alone
167
+ // isn't enough.
167
168
  function opencodeMatchesPin() {
168
169
  const result = safeSpawn("opencode", ["--version"], { encoding: "utf8" });
169
170
  return !result.error && result.status === 0 && (result.stdout || "").trim() === opencodeVersion();