@axelgar/opentree 1.0.0 → 1.0.2

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 (2) hide show
  1. package/README.md +24 -3
  2. package/package.json +5 -5
package/README.md CHANGED
@@ -6,7 +6,7 @@ Think [Conductor](https://conductor.build), but for the terminal.
6
6
 
7
7
  opentree is a cross-platform CLI tool that manages multiple AI coding agent sessions. Each session runs in an isolated git worktree with its own branch, orchestrated via tmux. Perfect for working on multiple features/fixes simultaneously without context-switching overhead.
8
8
 
9
- <img src="docs/demo.gif" alt="opentree — orchestrate parallel AI coding sessions in isolated git worktrees" style="width: 100%;max-width: 100%;">
9
+ ![opentree — orchestrate parallel AI coding sessions in isolated git worktrees](https://raw.githubusercontent.com/axelgar/opentree/main/docs/demo.gif)
10
10
 
11
11
  ## Features
12
12
 
@@ -26,7 +26,7 @@ opentree is a cross-platform CLI tool that manages multiple AI coding agent sess
26
26
  ## Requirements
27
27
 
28
28
  - **Git** (2.5+) - for worktree support
29
- - **tmux** (3.0+) - for session orchestration
29
+ - **tmux** (3.0+) - for session orchestration (3.2+ to type `shift+enter` in the chat)
30
30
  - **A coding agent** (optional) - OpenCode (the default), Claude Code, GitHub Copilot CLI or Gemini CLI
31
31
  - **GitHub CLI** (`gh`) (optional) - for PR creation and issue fetching ([install](https://cli.github.com/))
32
32
  - **Node** (optional) - only to run Claude Code through its ACP adapter
@@ -187,7 +187,8 @@ agent's own logo, in its own colours:
187
187
  | Key | |
188
188
  | --- | --- |
189
189
  | `enter` | send |
190
- | `ctrl+j` | newline |
190
+ | `shift+enter` | newline — `ctrl+j` where the terminal cannot report modifiers |
191
+ | `↑` / `↓` | walk back through the messages already sent, and forward again |
191
192
  | `/` | slash commands — the agent's own, plus `/resume`, `/login`, `/model` and the rest |
192
193
  | `@` | attach a file from this worktree |
193
194
  | `ctrl+v` | paste — an image on the clipboard is attached, anything else is text |
@@ -197,6 +198,20 @@ agent's own logo, in its own colours:
197
198
  | `ctrl+o` | show or hide the agent's reasoning |
198
199
  | `?` | every key |
199
200
 
201
+ **Newlines.** `shift+enter` breaks the line instead of sending it, with nothing
202
+ to configure. A terminal left to itself sends a bare carriage return for
203
+ `shift+enter` — the same byte `enter` sends, and nothing downstream can tell the
204
+ two apart — so the chat asks it for modified keys on the way in (xterm's
205
+ `modifyOtherKeys`, level 1, put back on the way out), and sets `extended-keys`
206
+ on its own tmux session so tmux passes them through. That is the whole reason
207
+ the key works here and not in every terminal program.
208
+
209
+ Level 1 is the conservative request: only keys that had no encoding of their own
210
+ gain one, so `esc`, `ctrl+j` and the arrows are the bytes they always were, and a
211
+ window running something else is untouched — tmux only forwards modified keys to
212
+ programs that ask for them. In a terminal that cannot report modifiers at all
213
+ (Terminal.app), `ctrl+j` and `alt+enter` still do it.
214
+
200
215
  **Images.** Press `ctrl+v` to attach a screenshot from the clipboard, or drag one
201
216
  onto the terminal. Either way the path collapses into `[image · shot.png · 412 KB]`
202
217
  in the message you are writing — backspace over it and the attachment goes with
@@ -206,6 +221,12 @@ terminal asked to paste a picture sends nothing at all. An agent that does not
206
221
  take images gets the path as a link instead, and the chat says so rather than
207
222
  letting the difference go unnoticed.
208
223
 
224
+ **Messages you already sent.** `↑` puts the last one back in the box, `↓` walks
225
+ forward again, and coming back past the newest returns whatever was half typed
226
+ when you started looking — so a prompt worth repeating, or repeating with one
227
+ word changed, is a keypress away rather than a retype. Inside a message the
228
+ arrows still move the cursor: they only recall from its first and last row.
229
+
209
230
  **Earlier conversations.** `/resume` lists what this worktree has already
210
231
  talked about — newest first, by what each conversation was about — and picking
211
232
  one reopens it in place, history and all. The list is the agent's own where it
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axelgar/opentree",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Git worktree manager CLI for orchestrating parallel AI coding sessions",
5
5
  "repository": {
6
6
  "type": "git",
@@ -15,10 +15,10 @@
15
15
  "bin/opentree"
16
16
  ],
17
17
  "optionalDependencies": {
18
- "@axelgar/opentree-linux-x64": "1.0.0",
19
- "@axelgar/opentree-linux-arm64": "1.0.0",
20
- "@axelgar/opentree-darwin-x64": "1.0.0",
21
- "@axelgar/opentree-darwin-arm64": "1.0.0"
18
+ "@axelgar/opentree-linux-x64": "1.0.2",
19
+ "@axelgar/opentree-linux-arm64": "1.0.2",
20
+ "@axelgar/opentree-darwin-x64": "1.0.2",
21
+ "@axelgar/opentree-darwin-arm64": "1.0.2"
22
22
  },
23
23
  "engines": {
24
24
  "node": ">=18"