acstack 0.0.0-stage → 0.47.1
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/.claude-plugin/plugin.json +19 -0
- package/LICENSE +21 -0
- package/README.md +389 -2
- package/THIRD_PARTY_NOTICES +14 -0
- package/TROUBLESHOOTING.md +225 -0
- package/agents/codex/frontend-verifier.toml +352 -0
- package/agents/codex/task-checker.toml +345 -0
- package/agents/codex/task-executor.toml +157 -0
- package/agents/codex/test-writer.toml +149 -0
- package/agents/frontend-verifier.md +351 -0
- package/agents/task-checker.md +344 -0
- package/agents/task-executor.md +156 -0
- package/agents/test-writer.md +148 -0
- package/assets/playwriter-bridge/build-launcher.ps1 +32 -0
- package/assets/playwriter-bridge/doctor.ps1 +450 -0
- package/assets/playwriter-bridge/launcher-src.cs +131 -0
- package/assets/playwriter-bridge/opener.js +330 -0
- package/assets/playwriter-bridge/opener.ps1 +63 -0
- package/assets/playwriter-bridge/register-tasks.ps1 +328 -0
- package/assets/playwriter-bridge/relay.ps1 +50 -0
- package/assets/playwriter-bridge/stop.ps1 +125 -0
- package/assets/playwriter-bridge/sync.ps1 +271 -0
- package/assets/playwriter-bridge/tunnel.ps1 +325 -0
- package/assets/playwriter-bridge/vm-free-port.sh +166 -0
- package/assets/terminal-workspace/client-keybindings.md +87 -0
- package/assets/terminal-workspace/config.example.yaml +334 -0
- package/assets/terminal-workspace/setup.sh +4404 -0
- package/cli/README.md +47 -0
- package/cli/bin/acstack.js +3 -0
- package/cli/dist/index.js +25984 -0
- package/cli/dist/index.js.map +7 -0
- package/cli/package.json +59 -0
- package/docs/adr/0001-ste-writing-standard.md +16 -0
- package/docs/adr/0002-version-gate-not-auto-bump.md +35 -0
- package/docs/adr/0003-handoff-ack-command.md +19 -0
- package/docs/adr/0004-dev-setup-per-host.md +13 -0
- package/docs/adr/0005-two-orchestrators-per-host.md +25 -0
- package/docs/adr/0006-document-opener-service.md +89 -0
- package/docs/adr/0007-lead-check-reads-the-transcript.md +87 -0
- package/docs/adr/0008-cli-audits-skill-interviews.md +37 -0
- package/docs/adr/0009-verify-the-write-not-the-writer.md +51 -0
- package/docs/adr/0010-promote-dev-to-main-by-fast-forward.md +115 -0
- package/docs/adr/0011-node-header-is-the-edge-encoding.md +20 -0
- package/docs/adr/0012-node-kind-is-a-closed-set-of-five.md +31 -0
- package/docs/adr/0013-the-diagram-renderer-is-pure.md +23 -0
- package/docs/adr/0014-reading-a-node-hides-its-generated-diagram.md +29 -0
- package/docs/adr/0015-a-node-id-links-to-its-issue-through-an-anchor.md +37 -0
- package/docs/adr/0016-the-map-root-carries-no-status-of-its-own.md +21 -0
- package/docs/adr/0017-call-impeccable-copy-only-its-questions.md +13 -0
- package/docs/adr/index.md +17 -0
- package/docs/config-reference.md +572 -0
- package/docs/dev-setups.md +164 -0
- package/docs/migrate-0.8.md +28 -0
- package/docs/playwriter-bridge-windows.md +15 -0
- package/docs/terminal-workspace-keys.md +137 -0
- package/docs/terminal-workspace.md +1780 -0
- package/docs/workflows.md +309 -0
- package/hooks/ac-writing-style-reminder.sh +86 -0
- package/hooks/context-pressure.sh +583 -0
- package/hooks/hooks.json +50 -0
- package/hooks/session-start-handoff.sh +165 -0
- package/hooks/session-start.sh +214 -0
- package/orchestrator/AGENTS.md +532 -0
- package/output-styles/ac-writing-style.md +286 -0
- package/package.json +50 -4
- package/pi/agents/frontend-verifier.md +357 -0
- package/pi/agents/task-checker.md +348 -0
- package/pi/agents/task-executor.md +160 -0
- package/pi/agents/test-writer.md +154 -0
- package/pi/extension.ts +723 -0
- package/profiles/fullstack-python.yaml +29 -0
- package/profiles/node-typescript.yaml +23 -0
- package/profiles/python.yaml +24 -0
- package/skills/archive/SKILL.md +160 -0
- package/skills/bootstrap/SKILL.md +109 -0
- package/skills/bridge/HANDOFF.md +93 -0
- package/skills/bridge/SKILL-VM.md +292 -0
- package/skills/bridge/SKILL-WINDOWS.md +526 -0
- package/skills/bridge/SKILL.md +121 -0
- package/skills/browser-verify/SKILL.md +229 -0
- package/skills/code-review/SKILL.md +44 -0
- package/skills/commit/SKILL.md +106 -0
- package/skills/compact-and-continue/SKILL.md +241 -0
- package/skills/explore/SKILL.md +149 -0
- package/skills/grilling/SKILL.md +134 -0
- package/skills/handoff/SKILL.md +250 -0
- package/skills/handoff/launch-herdr.md +197 -0
- package/skills/handoff/launch-without-herdr.md +30 -0
- package/skills/handoff/lead-check.md +59 -0
- package/skills/handoff/outcomes.md +162 -0
- package/skills/handoff/running-agent.md +50 -0
- package/skills/handoff/watch.md +115 -0
- package/skills/host/SKILL.md +247 -0
- package/skills/host/detect-host.sh +297 -0
- package/skills/host/herdr.md +79 -0
- package/skills/host/install-herdr-block.sh +467 -0
- package/skills/host/install-orca.sh +512 -0
- package/skills/host/notes.md +97 -0
- package/skills/host/orca.md +160 -0
- package/skills/host/questions.md +163 -0
- package/skills/host/report.md +42 -0
- package/skills/implement/SKILL.md +230 -0
- package/skills/implement/decision-log.md +62 -0
- package/skills/implement/design-pass.md +32 -0
- package/skills/implement/relaxed-tdd.md +28 -0
- package/skills/map/SKILL.md +250 -0
- package/skills/map/frontend.md +227 -0
- package/skills/map/trackers/files.md +74 -0
- package/skills/map/trackers/github.md +180 -0
- package/skills/map/visuals.md +387 -0
- package/skills/new-worktree/SKILL.md +155 -0
- package/skills/new-worktree/detect-orchestrator.sh +328 -0
- package/skills/new-worktree/detect-orchestrator.test.sh +894 -0
- package/skills/new-worktree/herdr.md +84 -0
- package/skills/new-worktree/orca.md +101 -0
- package/skills/pre-commit-review/SKILL.md +242 -0
- package/skills/pre-commit-review/auto-fix.md +19 -0
- package/skills/pre-commit-review/interactive.md +35 -0
- package/skills/quick-fix/SKILL.md +125 -0
- package/skills/record-context/SKILL.md +106 -0
- package/skills/setup/SKILL.md +250 -0
- package/skills/setup/browser.md +123 -0
- package/skills/setup/design-review.md +97 -0
- package/skills/setup/first-run.md +114 -0
- package/skills/setup/report.md +68 -0
- package/skills/setup/row-fixes.md +196 -0
- package/skills/setup/terminal-workspace.md +153 -0
- package/skills/sync/SKILL.md +171 -0
- package/skills/teardown-worktree/SKILL.md +245 -0
- package/skills/teardown-worktree/detector.md +39 -0
- package/skills/teardown-worktree/herdr.md +113 -0
- package/skills/teardown-worktree/orca.md +61 -0
- package/skills/terminal-workspace/SKILL.md +249 -0
- package/skills/terminal-workspace/components.md +36 -0
- package/skills/terminal-workspace/config-choices.md +69 -0
- package/skills/terminal-workspace/emulator-keys.md +48 -0
- package/skills/terminal-workspace/headless-clipboard.md +175 -0
- package/skills/terminal-workspace/turn-off-and-update.md +104 -0
- package/skills/test-conventions/SKILL.md +59 -0
- package/skills/visual-docs/SKILL.md +246 -0
- package/skills/writing/SKILL.md +231 -0
- package/skills/writing/examples.md +153 -0
- package/skills/writing/vocabulary.md +96 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# Dev setups
|
|
2
|
+
|
|
3
|
+
*One file per machine records what that machine has installed. A skill never has to guess.*
|
|
4
|
+
|
|
5
|
+
You run ACStack on more than one machine. Those machines are not the same.
|
|
6
|
+
|
|
7
|
+
- **One has herdr installed, another has Orca, a third has neither**
|
|
8
|
+
- **One can drive a real Chrome window**
|
|
9
|
+
- **Another has no display at all**
|
|
10
|
+
- **A skill cannot guess which**
|
|
11
|
+
- Each machine answers nine questions once, with `/acstack:host` and `/acstack:setup`
|
|
12
|
+
- **The answers live in `~/.config/acstack/config.json`** as `host.*` keys
|
|
13
|
+
- **The worktree skills and the frontend verifier read them** instead of probing
|
|
14
|
+
|
|
15
|
+
Four terms first.
|
|
16
|
+
|
|
17
|
+
- **A dev setup** is the machine-level tools a session runs inside
|
|
18
|
+
- **An axis** is one setting of it, recorded as one `host.*` key
|
|
19
|
+
- **An orchestrator** owns terminal panes and git worktrees: herdr or Orca
|
|
20
|
+
- **A checkout** is one git worktree directory
|
|
21
|
+
|
|
22
|
+
```mermaid
|
|
23
|
+
flowchart TD
|
|
24
|
+
HOST["Describe this machine once<br/>(/acstack:host - section 4)"] --> AXES["Every axis, and what reads it<br/>(host.* in ~/.config/acstack/config.json - section 1)"]
|
|
25
|
+
AXES --> ORCH["Orchestrator axes<br/>(host.orchestrators.* - section 2)"]
|
|
26
|
+
AXES --> BROW["Browser axes<br/>(host.browser.* - section 3)"]
|
|
27
|
+
AXES --> OPT["Optional axes<br/>(preview, terminal workspace, element picker, Orca topology)"]
|
|
28
|
+
ORCH -->|"pick the worktree tool"| WT["new-worktree, teardown-worktree"]
|
|
29
|
+
BROW -->|"pick the browser"| FV["frontend-verifier"]
|
|
30
|
+
PROJ["What this project prefers<br/>(frontend.browser.* in acstack/project.yaml)"] --> FV
|
|
31
|
+
OPT -.->|"nothing reads them yet"| CHK["acstack config check lists them"]
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 1. Every axis, and what reads it
|
|
35
|
+
|
|
36
|
+
*Nine `host.*` axes describe the machine. Three `frontend.browser.*` keys state what one project would like.*
|
|
37
|
+
|
|
38
|
+
| Axis | Values | Required | Stored in | What changes behaviour on it |
|
|
39
|
+
| --- | --- | --- | --- | --- |
|
|
40
|
+
| `host.orchestrators.herdr` | `true`, `false` | yes | global config | `detect-orchestrator.sh`, so both worktree skills; check 2 runs `herdr api snapshot` |
|
|
41
|
+
| `host.orchestrators.orca` | `true`, `false` | yes | global config | the same detector; check 2 runs `orca-ide status --json` |
|
|
42
|
+
| `host.browser.remote` | `true`, `false` | yes, with a frontend | global config | `acstack config browser-mode`, so `frontend-verifier`; checks 3 and 4 |
|
|
43
|
+
| `host.browser.headless` | `true`, `false` | yes, with a frontend | global config | the same |
|
|
44
|
+
| `host.browser.local` | `true`, `false` | yes, with a frontend | global config | the same |
|
|
45
|
+
| `host.preview.tailscale_serve` | `true`, `false` | no | global config | nothing; check 5 lists it |
|
|
46
|
+
| `host.terminal_workspace` | `true`, `false` | no | global config | `/acstack:setup` offers the workspace once, and never asks again after this is set |
|
|
47
|
+
| `host.element_picker` | `stagewise`, `orca-design-mode`, `none` | no | global config | nothing; check 5 lists it |
|
|
48
|
+
| `host.orca.topology` | `local`, `remote` | no | global config | nothing; check 5 marks it inert unless `host.orchestrators.orca` is `true` |
|
|
49
|
+
| `frontend.browser.mode` | `remote`, `headless`, `local` | no | `acstack/project.yaml` | the preference, weighed against the three host axes |
|
|
50
|
+
| `frontend.browser.cdp_port` | a port number | no | `acstack/project.yaml` | `frontend-verifier`; defaults to `19988` for `remote` and `9555` otherwise |
|
|
51
|
+
| `frontend.browser.fallback` | `none`, or any word | no | `acstack/project.yaml` | only `none` acts: it forbids a stand-in mode |
|
|
52
|
+
|
|
53
|
+
Where the file lives, and how the CLI reads a value:
|
|
54
|
+
|
|
55
|
+
- The global config is a JSON file at `~/.config/acstack/config.json`
|
|
56
|
+
- It moves under `$XDG_CONFIG_HOME` when you set that variable
|
|
57
|
+
- Run `~/.claude/acstack/bin/acstack config path` for the real location
|
|
58
|
+
- `acstack config show` prints every axis with the project's settings
|
|
59
|
+
- The CLI matches an enum value case-sensitively
|
|
60
|
+
- `stagewise` works, and `Stagewise` does not
|
|
61
|
+
- The CLI matches a boolean loosely: `true`, `yes`, and `on` all mean true, and `false`, `no`, and `off` all mean false
|
|
62
|
+
|
|
63
|
+
## 2. Orchestrator axes
|
|
64
|
+
|
|
65
|
+
*Each orchestrator is its own yes-or-no. Declared means installed. The environment says which one hosts this session.*
|
|
66
|
+
|
|
67
|
+
- A machine can have both installed, one, or neither
|
|
68
|
+
- An answer about herdr says nothing about Orca
|
|
69
|
+
- Answering no to both is a real answer
|
|
70
|
+
- The worktree skills then use plain git under `.claude/worktrees`
|
|
71
|
+
- `skills/new-worktree/detect-orchestrator.sh` prints six lines: `declared_herdr`, `declared_orca`, `detected`, `active`, `owner`, and `warning`
|
|
72
|
+
- `detected` reads the markers an orchestrator sets in its terminals
|
|
73
|
+
- `active` always equals it
|
|
74
|
+
- herdr sets `HERDR_ENV` and `HERDR_PANE_ID`
|
|
75
|
+
- orca sets `ORCA_PANE_KEY`
|
|
76
|
+
- `owner` comes from the checkout's path root, not from the session
|
|
77
|
+
- orca owns `~/orca/workspaces/<repo>/`
|
|
78
|
+
- herdr owns everything under its worktree root, `~/.herdr/worktrees` by default
|
|
79
|
+
- Any other path is plain git
|
|
80
|
+
- The session's host creates a checkout
|
|
81
|
+
- The checkout's owner removes it
|
|
82
|
+
|
|
83
|
+
**herdr.**
|
|
84
|
+
|
|
85
|
+
- `new-worktree` creates the checkout, then moves this pane into the new workspace with `herdr pane move`
|
|
86
|
+
- The session then sits in the sidebar row for the worktree it works in
|
|
87
|
+
- One limit matters: a herdr server serves one client at a time
|
|
88
|
+
|
|
89
|
+
**Orca.**
|
|
90
|
+
|
|
91
|
+
- The Linux executable is `orca-ide`
|
|
92
|
+
- Some installs put it on `PATH` as plain `orca`
|
|
93
|
+
- orca runs as a desktop application, or as a headless `orca serve` that the user views through a paired client
|
|
94
|
+
- `host.orca.topology` records which one
|
|
95
|
+
- Five limits matter
|
|
96
|
+
- No command moves a running terminal into a worktree
|
|
97
|
+
- The session changes directory instead
|
|
98
|
+
- `worktree rm` always deletes the branch, and removes a checkout with live agents in it
|
|
99
|
+
- `teardown-worktree` therefore reads `agents[]` and `liveTerminalCount` from `worktree ps --json` first
|
|
100
|
+
- Nobody has tested Claude Code Agent Teams under `orca serve`
|
|
101
|
+
- Upstream issue 11739 reports that the tmux-compatibility layer can break them
|
|
102
|
+
- Nobody has tested Design Mode either
|
|
103
|
+
- It needs the browser pane on the developer's own machine
|
|
104
|
+
- The Orca web client cannot create terminals behind a reverse proxy
|
|
105
|
+
- Pair a desktop or phone client instead
|
|
106
|
+
- Upstream issue 9047 tracks it
|
|
107
|
+
|
|
108
|
+
Neither tool sees the other's sessions.
|
|
109
|
+
|
|
110
|
+
- orca and a paired phone list herdr checkouts only after you turn on one switch per repository
|
|
111
|
+
- orca's desktop application holds that switch, named "show in worktree list"
|
|
112
|
+
- No command sets it
|
|
113
|
+
|
|
114
|
+
## 3. Browser axes
|
|
115
|
+
|
|
116
|
+
*The three modes are not alternatives. A machine can offer any combination. Each one needs something different.*
|
|
117
|
+
|
|
118
|
+
- **remote** drives a real browser on the developer's own machine, over the Playwriter bridge
|
|
119
|
+
- Something must answer HTTP on the bridge's port, `19988`
|
|
120
|
+
- The bridge listens there whatever the project says, so check 3 knocks on `19988` even for a project with no frontend
|
|
121
|
+
- Only a project that sets `frontend.browser.mode: remote` moves that port, with `frontend.browser.cdp_port`
|
|
122
|
+
- **headless** launches headless Chromium here and needs no display
|
|
123
|
+
- It needs `chromium`, `chromium-browser`, `google-chrome`, or `google-chrome-stable` on `PATH`
|
|
124
|
+
- **local** launches a visible browser here
|
|
125
|
+
- It needs one of those binaries and a graphical display
|
|
126
|
+
|
|
127
|
+
How the two sides meet:
|
|
128
|
+
|
|
129
|
+
- The host declares what works
|
|
130
|
+
- The project states a preference in `frontend.browser.mode`
|
|
131
|
+
- The first mode the host does declare stands in, when the host does not declare that mode
|
|
132
|
+
- The order is remote, headless, local
|
|
133
|
+
- Setting `frontend.browser.fallback` to `none` refuses any stand-in and fails instead
|
|
134
|
+
- `~/.claude/acstack/bin/acstack config browser-mode` applies those rules and prints the answer with its reason
|
|
135
|
+
- The frontend verifier runs that command instead of choosing for itself
|
|
136
|
+
|
|
137
|
+
## 4. Describe this machine once
|
|
138
|
+
|
|
139
|
+
*Eight steps. Each install plans before it touches anything.*
|
|
140
|
+
|
|
141
|
+
1. Run `/acstack:host`. It detects what is here, then asks about every axis.
|
|
142
|
+
2. Detection never decides a required axis. It only pre-fills the recommended answer.
|
|
143
|
+
3. On Linux the skill offers two installs. Each one plans first and waits for approval.
|
|
144
|
+
4. `install-orca.sh --plan` lists the steps, and `--apply` runs them. It installs the AppImage, the `orca-ide` and `orca` symlinks, and a systemd user unit.
|
|
145
|
+
5. The apply prints the pairing URL only when it started or restarted the server. The journal must already hold the readiness line. Otherwise it prints the `journalctl` command to run by hand.
|
|
146
|
+
6. `install-herdr-block.sh --plan` lists the steps, and `--apply` writes the block. The block goes into `~/.config/herdr/config.toml`. It names the directory herdr creates worktrees under.
|
|
147
|
+
7. Run `~/.claude/acstack/bin/acstack config check`. It prints five numbered checks.
|
|
148
|
+
8. Read its exit code. It exits 2 on an unset required axis, 1 on any other failure, and 0 when everything passes.
|
|
149
|
+
|
|
150
|
+
This skill asks eight of the nine axes. `/acstack:setup` asks the ninth, at
|
|
151
|
+
the end of its own run, and writes `host.terminal_workspace` from the answer.
|
|
152
|
+
|
|
153
|
+
- The offer comes last on purpose: the workspace installs binaries, and nothing in ACStack needs it
|
|
154
|
+
- Either answer ends the offer for good
|
|
155
|
+
- After a `true` answer, `/acstack:setup` re-checks this machine on every later run and offers `upgrade` when a tool or a component has moved on
|
|
156
|
+
- The key records the answer, never the install: `true` means the user said yes, not that the workspace is on the machine
|
|
157
|
+
- `/acstack:terminal-workspace` is the only thing that installs it, and only you can start it
|
|
158
|
+
|
|
159
|
+
Four things stay yours.
|
|
160
|
+
|
|
161
|
+
- Log in to Tailscale
|
|
162
|
+
- Connect the Playwriter bridge
|
|
163
|
+
- Pair a client to Orca
|
|
164
|
+
- Turn on "show in worktree list" for each repository in Orca's desktop application
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Migrating to ACStack 0.8.0
|
|
2
|
+
|
|
3
|
+
*Delete one `@import` line from your project `CLAUDE.md`, and nothing else.*
|
|
4
|
+
|
|
5
|
+
A project initialized before version 0.8.0 holds a line like this in its `CLAUDE.md`:
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
@import /home/<user>/.claude/plugins/cache/ac8318740-plugins/acstack/<version>/CLAUDE.md
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
As of 0.8.0 a SessionStart hook loads the orchestrator instructions, and it always resolves to the currently installed plugin version.
|
|
12
|
+
|
|
13
|
+
## 1. Why remove it
|
|
14
|
+
|
|
15
|
+
*Three reasons, and any one of them is enough.*
|
|
16
|
+
|
|
17
|
+
- **Silent staleness** – the path pins your project to a single plugin version
|
|
18
|
+
- An upgrade leaves the `@import` pointing at old orchestrator rules
|
|
19
|
+
- **Time-bomb breakage** – Claude Code cleans an orphaned plugin version out of its cache after 7 days, and the pinned path then 404s
|
|
20
|
+
- **Duplication** – leaving the line in place under 0.8.0 or later loads the same content twice
|
|
21
|
+
|
|
22
|
+
## 2. What to do
|
|
23
|
+
|
|
24
|
+
1. Open your project's `CLAUDE.md`.
|
|
25
|
+
2. Remove any line matching `@import .../plugins/cache/ac8318740-plugins/acstack/<version>/CLAUDE.md`.
|
|
26
|
+
3. Save the file.
|
|
27
|
+
|
|
28
|
+
The hook loads ACStack's orchestrator instructions next time you start a session in that project. Nothing else changes.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Playwriter bridge, Windows laptop setup
|
|
2
|
+
|
|
3
|
+
*This document has moved. The `bridge` skill covers the bridge now.*
|
|
4
|
+
|
|
5
|
+
Where each part went:
|
|
6
|
+
|
|
7
|
+
- **Entry point**, platform detection, and the handoff convention: [`../skills/bridge/SKILL.md`](../skills/bridge/SKILL.md)
|
|
8
|
+
- **Windows runbook**, what used to live in this file: [`../skills/bridge/SKILL-WINDOWS.md`](../skills/bridge/SKILL-WINDOWS.md)
|
|
9
|
+
- **Linux and dev-VM runbook**: [`../skills/bridge/SKILL-VM.md`](../skills/bridge/SKILL-VM.md)
|
|
10
|
+
- **Cross-device handoff format**: [`../skills/bridge/HANDOFF.md`](../skills/bridge/HANDOFF.md)
|
|
11
|
+
|
|
12
|
+
The scripts still ship under `plugins/acstack/assets/playwriter-bridge/`.
|
|
13
|
+
|
|
14
|
+
- `stop.ps1`, `doctor.ps1`, and `vm-free-port.sh` are new since this relocation
|
|
15
|
+
- The Windows runbook covers their use
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Terminal workspace keys
|
|
2
|
+
|
|
3
|
+
The keys worth memorising, and nothing else. Run `/acstack:terminal-workspace` to install what they drive.
|
|
4
|
+
|
|
5
|
+
Two layers:
|
|
6
|
+
|
|
7
|
+
- **`alt`** reaches herdr from anywhere, including from inside a running tool
|
|
8
|
+
- **`prefix`** is `ctrl+b`, then the key, for what you press rarely
|
|
9
|
+
|
|
10
|
+
## Move around
|
|
11
|
+
|
|
12
|
+
| Key | Does |
|
|
13
|
+
|---|---|
|
|
14
|
+
| `alt+h` `alt+j` `alt+k` `alt+l` | move between panes |
|
|
15
|
+
| `alt+1` to `alt+9` | jump to an agent |
|
|
16
|
+
| `alt+n` / `alt+u` | next / previous agent |
|
|
17
|
+
| `alt+left` / `alt+right` | previous / next tab |
|
|
18
|
+
| `alt+up` / `alt+down` | previous / next workspace |
|
|
19
|
+
| `alt+a` | last pane |
|
|
20
|
+
| `alt+z` | zoom this pane |
|
|
21
|
+
| `alt+s` | toggle the sidebar |
|
|
22
|
+
|
|
23
|
+
## Make things
|
|
24
|
+
|
|
25
|
+
| Key | Does |
|
|
26
|
+
|---|---|
|
|
27
|
+
| `alt+e` | split vertical |
|
|
28
|
+
| `alt+minus` | split horizontal |
|
|
29
|
+
| `alt+c` | new tab |
|
|
30
|
+
| `alt+w` | new workspace |
|
|
31
|
+
| `alt+r` | new worktree |
|
|
32
|
+
| `prefix+t` | go to a pane by name |
|
|
33
|
+
|
|
34
|
+
## Open a tool
|
|
35
|
+
|
|
36
|
+
Add `shift` to any of these to open it in a full tab instead of a popup.
|
|
37
|
+
|
|
38
|
+
| Key | Opens | For |
|
|
39
|
+
|---|---|---|
|
|
40
|
+
| `alt+f` | diffnav | what changed on this branch |
|
|
41
|
+
| `alt+x` | diffnav picker | choose what to compare |
|
|
42
|
+
| `alt+g` | lazygit | stage, commit, push |
|
|
43
|
+
| `alt+i` | gh-dash | your PRs on GitHub |
|
|
44
|
+
| `alt+y` | yazi | find a file |
|
|
45
|
+
| `alt+q` | harlequin | run a SQL query |
|
|
46
|
+
|
|
47
|
+
## Inside each tool
|
|
48
|
+
|
|
49
|
+
`e` means edit in every tool that has an editor key, except diffnav, which spends `e` on its file tree.
|
|
50
|
+
|
|
51
|
+
### diffnav (`alt+f`)
|
|
52
|
+
|
|
53
|
+
| Key | Does |
|
|
54
|
+
|---|---|
|
|
55
|
+
| `j` / `k` | next / previous file |
|
|
56
|
+
| `o` | open the file in `$EDITOR` |
|
|
57
|
+
| `s` | toggle side-by-side |
|
|
58
|
+
| `e` | toggle the file tree |
|
|
59
|
+
| `?` | every key |
|
|
60
|
+
|
|
61
|
+
### lazygit (`alt+g`)
|
|
62
|
+
|
|
63
|
+
| Key | Does |
|
|
64
|
+
|---|---|
|
|
65
|
+
| `space` | stage the file under the cursor |
|
|
66
|
+
| `a` | stage everything |
|
|
67
|
+
| `c` | commit |
|
|
68
|
+
| `A` | amend the last commit |
|
|
69
|
+
| `P` | push |
|
|
70
|
+
| `?` | every key |
|
|
71
|
+
|
|
72
|
+
### yazi (`alt+y`)
|
|
73
|
+
|
|
74
|
+
| Key | Does |
|
|
75
|
+
|---|---|
|
|
76
|
+
| `e` | edit in `$EDITOR` |
|
|
77
|
+
| `o` | open by rule, which for markdown is the reader |
|
|
78
|
+
| `b` | open in the browser you are sitting at |
|
|
79
|
+
| `D` | send the file to your laptop over Taildrop |
|
|
80
|
+
|
|
81
|
+
### harlequin (`alt+q`)
|
|
82
|
+
|
|
83
|
+
| Key | Does |
|
|
84
|
+
|---|---|
|
|
85
|
+
| `f2` / `f5` / `f6` | editor / results / catalog |
|
|
86
|
+
| `tab` / `shift+tab` | next / previous pane, from outside the editor |
|
|
87
|
+
| `ctrl+enter` | run the query, or in the catalog insert the name into the editor |
|
|
88
|
+
| `f4` | format the query |
|
|
89
|
+
| `f8` | query history |
|
|
90
|
+
| `f9` | hide the catalog sidebar |
|
|
91
|
+
| `f10` | full-screen the focused pane |
|
|
92
|
+
| `f1` | every key |
|
|
93
|
+
|
|
94
|
+
### tuicr
|
|
95
|
+
|
|
96
|
+
`;` is tuicr's leader: press it, release it, then press the second key.
|
|
97
|
+
|
|
98
|
+
| Key | Does |
|
|
99
|
+
|---|---|
|
|
100
|
+
| `e` | edit the focused file in `$EDITOR` |
|
|
101
|
+
| `c` | comment on the line |
|
|
102
|
+
| `y` | copy the review to the clipboard |
|
|
103
|
+
| `;o` | open the PR on GitHub |
|
|
104
|
+
| `;L` / `;H` | widen / narrow the file tree, then bare `L` / `H` to keep going |
|
|
105
|
+
| `x` | filter files out of the tree |
|
|
106
|
+
| `?` | every key |
|
|
107
|
+
|
|
108
|
+
`;L` and `;H` need the fork build, which `tuicr.build_from_fork` in the config installs.
|
|
109
|
+
|
|
110
|
+
### LazyVim
|
|
111
|
+
|
|
112
|
+
| Key | Does |
|
|
113
|
+
|---|---|
|
|
114
|
+
| `space` | show every key, with labels |
|
|
115
|
+
| `space` `space` | find a file |
|
|
116
|
+
| `space` `/` | grep the project |
|
|
117
|
+
| `space` `e` | file tree |
|
|
118
|
+
| `space` `g` `g` | lazygit |
|
|
119
|
+
| `H` / `L` | previous / next file |
|
|
120
|
+
| `:Tutor` | learn vim in 25 minutes |
|
|
121
|
+
|
|
122
|
+
## When a key does nothing
|
|
123
|
+
|
|
124
|
+
- Your terminal emulator ate it, and `alt+shift+d` is the known case in Windows Terminal
|
|
125
|
+
- Run `cat -v` in any pane and press the key
|
|
126
|
+
- An escape sequence such as `^[Z` means the key arrived, so the problem is the remote config
|
|
127
|
+
- Nothing printed means the key never left your machine
|
|
128
|
+
- Fix it with `assets/terminal-workspace/client-keybindings.md`, which you hand to an agent running on your own machine
|
|
129
|
+
|
|
130
|
+
## When a full-screen app draws its rows one column further left each time
|
|
131
|
+
|
|
132
|
+
- herdr's pane scrollbar costs the pane a column, and setup turns the scrollbar off for that reason
|
|
133
|
+
- The symptom is a wrapped row starting one column left of the row above it
|
|
134
|
+
- neovim shows it, and so does any other program that draws the whole pane
|
|
135
|
+
- Toggling the sidebar with `alt+s` repairs the display until the next launch, because it recomputes the geometry
|
|
136
|
+
- Check the setting survived with `grep pane_scrollbars ~/.config/herdr/config.toml`
|
|
137
|
+
- Re-apply it with `bash assets/terminal-workspace/setup.sh apply`
|