Skip to content

Commit 49e7ea1

Browse files
authored
Merge branch 'main' into fix/update-cdn-cache
2 parents e187d66 + df3fe83 commit 49e7ea1

6 files changed

Lines changed: 258 additions & 9 deletions

File tree

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
name: release-please
2+
run-name: crabcode release by @${{ github.actor }}
3+
4+
concurrency:
5+
group: release-please-${{ github.ref }}
6+
cancel-in-progress: false
7+
8+
on:
9+
push:
10+
branches:
11+
- main
12+
workflow_dispatch:
13+
14+
jobs:
15+
release-please:
16+
runs-on: ubuntu-latest
17+
permissions:
18+
contents: write
19+
pull-requests: write
20+
outputs:
21+
release_created: ${{ steps.release.outputs.release_created }}
22+
tag_name: ${{ steps.release.outputs.tag_name }}
23+
version: ${{ steps.release.outputs.version }}
24+
steps:
25+
- uses: googleapis/release-please-action@v4
26+
id: release
27+
with:
28+
token: ${{ secrets.GITHUB_TOKEN }}
29+
30+
- name: Check if PR exists
31+
id: check-pr
32+
run: |
33+
PR_OUTPUT='${{ steps.release.outputs.pr }}'
34+
if [ -n "$PR_OUTPUT" ] && [ "$PR_OUTPUT" != "null" ]; then
35+
echo "has_pr=true" >> $GITHUB_OUTPUT
36+
echo "pr_branch=$(echo '${{ steps.release.outputs.pr }}' | jq -r '.headBranchName')" >> $GITHUB_OUTPUT
37+
else
38+
echo "has_pr=false" >> $GITHUB_OUTPUT
39+
fi
40+
41+
- uses: actions/checkout@v6
42+
if: steps.check-pr.outputs.has_pr == 'true'
43+
with:
44+
ref: ${{ steps.check-pr.outputs.pr_branch }}
45+
fetch-depth: 1
46+
47+
- name: Format CHANGELOG.md with Prettier
48+
if: steps.check-pr.outputs.has_pr == 'true'
49+
run: |
50+
echo "Formatting CHANGELOG.md on branch: ${{ steps.check-pr.outputs.pr_branch }}"
51+
npx --yes prettier@latest --write CHANGELOG.md
52+
53+
if git diff --quiet CHANGELOG.md; then
54+
echo "No formatting changes needed"
55+
else
56+
echo "Formatting changes detected, committing..."
57+
git config user.name "github-actions[bot]"
58+
git config user.email "github-actions[bot]@users.noreply.github.com"
59+
git add CHANGELOG.md
60+
git commit -m "chore: format CHANGELOG.md with prettier"
61+
git push
62+
echo "Formatting committed and pushed"
63+
fi

.release-please-manifest.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
".": "0.9.1"
3+
}

CHANGELOG.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,31 @@
11
# Changelog
22

3+
## Unreleased
4+
5+
### Fixed
6+
7+
- **Self-update**: bypass GitHub raw CDN cache so `crab update` always fetches the latest version
8+
- **Messaging**: preserve float precision in listen polling timestamp to prevent missed messages
9+
10+
## [0.9.1] - 2026-02-13
11+
12+
### Added
13+
14+
- **P2P Messaging**: peer-to-peer messaging with self-hosted relay server
15+
- `crab msg send @user "message"` — send a message to a teammate
16+
- `crab msg listen` — listen for incoming messages
17+
- Self-hosted relay via `crab msg relay` (no third-party dependencies)
18+
- **Text-to-speech**: received messages are spoken aloud using system TTS
19+
- **Command aliases**: user-configurable command alias system
20+
- Define custom aliases in `~/.crabcode/aliases.yaml`
21+
- `crab alias add <name> <command>` — create aliases for frequently used commands
22+
- **Linear tickets**: `crab ticket <ID>` opens a workspace from a Linear ticket
23+
- Auto-creates branch, sets up workspace, and links to ticket
24+
25+
### Fixed
26+
27+
- **env_sync**: use config `port_bases` instead of `.env` extraction to prevent compounding port offsets
28+
329
## [0.8.0] - 2026-02-09
430

531
### Added
@@ -79,9 +105,28 @@
79105
- `crab restart` from a workspace dir now correctly detects the owning project
80106
- Legacy config migration no longer clobbers global config on subsequent `crab init`
81107

108+
## [0.4.1] - 2026-02-02
109+
110+
### Added
111+
112+
- **Promptfoo plugin**: target discovery agent for automated LLM evaluation
113+
- `crab pf` commands for running promptfoo against workspace targets
114+
- Auto-detects dependencies and creates provider configs
115+
- **CrabQL**: announcement banner and product section on landing page
116+
- `crab destroy` command for tearing down workspaces and cleaning up worktrees
117+
- `install_env` config option for injecting environment variables during workspace setup
118+
- ASCII crab mascot throughout CLI output
119+
120+
### Fixed
121+
122+
- Speed up submodule init by copying from main repo instead of network fetch
123+
- Copy `.mcp.json` instead of updating `settings.json` for MCP sync
124+
- Promptfoo plugin: class-based providers, path handling, install from main branch
125+
82126
## [0.4.0] - 2026-01-18
83127

84128
### Added
129+
85130
- Template system for project-type-aware setup (`crab init -t promptfoo-cloud`)
86131
- Auto-detection of project type from repo contents
87132
- `crab init --list-templates` to show available templates

docs/llms.txt

Lines changed: 124 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@
99

1010
> Lightning-fast tmux workspace manager for multi-repo development
1111

12-
Crabcode creates isolated development workspaces using git worktrees and tmux. Each workspace gets its own branch, ports, and tmux layout. Switch between tasks instantly without losing context.
12+
Crabcode creates isolated development workspaces using git worktrees and tmux. Each workspace gets its own branch, ports, and tmux layout. Manage multiple projects from a single install. Switch between tasks instantly without losing context.
1313

1414
## Installation
1515

1616
```bash
1717
# Prerequisites
18-
brew install tmux yq zip # macOS
19-
# apt install tmux yq zip # Linux
18+
brew install tmux yq zip gh # macOS
19+
# apt install tmux yq zip gh # Linux
2020

2121
# Install crabcode
2222
curl -fsSL https://raw.githubusercontent.com/promptfoo/crabcode/main/install.sh | bash
@@ -26,8 +26,9 @@ curl -fsSL https://raw.githubusercontent.com/promptfoo/crabcode/main/install.sh
2626

2727
```bash
2828
cd ~/Dev/my-project
29-
crab init # 2 questions: repo path + workspace dir
29+
crab init # 3 questions: repo path, alias, workspace dir
3030
crab config scan # auto-detect .env files and ports
31+
crab ws 1 # start first workspace
3132
```
3233

3334
## Usage
@@ -42,14 +43,76 @@ crab restart # Reset git + restart panes
4243
crab cleanup # Full teardown, reset to origin/main
4344
```
4445

46+
### Multi-Project
47+
48+
Manage multiple repos from a single crabcode install. Each project gets an alias.
49+
50+
```bash
51+
crab @pf ws 1 # Open workspace 1 for project "pf"
52+
crab @cb config # Show config for project "cb"
53+
crab ws 1 # Uses default project (or detects from cwd)
54+
crab projects # List all registered projects
55+
crab projects rm <alias> # Remove a project registration
56+
crab default pf # Set default project
57+
```
58+
59+
Project configs live in `~/.crabcode/projects/<alias>.yaml`. Commands auto-detect which project you're in based on cwd.
60+
4561
### Save & Restore Work
4662

4763
```bash
4864
crab wip save # Save current changes
4965
crab wip save --restart # Save then restart workspace
5066
crab wip --continue # Restore most recent saved state
5167
crab wip --resume # Interactive selection of saved states
52-
crab wip ls # List all saved states
68+
crab wip ls # List all saved states globally
69+
```
70+
71+
### PR Review & Court
72+
73+
Two modes for reviewing pull requests:
74+
75+
```bash
76+
# Quick single-agent review
77+
crab review 3230 # PR number
78+
crab review promptfoo#456 # Submodule PR
79+
crab review https://github.com/... # Full URL
80+
81+
# Court review - multi-agent tribunal with judge pattern
82+
crab court 3230 # Judge + 2 reviewers
83+
```
84+
85+
Court review uses the judge pattern: a Judge (Claude) orchestrates two independent reviewers (Claude teammate + Codex), verifies every finding against actual code, resolves disagreements, and delivers a verdict with zero false positives.
86+
87+
```bash
88+
crab review ls # List review sessions
89+
crab review show <PR> # View saved review output
90+
crab review resume <PR> # Resume a review
91+
crab review delete <PR> # Delete a review session
92+
crab review delete --all # Delete all review sessions
93+
```
94+
95+
### Ticket Integration
96+
97+
Create workspaces from Linear ticket identifiers with automatic context injection:
98+
99+
```bash
100+
crab ticket ENG-123 # Provision workspace from ticket
101+
crab ws 3 ticket ENG-123 # Bind ticket to specific workspace
102+
```
103+
104+
### P2P Messaging
105+
106+
Peer-to-peer messaging via self-hosted relay server:
107+
108+
```bash
109+
crab msg start # Start relay server
110+
crab msg @user "message" # Send message to peer
111+
crab msg read # View inbox
112+
crab msg listen # Real-time message stream
113+
crab msg say on/off # Toggle text-to-speech for incoming messages
114+
crab msg history # View message history
115+
crab msg stop # Stop relay server
53116
```
54117

55118
### Share Files
@@ -58,6 +121,7 @@ crab wip ls # List all saved states
58121
crab tk share <path> # Upload → temp URL
59122
crab tk share <path> --to slack:#channel # Share to Slack
60123
crab tk share <path> --to ssh:user@host # SSH transfer
124+
crab tk share <path> --to email:addr # Email attachment
61125
crab tk share <path> --serve # Local HTTP + QR code
62126
```
63127

@@ -69,14 +133,38 @@ crab slack #channel "message" # Post to channel
69133
crab slack read @user # View recent messages
70134
crab slack chat @user # Interactive terminal chat
71135
crab slack sent # View sent messages log
136+
crab slack users # List workspace users
72137
```
73138

74-
Requires `slack.bot_token` in `~/.crabcode/config.yaml`.
139+
Requires `slack.bot_token` in project config.
140+
141+
### Command Aliases
142+
143+
Define custom shorthand for frequently-used workflows:
144+
145+
```bash
146+
crab alias set rr restart # Set alias
147+
crab alias set d "ws 1" # Multi-word commands
148+
crab alias # List all aliases
149+
crab alias rm rr # Remove alias
150+
```
151+
152+
### Session Management
153+
154+
Track and resume named Claude conversations:
155+
156+
```bash
157+
crab session ls # List sessions
158+
crab session start "name" # Start named session
159+
crab session resume "name" # Resume existing session
160+
crab session delete "name" # Delete a session
161+
```
75162

76163
### Other Commands
77164

78165
```bash
79166
crab config # Show current configuration
167+
crab config scan # Auto-detect .env files and ports
80168
crab ports # Show port usage across workspaces
81169
crab shared # Show shared volume info
82170
crab doctor # Diagnose issues
@@ -85,13 +173,30 @@ crab cheat # Show cheat sheet
85173

86174
## Configuration
87175

88-
Config file: `~/.crabcode/config.yaml`
176+
```
177+
~/.crabcode/
178+
config.yaml # global prefs (default_project, aliases)
179+
projects/
180+
pf.yaml # per-project config
181+
cb.yaml # per-project config
182+
wip/
183+
pf/ # per-project WIP isolation
184+
cb/
185+
sessions/
186+
pf/ # per-project session storage
187+
```
188+
189+
Per-project config (`~/.crabcode/projects/<alias>.yaml`):
89190

90191
```yaml
91-
session_name: crab
192+
session_name: pf
92193
workspace_base: ~/Dev/my-project-workspaces
93194
main_repo: ~/Dev/my-project
94195

196+
workspaces:
197+
prefix: ws
198+
branch_pattern: workspace-{N}
199+
95200
# Port isolation (auto-detected by 'crab config scan')
96201
env_sync:
97202
files:
@@ -128,6 +233,9 @@ slack:
128233
- **WIP**: Save/restore your uncommitted changes across workspace resets
129234
- **Shared Volume**: A `.local/` folder that persists across resets for experiments
130235
- **Port Isolation**: Each workspace gets offset ports (ws1: 3001, ws2: 3002, etc.)
236+
- **Court Review**: Multi-agent PR review using the judge pattern (judge + 2 reviewers)
237+
- **P2P Messaging**: Self-hosted relay for developer-to-developer messaging with TTS
238+
- **Command Aliases**: User-defined shorthand stored in global config
131239

132240
## Tmux Layout
133241

@@ -147,6 +255,14 @@ Keybindings (prefix: `Ctrl+a`):
147255
- `Ctrl+a z` - Toggle zoom
148256
- `Option+arrows` - Navigate panes
149257

258+
## Requirements
259+
260+
**Core:** bash, tmux, git, [yq](https://github.com/mikefarah/yq), zip
261+
262+
**For PR reviews:** [gh](https://cli.github.com/) (GitHub CLI), [Claude Code](https://claude.ai/code) (`claude` CLI)
263+
264+
**Optional:** [Codex CLI](https://github.com/openai/codex) (for court review with Codex reviewer)
265+
150266
## Links
151267

152268
- Website: https://crabcode.dev

release-please-config.json

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json",
3+
"bootstrap-sha": "5496807d998f56cb2bed937c6707c72ef26932a0",
4+
"include-component-in-tag": false,
5+
"include-v-in-tag": true,
6+
"packages": {
7+
".": {
8+
"release-type": "simple",
9+
"package-name": "crabcode",
10+
"changelog-path": "CHANGELOG.md",
11+
"bump-minor-pre-major": true,
12+
"bump-patch-for-minor-pre-major": true,
13+
"extra-files": [
14+
{
15+
"type": "generic",
16+
"path": "src/crabcode",
17+
"glob": false
18+
}
19+
]
20+
}
21+
}
22+
}

src/crabcode

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
set -e
2929

30-
VERSION="0.9.1"
30+
VERSION="0.9.1" # x-release-please-version
3131
CONFIG_DIR="$HOME/.crabcode"
3232
CONFIG_FILE="$CONFIG_DIR/config.yaml"
3333
WIP_BASE="$CONFIG_DIR/wip"

0 commit comments

Comments
 (0)