Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
131 commits
Select commit Hold shift + click to select a range
34a2cdf
feat(ai): introduce automated model registry and runtime model selectors
moshloop Jul 8, 2026
aa114b5
feat(ai): implement native Claude and Codex CLI providers and support…
moshloop Jul 8, 2026
f71ee35
feat(ai): support synthetic lifecycle and metadata events and improve…
moshloop Jul 8, 2026
798d548
feat(session): add rich metadata tracking, turn reconstruction, and p…
moshloop Jul 8, 2026
5db3db3
feat(cli): support parallel multi-model prompt runs and codex-agent b…
moshloop Jul 8, 2026
53e8116
chore(docs): remove unused dependencies and add pnpm workspace config
moshloop Jul 9, 2026
711d682
feat(history): add TurnID, tool_search, world_state, and enhanced tok…
moshloop Jul 9, 2026
f5eba56
feat(api): add project options API and session throughput analysis
moshloop Jul 9, 2026
65572b7
feat(fe): add project scope support and refactor state management
moshloop Jul 9, 2026
db580ca
chore: update generated and lock files
moshloop Jul 9, 2026
2cf3f75
feat(ai): migrate model registry to embedded JSON with patches
moshloop Jul 9, 2026
f200db6
feat(cli): hide TokenCount events from history by default unless tool…
moshloop Jul 9, 2026
2c4b742
refactor(provider): move adaptive thinking check to ai package and no…
moshloop Jul 9, 2026
d0c8c35
feat(ai): centralize generation config with Anthropic schema sanitiza…
moshloop Jul 10, 2026
9bd4836
feat(cli): add ps command to list active agent sessions
moshloop Jul 10, 2026
725ddd8
feat(api): add SchemaRepair configuration support
moshloop Jul 10, 2026
b8b1097
feat(captain): Add ps command to list live agent sessions with cmux s…
moshloop Jul 10, 2026
4c8b10b
feat(ai): discover Codex models and reasoning efforts
moshloop Jul 10, 2026
17ac773
feat(ai): Add model-aware reasoning effort support
moshloop Jul 10, 2026
8df3fc7
fix(ai): normalize schemas for strict OpenAI outputs
moshloop Jul 10, 2026
bca9574
chore: update generated and lock files
moshloop Jul 10, 2026
03cd06d
feat(db): add Captain session and execution schema
moshloop Jul 12, 2026
57f3666
feat(ai): parse structured assistant history metadata
moshloop Jul 12, 2026
f8676cd
feat(session): surface richer session metadata and interactive questi…
moshloop Jul 12, 2026
47062b4
fix(ai): align model metadata and provider schema handling
moshloop Jul 12, 2026
116e60d
chore: update generated and lock files
moshloop Jul 12, 2026
258e91a
feat(db): add session views, triggers, and deferred provenance constr…
moshloop Jul 12, 2026
893a615
feat(ai): Broaden model fallback handling
moshloop Jul 12, 2026
3ed2cfa
feat(database): add native persistence API
moshloop Jul 12, 2026
2bbc515
feat(cli): resolve sessions and plans from native storage
moshloop Jul 12, 2026
628893c
feat(database): add durable plan review transitions
moshloop Jul 12, 2026
d22d831
feat(database): migrate legacy session cache
moshloop Jul 13, 2026
b43845a
feat(database): add process metrics and message source-line columns
moshloop Jul 13, 2026
55c681d
feat(database): add transcript ingest, process, and overview read stores
moshloop Jul 13, 2026
5675183
feat(monitor): add live session monitor with fsnotify tailing and inc…
moshloop Jul 13, 2026
5b22108
feat(cli): bootstrap native database and run the session monitor in s…
moshloop Jul 13, 2026
16e5980
feat(cli): serve session, project, and plan reads from the native dat…
moshloop Jul 13, 2026
c51bd01
feat(cli): persist prompt runs natively and tail launched transcripts
moshloop Jul 13, 2026
08d9f78
refactor(cli): remove legacy session summary cache
moshloop Jul 13, 2026
fa759f7
fix(lint): satisfy errcheck and ST1005 in migrations and database pac…
moshloop Jul 13, 2026
d059bc0
refactor: move adapter probe to pkg/ai for cross-package reuse
moshloop Jul 14, 2026
0d4402e
feat|fix|perf|refactor|test|docs|build|ci|chore|revert: support plan-…
moshloop Jul 14, 2026
f9e889c
feat
moshloop Jul 14, 2026
cf21421
refactor(tools): extract event helpers and renderers, standardize mut…
moshloop Jul 14, 2026
cd255af
feat(ai): Add support for user shell commands and wait tool in Codex …
moshloop Jul 14, 2026
a783418
feat: Add terminal outcome support for native plan and question tools
moshloop Jul 14, 2026
c236705
feat: Add database URL flag, terminal outcomes, and transcript filtering
moshloop Jul 14, 2026
c4524df
feat scope:api, body:Implement captain serve hooks API endpoint and C…
moshloop Jul 14, 2026
70d11bb
feat(monitor): add provider hooks for real-time session tracking
moshloop Jul 14, 2026
a38da30
feat: add session monitoring hooks and codex config management
moshloop Jul 14, 2026
c73ed52
chore: update generated and lock files
moshloop Jul 14, 2026
d3ffc2f
feat(claude): parse Claude command and goal records as structured events
moshloop Jul 15, 2026
1a3032d
feat(api): support prompt shorthand and execution-session binding
moshloop Jul 15, 2026
28c3297
fix(ai): handle plan terminal signals and render envelope summaries
moshloop Jul 15, 2026
7798327
feat(session): unify threaded session details and runtime metadata
moshloop Jul 15, 2026
91857aa
fix(db): avoid migration contention during transcript ingestion
moshloop Jul 16, 2026
f10bd6a
feat(attachments): add durable multimodal prompt attachments
moshloop Jul 16, 2026
36ab82e
feat(ai): Unify Codex event normalization and tool lifecycle
moshloop Jul 16, 2026
eac634a
fix(ai): enforce budgets and preserve provider cost accounting
moshloop Jul 16, 2026
f14a528
feat(api): add compact model and fallback configuration syntax
moshloop Jul 16, 2026
2a52a50
fix(monitor): use cleaned paths after hook transcript validation
moshloop Jul 16, 2026
5eb8f9e
chore(claude): Normalize import ordering in reader command tests
moshloop Jul 16, 2026
223947a
feat(ai): Expose backend-compatible model input media types
moshloop Jul 16, 2026
0c15680
chore: update generated and lock files
moshloop Jul 16, 2026
c51462a
fix(security): satisfy CodeQL path-injection and allocation-overflow
moshloop Jul 16, 2026
84f69a7
ci: warm embedded-postgres binary cache before parallel DB tests
moshloop Jul 16, 2026
7451ac6
fix(security): make hook path traversal check a standalone guard
moshloop Jul 16, 2026
4fdcd5d
ci: run tests serially to avoid embedded-postgres port and download r…
moshloop Jul 16, 2026
4cf8b69
feat(cli): add interactive prompt chat and run controls
moshloop Jul 16, 2026
6287e11
feat(prompt-runs): feat
moshloop Jul 16, 2026
ccd62c1
feat(ai): support provider lifecycle controls and safe model effort h…
moshloop Jul 16, 2026
68d2427
feat(webapp): add live session chat controls
moshloop Jul 16, 2026
417ce72
chore: update generated and lock files
moshloop Jul 16, 2026
0c94f51
refactor(db): remove legacy session cutover from migrations
moshloop Jul 16, 2026
c710f88
refactor(db): remove legacy session cache cutover
moshloop Jul 16, 2026
ce019ff
feat(ai): add AI adapter diagnostics and concrete runtime selection
moshloop Jul 16, 2026
c8ac467
feat(api): support caller-supplied tools and approval preferences
moshloop Jul 16, 2026
f47896b
feat(db): add partial lifecycle and hierarchical session retrieval
moshloop Jul 16, 2026
47c2d67
fix(ai): keep preferred backend models visible
moshloop Jul 16, 2026
daf9a1e
feat(ai): add caller-tool execution to Genkit providers
moshloop Jul 16, 2026
7a9483a
feat(cli): add durable multi-model prompt batch sessions
moshloop Jul 16, 2026
bbea991
feat(fe): Add multi-model prompt runs
moshloop Jul 16, 2026
7bb259c
build(webapp): Refresh bundled webapp assets
moshloop Jul 16, 2026
b74c477
fix(cli): anchor session change paths to the tool use's cwd
moshloop Jul 16, 2026
864089b
perf(sessions): bound overview queries
moshloop Jul 16, 2026
a3abb57
fix(database): use stable test connection config
moshloop Jul 16, 2026
8339423
perf(database): replace outbox with activity projection
moshloop Jul 16, 2026
a33a71e
refactor(database): make migrations explicit
moshloop Jul 16, 2026
ea7244d
fix(history): normalize codex reasoning and message twins
moshloop Jul 16, 2026
4b2442a
feat(ai): configure provider models and credentials
moshloop Jul 16, 2026
2898620
refactor(ai): model providers as descriptors, not duplicated switches
moshloop Jul 17, 2026
466fee6
feat(ai): Update provider defaults and remove Grok mode
moshloop Jul 17, 2026
781ed4f
feat(ai): Add resumable tool approvals and canonical conversations
moshloop Jul 17, 2026
be85ec2
feat(aichat): add AI SDK chat transport and MCP-backed service
moshloop Jul 17, 2026
127914f
refactor(cli): split prompt entity implementation into focused modules
moshloop Jul 17, 2026
9db9d9d
fix(api): Omit empty prompt specification fields during serialization
moshloop Jul 17, 2026
1cc7db8
fix(ai): resolve the bare codex sentinel on the api mode
moshloop Jul 17, 2026
f2afde7
refactor(ai): extract model flag parsing into pkg/aiflags
moshloop Jul 17, 2026
dac574f
refactor(aichat)!: drop RuntimeSettings.DefaultModel for Spec.Model
moshloop Jul 17, 2026
eb6dafb
refactor(ai): drop single-letter shorthands from ModelFlags
moshloop Jul 17, 2026
c8d82f2
chore: update generated and lock files
moshloop Jul 20, 2026
4683831
fix(claude): prevent duplicate skill listing counts
moshloop Jul 20, 2026
d0610bc
feat(cli): add prompt runtime matrices and session discovery tooling
moshloop Jul 20, 2026
d5ea232
chore: update generated and lock files
moshloop Jul 20, 2026
a0e0e23
fix(cli): classify mutations and expose detailed session timings
moshloop Jul 20, 2026
e587f1e
feat(session): Capture normalized task lists in sessions
moshloop Jul 21, 2026
a8f7923
feat(cli): detect active agent sessions in info
moshloop Jul 21, 2026
cc2d96a
fix(security): harden workspace tooling and dependency boundaries
moshloop Jul 22, 2026
5207e29
test(pricing): Rename static pricing test to catalog
moshloop Jul 26, 2026
7505d11
fix(ai): price models from the generated catalog
moshloop Jul 26, 2026
c25e642
feat(prompt): Expose schemas in rendered prompt requests
moshloop Jul 26, 2026
900eb1b
perf(db): Optimize session and ingest table storage maintenance
moshloop Jul 26, 2026
e320eef
fix(history): suppress duplicate session titles and storage warnings
moshloop Jul 26, 2026
b95ea66
fix(cli): harden catalog paths and task stream registration
moshloop Jul 26, 2026
0f0f995
fix(fe): fix
moshloop Jul 26, 2026
ff9225e
feat(ai): support Gemini CLI streaming and structured output
moshloop Jul 26, 2026
bd89c3c
feat(aichat): migrate MCP providers to native client sessions
moshloop Jul 26, 2026
7ef43e7
perf(ingest): Batch transcript writes and resume from source high-wat…
moshloop Jul 26, 2026
1ba56f0
perf(db): optimize session lookups and prune dead indexes
moshloop Jul 26, 2026
5e0b2b4
chore: update generated and lock files
moshloop Jul 26, 2026
e17b2e3
build(deps): align Clicky release candidate
moshloop Jul 26, 2026
628a72b
fix(security): harden credential and path handling
moshloop Jul 26, 2026
0c9237b
fix(webapp): restore schema validity on remount
moshloop Jul 26, 2026
58d94d1
style: format Go sources
moshloop Jul 26, 2026
79f40b8
fix(security): confine transcript stat calls
moshloop Jul 26, 2026
b1e9d44
fix(sessions): preserve bounded list counts
moshloop Jul 26, 2026
11d1344
test(cli): configure batch database fixtures
moshloop Jul 26, 2026
2223fd2
fix(claude): confine project marker reads
moshloop Jul 26, 2026
7794af3
fix(security): confine info RPC paths
moshloop Jul 26, 2026
77fd207
fix(claude): reject project path traversal
moshloop Jul 26, 2026
7cdf2e3
build(deps): use Clicky v1.21.48
moshloop Jul 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
17 changes: 16 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,22 @@ jobs:
- uses: actions/setup-go@v5
with:
go-version: "1.26.x"
- run: go test ./...
# Persist the embedded-postgres binary so most runs skip the download
# entirely. The version is pinned by the embedded-postgres library (V16).
- name: Cache embedded-postgres binary
uses: actions/cache@v4
with:
path: ~/.embedded-postgres-go
key: embedded-postgres-${{ runner.os }}-16.9.0
# The DB integration tests each start their own embedded postgres. Run
# packages serially (-p 1): concurrent StartEmbedded calls otherwise race
# the shared cold-cache Maven download (throttled -> "no version found
# matching 16.9.0") and collide on ports (FreePort closes the listener
# before postgres binds), which fails StartEmbedded with the server never
# becoming ready.
- run: go test -p 1 ./...
env:
CAPTAIN_DB_EMBEDDED_TEST: "1"

build:
runs-on: ubuntu-latest
Expand Down
72 changes: 72 additions & 0 deletions .github/workflows/update-llm-model-registry.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
name: Update LLM Model Registry

on:
schedule:
- cron: "0 3 * * 1"
workflow_dispatch:

permissions:
contents: write
pull-requests: write

concurrency:
group: update-llm-model-registry
cancel-in-progress: false

jobs:
update:
runs-on: ubuntu-latest
env:
PR_BRANCH: chore/update-llm-model-registry

steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.event.repository.default_branch }}

- name: Install Go
uses: actions/setup-go@v5
with:
go-version: "1.26.x"

- name: Generate model registry
run: make models-update

- name: Check for registry changes
id: changes
run: |
if git diff --quiet -- pkg/api/registry/models.json; then
echo "changed=false" >> "$GITHUB_OUTPUT"
else
git diff --stat -- pkg/api/registry/models.json
echo "changed=true" >> "$GITHUB_OUTPUT"
fi

- name: Commit and push registry update
if: steps.changes.outputs.changed == 'true'
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git checkout -B "$PR_BRANCH"
git add pkg/api/registry/models.json
git commit -m "chore: update llm model registry"
git push --force-with-lease origin "$PR_BRANCH"

- name: Create pull request
if: steps.changes.outputs.changed == 'true'
env:
GH_TOKEN: ${{ github.token }}
run: |
if gh pr view "$PR_BRANCH" --repo "${{ github.repository }}" >/dev/null 2>&1; then
echo "Pull request already exists for $PR_BRANCH"
exit 0
fi

gh pr create \
--repo "${{ github.repository }}" \
--base "${{ github.event.repository.default_branch }}" \
--head "$PR_BRANCH" \
--title "chore: update llm model registry" \
--body "Automated update from models.dev using \`make generate-llm-model-registry\`."
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ pkg/cli/webapp/node_modules/
pkg/cli/webapp/*.tsbuildinfo
# goreleaser output at repo root.
/dist/
dist/
# The built webapp under pkg/cli/webapp/dist is gitignored — it's a large
# minified bundle whose vite build needs a local clicky-ui link: dependency
# that isn't available in CI. A global `dist/` ignore excludes the directory,
Expand All @@ -23,6 +24,8 @@ pkg/cli/webapp/*.tsbuildinfo
!pkg/cli/webapp/dist/
pkg/cli/webapp/dist/*
!pkg/cli/webapp/dist/.gitkeep
!pkg/cli/webapp/dist/index.html
.grite/
hack/
.ok/
.okignore
.ginkgo/
14 changes: 14 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# captain — agent notes

Shared ways of working, the gavel todo workflow, and global skills come from the root ~/.agents/AGENTS.md.

## Memory
- [Commons-db migrations (HCL + SQL)](.agents/memory/commons-db-migrations.md) — HCL for tables, post-HCL SQL for views/triggers/deferred constraints; verify with a seeded PostgreSQL smoke, not dry apply.
- [AI model fallback, recommendations & whoami catalogs](.agents/memory/ai-model-catalog-fallback.md) — IsFallbackEligible/ErrNoAPIKey classification in pkg/ai, per-family model retention in model_lists.go, keyless cmux backends in whoami.
- [AI schema shaping, generation config & runtime logging](.agents/memory/ai-schema-generation-logging.md) — SchemaJSONForBackend provider transforms vs local validation, EffortConfig in generation_config.go, agent:model[:effort] log identity.
- [Commit grouping for mixed Captain diffs](.agents/memory/commit-grouping.md) — group by semantic product slice not directory tree, tests travel with features, every file accounted for exactly once.
- [Session viewer, Codex/Claude parsing & model normalization](.agents/memory/sessions-viewer-metadata.md) — SessionBrowser/SessionInspector seams, shared Codex extraction, synthetic event tools, unified Title/InitialPrompt derivation.
- [History discovery, performance & bash categorization](.agents/memory/history-discovery-performance.md) — case-insensitive session-dir matching in both finders, prune Claude/Codex discovery early, pkg/bash priority-based classification.
- [Prompt CLI runs: JSON contract, context.dir, run tables & Codex app-server](.agents/memory/prompt-cli-runs.md) — AIPromptResult full-request JSON, context.dir normalization into cmd.Dir, -M comparison tables, app-server JSON-RPC seams.
- [Prompt workbench, serve UI, catalog & backend modes](.agents/memory/prompt-workbench-serve-ui.md) — captain serve hosts the workbench, catalog-backed family-first selectors, cmux-style backend modes land across four seams, rebuild linked clicky-ui dist.
- [Lint cleanup: gavel lint sweeps & betterleaks fixes](.agents/memory/lint-cleanup.md) — snapshot gavel lint baseline, split by ownership slices, betterleaks comment hits fixed by neutral wording.
5 changes: 4 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Makefile stub - forwards to Taskfile
# Install task: https://taskfile.dev/installation/

.PHONY: build lint test install fmt tidy clean all
.PHONY: build lint test install fmt tidy clean all models-update

build:
@task build
Expand All @@ -26,3 +26,6 @@ clean:

all:
@task all

models-update:
@task models:update
57 changes: 53 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,46 @@ It provides tools to:
- run a web UI for launching and chatting with AI agents
- configure default backend, model, and AI safety toggles

```xml h=185px w=358px preview
<div style="font-family:system-ui,sans-serif;padding:20px;color:var(--foreground)">
<label for="amt" style="font-size:14px;font-weight:600">Monthly budget</label>
<div id="out" style="font-size:30px;font-weight:700;color:var(--chart-1);margin:6px 0">$2,500</div>
<input id="amt" type="range" min="500" max="10000" step="100" value="2500"
style="width:100%;accent-color:var(--primary)" />
<p style="font-size:13px;color:var(--muted-foreground)">Drag to adjust — the figure updates live.</p>
<script>
var amt = document.getElementById('amt');
var out = document.getElementById('out');
amt.addEventListener('input', function () {
out.textContent = '$' + Number(amt.value).toLocaleString();
});
</script>
</div>
```

```html preview
<div style="font-family:system-ui,sans-serif;padding:20px">
<div id="cards" style="display:flex;gap:14px;flex-wrap:wrap"></div>
<script>
var stats = [
['Active users', '12,480', '+8.2% MoM', 'var(--chart-2)'],
['Revenue', '$48.2k', '+3.1% MoM', 'var(--chart-1)'],
['Churn', '2.4%', '-0.5% MoM', 'var(--chart-5)']
];
document.getElementById('cards').innerHTML = stats.map(function (s) {
return '<div style="flex:1;min-width:150px;padding:16px;background:var(--card);' +
'color:var(--card-foreground);border:1px solid var(--border);' +
'border-radius:var(--radius)">' +
'<div style="font-size:13px;color:var(--muted-foreground)">' + s[0] + '</div>' +
'<div style="font-size:26px;font-weight:700;margin-top:4px">' + s[1] + '</div>' +
'<div style="font-size:12px;font-weight:600;margin-top:4px;color:' + s[3] + '">' +
s[2] + '</div>' +
'</div>';
}).join('');
</script>
</div>
```

## What it does

From the codebase, Captain is organized around a few core capabilities:
Expand Down Expand Up @@ -93,7 +133,7 @@ Supported backends are inferred from code and dependencies, including:
### 6. Adapter status and configuration

- `whoami` — lists every AI adapter (API providers and CLI agents), how each is authenticated, whether its binary is installed, and the models it exposes
- `configure` — interactive wizard to set default backend, model, reasoning effort, budget, timeout, and feature toggles (caching, MCP, hooks, skills, user/project settings, memory) saved to `~/.captain.yaml`
- `configure` — configure per-provider agent, model, and effort defaults in `~/.captain.yaml`, or validate and save direct-provider API tokens in `~/.config/captain/vault`

### 7. Web UI and MCP server

Expand Down Expand Up @@ -459,9 +499,18 @@ Lists every AI adapter (API providers and CLI agents: `anthropic`, `openai`, `ge

```bash
captain configure
captain configure openai
captain configure openai --test
captain configure openai --agent codex-agent --model gpt-5.6-sol --effort high --active
```

Interactive wizard that writes `~/.captain.yaml` with defaults for backend, model, reasoning effort, budget, timeout, and feature toggles (caching, MCP, hooks, skills, user/project settings, memory). These defaults apply to `captain ai prompt`, `captain ai agent`, `captain ai test`, and other AI commands.
The providerless interactive wizard writes `~/.captain.yaml` with defaults for backend, model, reasoning effort, budget, timeout, and feature toggles (caching, MCP, hooks, skills, user/project settings, memory).

With a provider and any of `--agent`, `--model`, `--effort`, or `--active`, `configure` saves provider-specific runtime defaults in `~/.captain.yaml`. `--effort default` clears an explicit effort so the selected model chooses its own default. The active provider supplies the agent and model for completely flagless runs. Explicit command flags still win, and each fallback model independently inherits defaults from its own provider.

Passing `anthropic`, `openai`, `gemini`, or `deepseek` securely prompts for an API token, validates it with the provider's model-list endpoint, and saves it to `~/.config/captain/vault` only when validation succeeds. `--test` validates the currently effective token without writing. Automation may use `--token`, but interactive input is preferred because command-line arguments can be retained in shell history or process listings. Explicit runtime keys take precedence over the vault, and the vault takes precedence over environment variables.

The `/whoami` page in `captain serve` exposes the same token operations plus agent, model, effort, and active-provider controls. Stored tokens are never displayed; only a masked identifier and credential source are returned.

### Serve

Expand All @@ -474,7 +523,7 @@ task www:dev
task www:build
```

Starts an HTTP API and embedded web UI. The UI launches `captain ai agent` operations and opens follow-up chat windows that resume the returned session. `--dev` starts the Vite dev server from `pkg/cli/webapp` and proxies `/api` back to the Go process. Use `task www:dev` for the local Go-backed Vite proxy with the browser opened, and `task www:build` to rebuild the embedded web UI assets.
Starts an HTTP API and embedded web UI. The UI launches `captain ai agent` operations and opens follow-up chat windows that resume the returned session. `--dev` starts the Vite dev server from `pkg/cli/webapp`, binds the Go API to a random free port, and proxies `/api` to it. Pass `--port` to use a specific API port in development. Use `task www:dev` for the local Go-backed Vite proxy with the browser opened, and `task www:build` to rebuild the embedded web UI assets.

### MCP server

Expand Down Expand Up @@ -610,4 +659,4 @@ Start the web UI:
- It is both an analysis tool and an execution/control tool.
- The container/sandbox functionality is a major part of the project, not a side feature.
- Many commands assume the presence of Claude local state under the user’s Claude config/projects directories.
- Configuration is persisted to `~/.captain.yaml` via `captain configure`.
- Runtime defaults are persisted to `~/.captain.yaml`; validated provider tokens are persisted separately to the private `~/.config/captain/vault` file.
5 changes: 5 additions & 0 deletions Taskfile.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,11 @@ tasks:
cmds:
- go mod tidy

models:update:
desc: Regenerate the embedded LLM model registry from models.dev + local patches
cmds:
- go run ./pkg/ai/internal/gen-model-registry --patches pkg/ai/internal/gen-model-registry/patches.json --output pkg/api/registry/models.json

clean:
desc: Remove build artifacts
cmds:
Expand Down
Loading
Loading