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
42 changes: 5 additions & 37 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,19 +42,19 @@ jobs:
if: runner.os != 'Windows'
run: |
cd target/${{ matrix.target }}/release
tar czf ../../../term-${{ matrix.target }}.tar.gz term
tar czf ../../../ridge-${{ matrix.target }}.tar.gz ridge
cd ../../..
- name: Package (Windows)
if: runner.os == 'Windows'
run: |
cd target/${{ matrix.target }}/release
7z a ../../../term-${{ matrix.target }}.zip term.exe
7z a ../../../ridge-${{ matrix.target }}.zip ridge.exe
cd ../../..
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: term-${{ matrix.target }}
path: term-${{ matrix.target }}.*
name: ridge-${{ matrix.target }}
path: ridge-${{ matrix.target }}.*

release:
name: Create Release
Expand All @@ -67,37 +67,5 @@ jobs:
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
files: term-*
files: ridge-*
generate_release_notes: true

# Updates the Homebrew tap formula after a release. Runs only when the
# HOMEBREW_TAP_TOKEN secret is configured (mapped to env for the `if`).
update-tap:
name: Update Homebrew Tap
needs: release
runs-on: ubuntu-latest
env:
TAP_TOKEN: ${{ secrets.HOMEBREW_TAP_TOKEN }}
TAG_NAME: ${{ github.ref_name }}
steps:
- name: Has token?
id: guard
if: env.TAP_TOKEN != ''
run: echo "present=1" >> "$GITHUB_OUTPUT"
- if: steps.guard.outputs.present == '1'
uses: actions/checkout@v4
with:
repository: GrayCodeAI/homebrew-tap
token: ${{ secrets.HOMEBREW_TAP_TOKEN }}
path: tap
- if: steps.guard.outputs.present == '1'
name: Update formula
run: |
SHA=$(curl -fsSL "https://github.com/GrayCodeAI/term/archive/refs/tags/${TAG_NAME}.tar.gz" | sha256sum | awk '{print $1}')
cd tap
sed -i "s#url \".*\"#url \"https://github.com/GrayCodeAI/term/archive/refs/tags/${TAG_NAME}.tar.gz\"#" Formula/term.rb
sed -i "s/sha256 \".*\"/sha256 \"${SHA}\"/" Formula/term.rb
git config user.email "github-actions[bot]@users.noreply.github.com"
git config user.name "github-actions[bot]"
git commit -am "chore: update term to ${TAG_NAME}" || echo "no changes"
git push
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,10 @@ coverage/
.cargo/vendor/
*.rs.bak

# Term application data
# Ridge application data
.ridge/
.ridge-*.json
.ridge-worktrees/
.term/
.term-*.json
.term-worktrees/
Expand Down
10 changes: 5 additions & 5 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# Contributing to Term
# Contributing to Ridge

Thank you for considering contributing to Term! We welcome bug reports, feature
Thank you for considering contributing to Ridge! We welcome bug reports, feature
requests, and pull requests from the community.

## Getting Started

1. Fork the repository on GitHub.
2. Clone your fork: `git clone https://github.com/<your-username>/term.git`
2. Clone your fork: `git clone https://github.com/<your-username>/ridge.git`
3. Create a feature branch: `git checkout -b feature/your-feature-name`
4. Install Rust: https://rustup.rs/
5. Build: `cargo build`
Expand All @@ -27,7 +27,7 @@ requests, and pull requests from the community.
## Pull Request Process

1. Push your branch to your fork.
2. Open a pull request against `main` on `GrayCodeAI/term`.
2. Open a pull request against `main` on `GrayCodeAI/ridge`.
3. A maintainer will review your changes and may request changes.
4. Once approved, a maintainer will merge your pull request.

Expand All @@ -40,7 +40,7 @@ requests, and pull requests from the community.

## Reporting Bugs

Open an issue at https://github.com/GrayCodeAI/term/issues with:
Open an issue at https://github.com/GrayCodeAI/ridge/issues with:

- A clear title and description
- Steps to reproduce
Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 6 additions & 6 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
[package]
name = "term"
name = "ridge"
version = "1.0.0"
edition = "2024"
description = "Mission control for your AI agents. Terminal-native TUI with 11 agent adapters, task orchestration, diff review, and session management."
description = "Mission control for your AI agents. Terminal-native TUI with 12 agent adapters, task orchestration, diff review, and session management."
license = "MIT"
repository = "https://github.com/GrayCodeAI/term"
homepage = "https://github.com/GrayCodeAI/term"
documentation = "https://github.com/GrayCodeAI/term/tree/main/docs"
repository = "https://github.com/GrayCodeAI/ridge"
homepage = "https://github.com/GrayCodeAI/ridge"
documentation = "https://github.com/GrayCodeAI/ridge/tree/main/docs"
readme = "README.md"
keywords = ["tui", "terminal", "ai", "agents", "claude"]
categories = ["command-line-utilities", "development-tools"]
authors = ["GrayCodeAI"]
rust-version = "1.87"

[[bin]]
name = "term"
name = "ridge"
path = "src/main.rs"

[dependencies]
Expand Down
16 changes: 16 additions & 0 deletions Formula/ridge.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
class Ridge < Formula
desc "Mission control for your AI agents. Terminal-native TUI."
homepage "https://github.com/GrayCodeAI/ridge"
license "MIT"
head "https://github.com/GrayCodeAI/ridge.git", branch: "main"

depends_on "rust" => :build

def install
system "cargo", "install", *std_cargo_args
end

test do
assert_match "ridge", shell_output("#{bin}/ridge --version")
end
end
18 changes: 0 additions & 18 deletions Formula/term.rb

This file was deleted.

4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Term — Makefile
# Ridge — Makefile

.PHONY: build test clippy fmt check run install clean help

Expand Down Expand Up @@ -32,7 +32,7 @@ check: fmt-check clippy test ## Run all checks (fmt, clippy, test)
run: build ## Build and run the binary
$(CARGO) run

install: ## Install term to ~/.cargo/bin
install: ## Install ridge to ~/.cargo/bin
$(CARGO) install --path .

clean: ## Remove build artifacts
Expand Down
29 changes: 14 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,30 +1,31 @@
# Term
# Ridge

Mission control for your AI agents. Terminal-native TUI. Part of [GrayCodeAI](https://github.com/GrayCodeAI).

[![CI](https://github.com/GrayCodeAI/term/actions/workflows/ci.yml/badge.svg)](https://github.com/GrayCodeAI/term/actions/workflows/ci.yml)
[![Release](https://github.com/GrayCodeAI/term/actions/workflows/release.yml/badge.svg)](https://github.com/GrayCodeAI/term/actions/workflows/release.yml)
[![Security Audit](https://github.com/GrayCodeAI/term/actions/workflows/audit.yml/badge.svg)](https://github.com/GrayCodeAI/term/actions/workflows/audit.yml)
[![Crates.io](https://img.shields.io/crates/v/term.svg)](https://crates.io/crates/term)
Formerly **Term**. The command and package are now `ridge`. Existing Term configuration, session data, task boards, race history, worktrees, and module manifests are read when their Ridge equivalents do not exist.

[![CI](https://github.com/GrayCodeAI/ridge/actions/workflows/ci.yml/badge.svg)](https://github.com/GrayCodeAI/ridge/actions/workflows/ci.yml)
[![Release](https://github.com/GrayCodeAI/ridge/actions/workflows/release.yml/badge.svg)](https://github.com/GrayCodeAI/ridge/actions/workflows/release.yml)
[![Security Audit](https://github.com/GrayCodeAI/ridge/actions/workflows/audit.yml/badge.svg)](https://github.com/GrayCodeAI/ridge/actions/workflows/audit.yml)
[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)

## Status

Full mission control: 11 agent adapters (Claude, Codex, OpenCode, Gemini, Copilot, Aider, Kimi, Pi, Grok, Cursor, Generic), PTY terminal emulation, task orchestration with worktrees/leases/quality-gates/merge, session persistence, cost tracking, modules, themes, and mobile-width mode. 23 tests, CI on 3 OS. See `CHANGELOG.md`.
Full mission control: 12 agent adapters (Reflect, Claude, Codex, OpenCode, Gemini, Copilot, Aider, Kimi, Pi, Grok, Cursor, Generic), PTY terminal emulation, task orchestration with worktrees/leases/quality-gates/merge, session persistence, cost tracking, modules, themes, and mobile-width mode. See `CHANGELOG.md`.

## Docs

/md book site under `docs/` (mdBook) — built in CI; open `docs/book/index.html` or run `mdbook build docs` locally.

## Scripting & diagnostics

- `term --headless` — machine-readable agent/branch/status/task facts
- `term --dashboard` — full mission-control state as JSON
- `term --doctor` — check which agent CLIs / tools are installed
- `ridge --headless` — machine-readable agent/branch/status/task facts
- `ridge --dashboard` — full mission-control state as JSON
- `ridge --doctor` — check which agent CLIs / tools are installed

## Session timelines

Every pane's raw PTY output is continuously logged to `<data_dir>/timelines/pane-<id>.log` — replay what an agent did while you were away with `less ~/.local/share/term/timelines/pane-1.log`, `:timeline view <pane>` (live replay pane inside Term, follows new output), or `:timeline export postmortem.log`. A companion `.meta` file records timestamped byte-offset milestones for time-scanning. SSH/remote panes get status detection (blocked/idle/working) via the generic heuristics.
Every pane's raw PTY output is continuously logged to `<data_dir>/timelines/pane-<id>.log` — replay what an agent did while you were away with `less ~/.local/share/ridge/timelines/pane-1.log`, `:timeline view <pane>` (live replay pane inside Ridge, follows new output), or `:timeline export postmortem.log`. A companion `.meta` file records timestamped byte-offset milestones for time-scanning. SSH/remote panes get status detection (blocked/idle/working) via the generic heuristics.

## Build

Expand All @@ -39,13 +40,11 @@ cargo run
# From source
cargo install --path .

# Via install script
curl -fsSL https://gryacodeai.com/term/install.sh | sh
# Via install script (after the first Ridge release)
curl -fsSL https://raw.githubusercontent.com/GrayCodeAI/ridge/main/install.sh | sh

# Via Homebrew (once tap is published)
brew install gryacodeai/tap/term
# or restore last session's panes
term --restore
ridge --restore
```

## CI / Release
Expand Down
4 changes: 2 additions & 2 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
## Reporting a vulnerability

Please report security issues privately via
[GitHub Security Advisories](https://github.com/GrayCodeAI/term/security/advisories/new)
[GitHub Security Advisories](https://github.com/GrayCodeAI/ridge/security/advisories/new)
rather than opening a public issue.

## Hardening in this codebase
Expand All @@ -14,7 +14,7 @@ rather than opening a public issue.
empty branch segments.
- **Read-only diff review**: the diff tab never mutates the repository.
- **Modules**: run as local executables you installed yourself from
`~/.config/term/modules/` — like any script in your PATH, only add ones you trust.
`~/.config/ridge/modules/` — like any script in your PATH, only add ones you trust.

## Audits

Expand Down
14 changes: 7 additions & 7 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# Term Documentation
# Ridge Documentation

Term is a terminal-native mission control for AI coding agents.
Ridge is a terminal-native mission control for AI coding agents.

## Quick start

```sh
cargo install --git https://github.com/GrayCodeAI/term
term
cargo install --git https://github.com/GrayCodeAI/ridge
ridge
```

## Keybindings
Expand All @@ -15,12 +15,12 @@ See [README](../README.md#keybindings).

## Commands

`:help` inside Term lists all commands. See README for full list.
`:help` inside Ridge lists all commands. See README for full list.

## Modules

Place executable scripts in `~/.config/term/modules/`. They receive a `status` argument and print one line to stdout.
Place executable scripts in `~/.config/ridge/modules/`. They receive a `status` argument and print one line to stdout.

## Configuration

`~/.config/term/term.toml` — theme, keybindings, accounts.
`~/.config/ridge/ridge.toml` — theme, keybindings, accounts.
4 changes: 2 additions & 2 deletions docs/SUMMARY.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Term Documentation
# Ridge Documentation

Welcome to Term docs.
Welcome to Ridge docs.

## Getting Started
- [Installation](./installation.md)
Expand Down
2 changes: 1 addition & 1 deletion docs/agents.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Agent Adapters

Term uses an `Agent` trait to support multiple coding agents.
Ridge uses an `Agent` trait to support multiple coding agents.

## Implementing a new adapter

Expand Down
2 changes: 1 addition & 1 deletion docs/book.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[book]
title = "Term — Mission Control for AI Agents"
title = "Ridge — Mission Control for AI Agents"
authors = ["GrayCodeAI"]
description = "Terminal-native TUI mission control for coding agents."

Expand Down
14 changes: 7 additions & 7 deletions docs/commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ Type `:` to enter command mode.
- `task subagent <parent> <agent>` — spawn subagent
- `race <prompt>` — start a fan-out race: claude, codex, and opencode each get their own git worktree + branch, and the prompt is delegated to them immediately
- `race` / `race status` — show contestants, statuses, gates, and the winner (★)
- `race leaderboard` — aggregated wins per agent from past races (persisted to `<repo>/.term-races.json`, last 50 outcomes) plus the three most recent races
- `race leaderboard` — aggregated wins per agent from past races (persisted to `<repo>/.ridge-races.json`, last 50 outcomes) plus the three most recent races
- `race gate <idx>` — run the quality gate in one contestant's worktree (`cargo test` by default for Rust repos; `:race gate-cmd <cmd>` overrides)
- `race winner <idx> [force]` — gate the contestant, merge its branch, and clean up the losers; a failed gate blocks promotion unless `force` is given
- `race cancel` — close all race panes and remove their worktrees
Expand All @@ -46,23 +46,23 @@ Type `:` to enter command mode.

## Headless

Run `term --headless` (no TUI) to print machine-readable facts for scripts: registered agents, current branch, `git status` lines, and persisted tasks.
Run `ridge --headless` (no TUI) to print machine-readable facts for scripts: registered agents, current branch, `git status` lines, and persisted tasks.

## Dashboard JSON

Run `term --dashboard` (no TUI) to print the full mission-control state as pretty JSON: pane list (status/cost/attention/session id), active race with contestants and gate results, queued prompts, inbox counters, task-board summary with ready ids, module count, and race-history length.
Run `ridge --dashboard` (no TUI) to print the full mission-control state as pretty JSON: pane list (status/cost/attention/session id), active race with contestants and gate results, queued prompts, inbox counters, task-board summary with ready ids, module count, and race-history length.

## Doctor

Run `term --doctor` to sanity-check the environment and exit: each agent CLI found on PATH (claude, codex, opencode, gemini, copilot, aider, kimi, pi, grok, cursor-agent), git and gh availability, and that the data dir is writable. Exit code stays 0; missing items are reported with hints. Add `--fix` (`term --doctor --fix`) to print concrete copy-paste install steps (`→ [Agent] npm install -g …`) for every failing check.
Run `ridge --doctor` to sanity-check the environment and exit: each agent CLI found on PATH (claude, codex, opencode, gemini, copilot, aider, kimi, pi, grok, cursor-agent), git and gh availability, and that the data dir is writable. Exit code stays 0; missing items are reported with hints. Add `--fix` (`ridge --doctor --fix`) to print concrete copy-paste install steps (`→ [Agent] npm install -g …`) for every failing check.

## Timelines

Every pane's raw output is continuously logged under `<data_dir>/timelines/pane-<id>.log`. A companion `pane-<id>.meta` file records timestamped byte-offset milestones (every 4 KiB of activity or 30 s of silence) so post-mortems can be scrubbed over time:

```sh
less ~/.local/share/term/timelines/pane-1.log # raw session replay
cat ~/.local/share/term/timelines/pane-1.meta # "epoch_ms bytes" milestones
less ~/.local/share/ridge/timelines/pane-1.log # raw session replay
cat ~/.local/share/ridge/timelines/pane-1.meta # "epoch_ms bytes" milestones
```

Inside Term, `:timeline view <pane>` opens a replay pane that streams the log live.
Inside Ridge, `:timeline view <pane>` opens a replay pane that streams the log live.
12 changes: 3 additions & 9 deletions docs/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,10 @@

## From source
```sh
cargo install --git https://github.com/GrayCodeAI/term
cargo install --git https://github.com/GrayCodeAI/ridge
```

## Install script
## Install script (after the first Ridge release)
```sh
curl -fsSL https://gryacodeai.com/term/install.sh | sh
```

## Homebrew
```sh
brew tap GrayCodeAI/tap
brew install term
curl -fsSL https://raw.githubusercontent.com/GrayCodeAI/ridge/main/install.sh | sh
```
Loading
Loading