Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,5 @@ jobs:
# Compile-smoke: the release Bun-compiles a single binary, which bundles
# everything (unlike tsup) and can fail where `build` passes. Catch that
# here so a release tag never breaks on it.
- run: bun build src/cli.tsx --compile --outfile /tmp/agent
- run: bun build src/cli.ts --compile --outfile /tmp/agent
- run: /tmp/agent --version
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ jobs:
mkdir -p dist
for t in darwin-arm64 darwin-x64 linux-x64 linux-arm64; do
echo "::group::build $t"
bun build src/cli.tsx --compile --target=bun-"$t" --outfile agent
bun build src/cli.ts --compile --target=bun-"$t" --outfile agent
tar -czf "dist/agent-$t.tar.gz" agent
rm -f agent
echo "::endgroup::"
Expand Down
3 changes: 0 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,3 @@ pnpm-lock.yaml

# local dev worktrees
.worktrees/

# screenshot-test render artifacts (regenerated by every test run)
test/__screenshots__/
13 changes: 3 additions & 10 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,9 @@
## Tests are unit tests only

Every test in `test/` covers pure functions: input in, value out. Do not add a
test that renders the Ink UI. No fake TTY, no terminal emulator, no snapshot of
a painted screen, no `render()` from ink.

The UI is verified by running it, not by asserting on frames. When a rendering
claim needs coverage, pull the logic out of the component into a pure function
in `src/lib/` or `src/ui/*Rows.ts` and test that instead.

`test/screenshot.ts`, `test/screenshot.test.ts`, `test/connect-render.test.ts`,
and `test/scrollback.test.ts` were deleted for this reason. Do not bring them
back.
test that drives a terminal: no fake TTY, no terminal emulator, no snapshot of
printed output. When output needs coverage, pull the logic into a pure
function in `src/lib/` and test that instead.

## Conventions

Expand Down
42 changes: 4 additions & 38 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
# Ellipsis CLI

Drive the [Ellipsis](https://ellipsis.dev) cloud from your terminal: start agent
sessions, stream their output live, manage configurations, and open a session
in the browser IDE.
sessions, stream their output live, and manage configurations.

This is a thin client. The agent runs in the Ellipsis cloud; the CLI
authenticates, opens a WebSocket, and streams results. It is open source
Expand Down Expand Up @@ -62,8 +61,6 @@ agent session list --limit 20 # list recent sessions (filter by --source
agent session get <session-id> # inspect one session (prints a dashboard link)
agent session get <session-id> --watch # follow a session until it finishes
agent session record <session-id> # read a session's stored transcript, one line per record
agent session connect <session-id> # connect to a session: transcript + live output + send messages
agent session connect # inside an Ellipsis sandbox: connects to the running session
agent session stop <session-id> # stop an in-flight session

agent review 123 # review a pull request now, instead of waiting for a push
Expand Down Expand Up @@ -124,8 +121,8 @@ legacy `ELLIPSIS_API_BASE`).
`--watch` (on both `session start` and `session get`) streams the session's
output live over WebSocket until it reaches a terminal status, falling back to
periodic status polling if the live stream is unavailable. Either way it first
prints a clickable dashboard link. The stream protocol is specified in
[`docs/RUN_STREAMING_SPEC.md`](docs/RUN_STREAMING_SPEC.md).
prints a clickable dashboard link. How the stream works is described in
[`docs/SESSION_STREAMING.md`](docs/SESSION_STREAMING.md).

### Auth

Expand Down Expand Up @@ -163,36 +160,6 @@ Hosts and tokens live in `~/.ellipsis/config.json` (mode 0600); set
is migrated on first use — your existing login becomes a host named for its API
base.

The config file also carries UI preferences. `"sessionBar"` scopes the session
list, which the interactive UI opens as a full screen with `esc`:

```json
{
"sessionBar": {
"hidden": false,
"days": 7,
"repo": "cwd",
"statuses": "all",
"sources": ["cli", "web"]
}
}
```

`hidden` drops the list entirely, so the chat never hands focus to it. `days`
hides sessions that have not moved in that long; `0` means no age cutoff. `repo` is `"cwd"` to
list only sessions on the repository your shell is in, or `"any"` for all of
them. `statuses` is `"unfinished"` to leave out the sessions that finished,
errored, or were stopped, or `"all"` to keep them. `sources` lists only sessions
started those ways (`react`, `web`, `api`, `cli`, `mention`, `cron`); leave it
out for all of them.

Every field is optional and the defaults above are what you get with no
`sessionBar` at all. Two caveats on `repo`: a shell outside a repository lists
every repository rather than nothing, and sessions that name their repository
only inside their automation — dashboard starts, cron runs — do not
match a repo filter, so `"repo": "any"` is the way to see those alongside the
rest.

## SDK 0.30 configuration

Session configs select one native block. Put the first message inside it:
Expand Down Expand Up @@ -254,9 +221,8 @@ npm run compile # single-binary build (bun)

| Path | Purpose |
| ----------------- | ------------------------------------------------ |
| `src/cli.tsx` | entry point; wires up the command tree |
| `src/cli.ts` | entry point; wires up the command tree |
| `src/commands/` | one module per top-level command group |
| `src/ui/` | Ink components for interactive / streaming views |
| `src/lib/` | API client, WebSocket client, config, constants |

### Releasing
Expand Down
Loading
Loading