Problem
ccx web always opens http://localhost:8080/ — the index page. When you already know what you want to look at, you have to click through the UI to get there. Common cases:
- Open a specific project: you're in a project directory and want its session list
- Open a specific session: you have a session ID (from
ccx sessions output or --continue picker)
- Open the latest session: the most common "check what just happened" flow
Proposal
New flags on ccx web
# Open browser directly to the current workspace's project page
ccx web --project
# or explicit path
ccx web --project /path/to/repo
# Open browser directly to a specific session
ccx web --session <uuid-or-short-id>
# Open browser to the most recent session (current workspace)
ccx web --latest
Behavior
- If web server is already running on the expected port: just open the browser to the deep-link URL, don't start a second server. Detect via a quick
http://localhost:{port}/api/stats health check.
- If not running: start the server, then open to the deep-link URL.
URL mapping
| Flag |
URL |
--project (inferred) |
/project/{workspace-slug} |
--project /path |
/project/{slug-for-path} |
--session abc123 |
/session/{project-slug}/{full-uuid} (resolve short ID to full) |
--latest |
/session/{project-slug}/{latest-session-id} |
| (no flag, default) |
/ (current behavior) |
Short ID resolution
ccx sessions already shows truncated UUIDs. The --session flag should accept either:
- Full UUID:
a1c0e89d-a680-4cac-9b0d-76da733b1020
- Short prefix:
a1c0e89d (resolve by prefix match within workspace, error on ambiguity)
Implementation sketch
- Add
--project, --session, --latest flags to web.go
- Add a
resolveDeepLink() helper that computes the target URL path
- Before starting the server, probe
http://{host}:{port}/api/stats — if it responds, skip web.Serve() and just openBrowser(url + path)
- Short ID resolution: scan session filenames in the project dir for prefix match
Naming note
Considered --continue (mirrors claude --continue) but that's a Go keyword and could confuse. --latest is clearer — it means "most recent session in this workspace."
Non-goals
- No
--all mode (opening all projects) — the index page handles that
- No attaching to a remote ccx server — localhost only for now
Problem
ccx webalways openshttp://localhost:8080/— the index page. When you already know what you want to look at, you have to click through the UI to get there. Common cases:ccx sessionsoutput or--continuepicker)Proposal
New flags on
ccx webBehavior
http://localhost:{port}/api/statshealth check.URL mapping
--project(inferred)/project/{workspace-slug}--project /path/project/{slug-for-path}--session abc123/session/{project-slug}/{full-uuid}(resolve short ID to full)--latest/session/{project-slug}/{latest-session-id}/(current behavior)Short ID resolution
ccx sessionsalready shows truncated UUIDs. The--sessionflag should accept either:a1c0e89d-a680-4cac-9b0d-76da733b1020a1c0e89d(resolve by prefix match within workspace, error on ambiguity)Implementation sketch
--project,--session,--latestflags toweb.goresolveDeepLink()helper that computes the target URL pathhttp://{host}:{port}/api/stats— if it responds, skipweb.Serve()and justopenBrowser(url + path)Naming note
Considered
--continue(mirrorsclaude --continue) but that's a Go keyword and could confuse.--latestis clearer — it means "most recent session in this workspace."Non-goals
--allmode (opening all projects) — the index page handles that