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
1 change: 1 addition & 0 deletions plugins/compound-engineering/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ The primary entry points for engineering work, invoked as slash commands. Detail
| Skill | Description |
|-------|-------------|
| [`ce-polish-beta`](../../docs/skills/ce-polish-beta.md) | Human-in-the-loop polish phase after /ce-code-review — verifies review + CI, starts a dev server from `.claude/launch.json`, generates a testable checklist, and dispatches polish sub-agents for fixes. Emits stacked-PR seeds for oversized work |
| `ce-dogfood-beta` | Diff-scoped browser QA of the active branch: builds an exhaustive test matrix of every change, drives the app with agent-browser, then auto-fixes issues, adds regression tests, and commits each fix until green |
| `/lfg` | Full autonomous engineering workflow |

## Agents
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,10 @@ If `agent-browser` is not installed, inform the user: "`agent-browser` is not in
- Check `Gemfile` for Rails (`bin/rails server`) or Sinatra
- Check for running processes on common ports (3000, 5000, 8080)

If the server is not running, tell the user what start command was detected and ask them to start it. Do not start it automatically (it may require environment variables, database setup, etc.).
If the server is not running:

- **Headless / background mode** (no blocking question tool available): try starting the server automatically using the detected start command in a background process. For Rails apps, run `bin/dev` or `bin/rails server` in the background. Poll until port 3000 (or the detected port) is accepting connections (max 30s). If it doesn't come up, fall back to static screenshots tier. Track the server PID so you can stop it in Step 4 cleanup.
- **Interactive mode**: tell the user what start command was detected and ask them to start it. Do not start it automatically (it may require environment variables, database setup, etc.).

If the server cannot be reached after the user confirms it should be running, fall back to static screenshots tier.

Expand Down Expand Up @@ -115,6 +118,6 @@ python3 scripts/capture-demo.py stitch --duration 2.0 [RUN_DIR]/demo.gif [RUN_DI

Before uploading, inspect the final GIF for any credential material visible on-screen. If any appears, discard the GIF and recapture with the offending page or state routed out of frame. Do not upload, do not blur.

After a clean GIF is confirmed, remove individual PNG frames. Keep only the final GIF for upload.
After a clean GIF is confirmed, remove individual PNG frames. Keep only the final GIF for upload. If you auto-started the dev server in Step 1 (headless mode), stop it now using the tracked PID.

Proceed to `references/upload-and-approval.md`.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

Upload a temporary preview for the user to review, then either promote to permanent hosting or save locally based on user choice.

## Headless / Background Mode

If no blocking question tool is available (Codex running autonomously, background agent, or any mode where there is no synchronous user), skip Steps 1–2 and go straight to headless upload:

1. **R2 available** (`R2_ACCESS_KEY_ID`, `R2_SECRET_ACCESS_KEY`, `R2_BUCKET`, `R2_ENDPOINT`, `R2_PUBLIC_URL` all set): upload to R2 and use the public URL. Proceed to Step 3-R2.
2. **R2 not available**: upload directly to catbox permanent hosting without a preview step. Proceed to Step 3.

## Step 1: Preview Upload (Temporary)

Upload the evidence file (GIF or PNG) to litterbox for a temporary 1-hour preview:
Expand All @@ -23,16 +30,21 @@ Present the preview URL to the user and ask how to handle the evidence. Use the
**Question:** "Evidence preview (1h link): [PREVIEW_URL]. Where should the evidence go?"

**Options:**
1. **Upload to catbox (public URL)** -- promote to permanent hosting for PR embedding
2. **Save locally** -- save to a stable OS-temp path (/tmp/compound-engineering/ce-demo-reel/)
3. **Recapture** -- provide instructions on what to change
4. **Proceed without evidence** -- set evidence to null and proceed
1. **Upload to R2 (public URL)** -- upload to Cloudflare R2 for permanent PR embedding (available when R2 env vars are set)
2. **Upload to catbox (public URL)** -- promote to catbox permanent hosting for PR embedding
3. **Save locally** -- save to a stable OS-temp path (/tmp/compound-engineering/ce-demo-reel/)
4. **Recapture** -- provide instructions on what to change
5. **Proceed without evidence** -- set evidence to null and proceed
Comment on lines +33 to +37
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Avoid 5-option blocking menu in upload destination step

This menu now defines 5 options while still directing use of blocking question tools; in this repo's guidance, plugins/compound-engineering/AGENTS.md documents a 4-option cap for these tools and requires numbered-chat fallback for true overflow cases. Keeping 5 options here can cause tool-call failure or truncated choices in capped harnesses, which can prevent users from selecting the intended destination path (for example Proceed without evidence).

Useful? React with 👍 / 👎.


Omit option 1 if R2 env vars (`R2_ACCESS_KEY_ID`, `R2_BUCKET`, `R2_ENDPOINT`, `R2_PUBLIC_URL`) are not set.

If the question tool is unavailable (headless/background mode), present the numbered options and wait for the user's reply before proceeding.
### On "Upload to R2 (public URL)"

Proceed to Step 3-R2: R2 Upload.

### On "Upload to catbox (public URL)"

Proceed to Step 3: Promote to Permanent Hosting.
Proceed to Step 3: Promote to Permanent Hosting (catbox).

### On "Save locally"

Expand All @@ -46,7 +58,7 @@ Return to the tier execution step. The user's instructions guide what to change

Set evidence to null and proceed. The preview link expires on its own.

## Step 3: Promote to Permanent Hosting
## Step 3: Promote to Permanent Hosting (catbox)

After the user selects "Upload to catbox", upload to permanent catbox hosting. The command accepts either the preview URL (preferred) or the local file path (fallback):

Expand All @@ -60,6 +72,27 @@ The last line of output is the permanent URL (e.g., `https://files.catbox.moe/ab

For multiple files, promote each separately.

## Step 3-R2: R2 Upload

Upload the artifact to Cloudflare R2 using the AWS CLI:

```bash
KEY="ce-demo-reel/$(date +%Y%m%d-%H%M%S)-$(basename [ARTIFACT_PATH])"
AWS_ACCESS_KEY_ID="$R2_ACCESS_KEY_ID" \
AWS_SECRET_ACCESS_KEY="$R2_SECRET_ACCESS_KEY" \
aws s3 cp [ARTIFACT_PATH] "s3://$R2_BUCKET/$KEY" \
--endpoint-url "https://$R2_ENDPOINT" \
--content-type "image/gif"
```

Adjust `--content-type` to `image/png` for static screenshots.

The permanent public URL is: `$R2_PUBLIC_URL/$KEY`

**If upload fails** (aws CLI not available, credentials invalid), fall back to catbox (Step 3) and note the fallback reason.

For multiple files, upload each separately with a unique key.

## Step 3b: Local Save

After the user selects "Save locally", save the artifact to the default OS-temp path using the pipeline script:
Expand All @@ -78,7 +111,7 @@ For multiple files (static screenshots tier), save each file separately.

## Step 4: Return Output

Return the structured output defined in the SKILL.md Output section: `Tier`, `Description`, and either `URL` (permanent catbox URL) or `Path` (local file path). The caller formats the evidence into the PR description. ce-demo-reel does not generate markdown.
Return the structured output defined in the SKILL.md Output section: `Tier`, `Description`, and either `URL` (permanent public URL) or `Path` (local file path). The caller formats the evidence into the PR description. ce-demo-reel does not generate markdown.

## Step 5: Cleanup

Expand Down
Loading