acstack 0.0.0-stage → 0.47.0

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.
Files changed (143) hide show
  1. package/.claude-plugin/plugin.json +19 -0
  2. package/LICENSE +21 -0
  3. package/README.md +389 -2
  4. package/THIRD_PARTY_NOTICES +14 -0
  5. package/TROUBLESHOOTING.md +225 -0
  6. package/agents/codex/frontend-verifier.toml +352 -0
  7. package/agents/codex/task-checker.toml +345 -0
  8. package/agents/codex/task-executor.toml +157 -0
  9. package/agents/codex/test-writer.toml +149 -0
  10. package/agents/frontend-verifier.md +351 -0
  11. package/agents/task-checker.md +344 -0
  12. package/agents/task-executor.md +156 -0
  13. package/agents/test-writer.md +148 -0
  14. package/assets/playwriter-bridge/build-launcher.ps1 +32 -0
  15. package/assets/playwriter-bridge/doctor.ps1 +450 -0
  16. package/assets/playwriter-bridge/launcher-src.cs +131 -0
  17. package/assets/playwriter-bridge/opener.js +330 -0
  18. package/assets/playwriter-bridge/opener.ps1 +63 -0
  19. package/assets/playwriter-bridge/register-tasks.ps1 +328 -0
  20. package/assets/playwriter-bridge/relay.ps1 +50 -0
  21. package/assets/playwriter-bridge/stop.ps1 +125 -0
  22. package/assets/playwriter-bridge/sync.ps1 +271 -0
  23. package/assets/playwriter-bridge/tunnel.ps1 +325 -0
  24. package/assets/playwriter-bridge/vm-free-port.sh +166 -0
  25. package/assets/terminal-workspace/client-keybindings.md +87 -0
  26. package/assets/terminal-workspace/config.example.yaml +329 -0
  27. package/assets/terminal-workspace/setup.sh +4317 -0
  28. package/cli/README.md +47 -0
  29. package/cli/bin/acstack.js +3 -0
  30. package/cli/dist/index.js +25984 -0
  31. package/cli/dist/index.js.map +7 -0
  32. package/cli/package.json +59 -0
  33. package/docs/adr/0001-ste-writing-standard.md +16 -0
  34. package/docs/adr/0002-version-gate-not-auto-bump.md +35 -0
  35. package/docs/adr/0003-handoff-ack-command.md +19 -0
  36. package/docs/adr/0004-dev-setup-per-host.md +13 -0
  37. package/docs/adr/0005-two-orchestrators-per-host.md +25 -0
  38. package/docs/adr/0006-document-opener-service.md +89 -0
  39. package/docs/adr/0007-lead-check-reads-the-transcript.md +87 -0
  40. package/docs/adr/0008-cli-audits-skill-interviews.md +37 -0
  41. package/docs/adr/0009-verify-the-write-not-the-writer.md +51 -0
  42. package/docs/adr/0010-promote-dev-to-main-by-fast-forward.md +115 -0
  43. package/docs/adr/0011-node-header-is-the-edge-encoding.md +20 -0
  44. package/docs/adr/0012-node-kind-is-a-closed-set-of-five.md +31 -0
  45. package/docs/adr/0013-the-diagram-renderer-is-pure.md +23 -0
  46. package/docs/adr/0014-reading-a-node-hides-its-generated-diagram.md +29 -0
  47. package/docs/adr/0015-a-node-id-links-to-its-issue-through-an-anchor.md +37 -0
  48. package/docs/adr/0016-the-map-root-carries-no-status-of-its-own.md +21 -0
  49. package/docs/adr/0017-call-impeccable-copy-only-its-questions.md +13 -0
  50. package/docs/adr/index.md +17 -0
  51. package/docs/config-reference.md +572 -0
  52. package/docs/dev-setups.md +164 -0
  53. package/docs/migrate-0.8.md +28 -0
  54. package/docs/playwriter-bridge-windows.md +15 -0
  55. package/docs/terminal-workspace-keys.md +137 -0
  56. package/docs/terminal-workspace.md +1774 -0
  57. package/docs/workflows.md +309 -0
  58. package/hooks/ac-writing-style-reminder.sh +86 -0
  59. package/hooks/context-pressure.sh +583 -0
  60. package/hooks/hooks.json +50 -0
  61. package/hooks/session-start-handoff.sh +165 -0
  62. package/hooks/session-start.sh +214 -0
  63. package/orchestrator/AGENTS.md +532 -0
  64. package/output-styles/ac-writing-style.md +286 -0
  65. package/package.json +50 -4
  66. package/pi/agents/frontend-verifier.md +357 -0
  67. package/pi/agents/task-checker.md +348 -0
  68. package/pi/agents/task-executor.md +160 -0
  69. package/pi/agents/test-writer.md +154 -0
  70. package/pi/extension.ts +723 -0
  71. package/profiles/fullstack-python.yaml +29 -0
  72. package/profiles/node-typescript.yaml +23 -0
  73. package/profiles/python.yaml +24 -0
  74. package/skills/archive/SKILL.md +160 -0
  75. package/skills/bootstrap/SKILL.md +109 -0
  76. package/skills/bridge/HANDOFF.md +93 -0
  77. package/skills/bridge/SKILL-VM.md +292 -0
  78. package/skills/bridge/SKILL-WINDOWS.md +526 -0
  79. package/skills/bridge/SKILL.md +121 -0
  80. package/skills/browser-verify/SKILL.md +229 -0
  81. package/skills/code-review/SKILL.md +44 -0
  82. package/skills/commit/SKILL.md +106 -0
  83. package/skills/compact-and-continue/SKILL.md +241 -0
  84. package/skills/explore/SKILL.md +149 -0
  85. package/skills/grilling/SKILL.md +134 -0
  86. package/skills/handoff/SKILL.md +250 -0
  87. package/skills/handoff/launch-herdr.md +197 -0
  88. package/skills/handoff/launch-without-herdr.md +30 -0
  89. package/skills/handoff/lead-check.md +59 -0
  90. package/skills/handoff/outcomes.md +162 -0
  91. package/skills/handoff/running-agent.md +50 -0
  92. package/skills/handoff/watch.md +115 -0
  93. package/skills/host/SKILL.md +247 -0
  94. package/skills/host/detect-host.sh +297 -0
  95. package/skills/host/herdr.md +79 -0
  96. package/skills/host/install-herdr-block.sh +467 -0
  97. package/skills/host/install-orca.sh +512 -0
  98. package/skills/host/notes.md +97 -0
  99. package/skills/host/orca.md +160 -0
  100. package/skills/host/questions.md +163 -0
  101. package/skills/host/report.md +42 -0
  102. package/skills/implement/SKILL.md +230 -0
  103. package/skills/implement/decision-log.md +62 -0
  104. package/skills/implement/design-pass.md +32 -0
  105. package/skills/implement/relaxed-tdd.md +28 -0
  106. package/skills/map/SKILL.md +250 -0
  107. package/skills/map/frontend.md +227 -0
  108. package/skills/map/trackers/files.md +74 -0
  109. package/skills/map/trackers/github.md +180 -0
  110. package/skills/map/visuals.md +387 -0
  111. package/skills/new-worktree/SKILL.md +155 -0
  112. package/skills/new-worktree/detect-orchestrator.sh +328 -0
  113. package/skills/new-worktree/detect-orchestrator.test.sh +894 -0
  114. package/skills/new-worktree/herdr.md +84 -0
  115. package/skills/new-worktree/orca.md +101 -0
  116. package/skills/pre-commit-review/SKILL.md +242 -0
  117. package/skills/pre-commit-review/auto-fix.md +19 -0
  118. package/skills/pre-commit-review/interactive.md +35 -0
  119. package/skills/quick-fix/SKILL.md +125 -0
  120. package/skills/record-context/SKILL.md +106 -0
  121. package/skills/setup/SKILL.md +250 -0
  122. package/skills/setup/browser.md +123 -0
  123. package/skills/setup/design-review.md +97 -0
  124. package/skills/setup/first-run.md +114 -0
  125. package/skills/setup/report.md +68 -0
  126. package/skills/setup/row-fixes.md +196 -0
  127. package/skills/setup/terminal-workspace.md +153 -0
  128. package/skills/sync/SKILL.md +171 -0
  129. package/skills/teardown-worktree/SKILL.md +245 -0
  130. package/skills/teardown-worktree/detector.md +39 -0
  131. package/skills/teardown-worktree/herdr.md +113 -0
  132. package/skills/teardown-worktree/orca.md +61 -0
  133. package/skills/terminal-workspace/SKILL.md +249 -0
  134. package/skills/terminal-workspace/components.md +36 -0
  135. package/skills/terminal-workspace/config-choices.md +69 -0
  136. package/skills/terminal-workspace/emulator-keys.md +48 -0
  137. package/skills/terminal-workspace/headless-clipboard.md +175 -0
  138. package/skills/terminal-workspace/turn-off-and-update.md +104 -0
  139. package/skills/test-conventions/SKILL.md +59 -0
  140. package/skills/visual-docs/SKILL.md +246 -0
  141. package/skills/writing/SKILL.md +231 -0
  142. package/skills/writing/examples.md +153 -0
  143. 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`