Skip to content
Merged
Show file tree
Hide file tree
Changes from 250 commits
Commits
Show all changes
1588 commits
Select commit Hold shift + click to select a range
4202bfd
fix(runner): fail loud on an unresolvable requested model (F-007)
mmabrouk Jul 11, 2026
a8257c9
fix(sdk): surface gateway tool-resolution detail (F-019) (#5237)
mmabrouk Jul 11, 2026
d078d1d
refactor(runner): extract relay-client and relay-protocol from the re…
mmabrouk Jul 11, 2026
2ed4253
feat(runner): atomic relay publication + in-sandbox response watch (h…
mmabrouk Jul 11, 2026
bc96aa9
feat(runner): event-driven Daytona relay watch behind a flag (hop 2)
mmabrouk Jul 12, 2026
b857f07
feat(runner): orphan-request snapshot + relay_pickup telemetry
mmabrouk Jul 12, 2026
330efd7
docs(agent-workflows): sync relay docs with the event-driven relay
mmabrouk Jul 12, 2026
a1ec038
fix(runner): harden the relay watch per the code-review round
mmabrouk Jul 12, 2026
afb00d4
feat(runner): deliver gateway tools to Claude on Daytona via an in-sa…
mmabrouk Jul 12, 2026
5cdd68b
feat(runner): wire the in-sandbox shim into the engine + reserve the …
mmabrouk Jul 12, 2026
1c854d1
test(runner): make the layering pin auth-free so the lane stands alone
mmabrouk Jul 12, 2026
0fb9186
docs(agent-workflows): sync the tool docs with the in-sandbox stdio M…
mmabrouk Jul 12, 2026
a4bfef2
fix(tests): update navigation to Test Sets page to use project-scoped…
bekossy Jul 12, 2026
6665530
[5246] fix(frontend): keep the agent chat draft when committing a rev…
ardaerzin Jul 12, 2026
910c20c
Merge pull request #5250 from Agenta-AI/fe-fix/5246-agent-commit-clea…
ardaerzin Jul 12, 2026
678dff6
Merge branch 'big-agents' into feat-big-agents-rename-session-and-agent
ashrafchowdury Jul 12, 2026
a5c8401
feat(frontend): rebuild the template chip morph with Motion
ardaerzin Jul 12, 2026
4770ae1
feat(frontend): animate the agent session bar and rail with Motion
ardaerzin Jul 12, 2026
d9a794f
feat: enhance session renaming functionality with pencil icon and imp…
ashrafchowdury Jul 12, 2026
08052c4
fix(frontend): address review on the Motion transitions
ardaerzin Jul 12, 2026
729e945
Merge pull request #5252 from Agenta-AI/fe-refactor/add-motion-transi…
ardaerzin Jul 12, 2026
49b9954
Merge branch 'big-agents' into feat-big-agents-rename-session-and-agent
ashrafchowdury Jul 12, 2026
c3b6797
fix(tests): update prompts navigation and test IDs for new prompt cre…
bekossy Jul 12, 2026
cc07623
Merge pull request #5202 from Agenta-AI/feat-big-agents-rename-sessio…
mmabrouk Jul 12, 2026
3f46b64
fix(runner): omit client tools from Daytona MCP shim
mmabrouk Jul 12, 2026
27803c2
fix(runner): safe hardening from the stack review pass
mmabrouk Jul 12, 2026
43ed55a
feat(runner): authenticate the internal MCP loopback endpoint (WP1)
mmabrouk Jul 12, 2026
fff45dc
test(runner): cover omitted Daytona client tools
mmabrouk Jul 12, 2026
10498e4
docs(design): plan a curated model-catalog schema published via /inspect
mmabrouk Jul 12, 2026
48d6c3b
docs(design): address review — drop the advertised flag, correct mode…
mmabrouk Jul 12, 2026
a37fc09
feat(sdk): implement the model-catalog schema (WP1-3)
mmabrouk Jul 12, 2026
8b2847b
chore(skill): add the sync-model-catalog skill to the PR
mmabrouk Jul 12, 2026
fac8ba8
feat(frontend): single-click starts the app-trigger test capture
ardaerzin Jul 12, 2026
2394081
fix(frontend): label the skill editor source toggle 'Source', not 'Ma…
ardaerzin Jul 12, 2026
e64ba00
fix(api): trigger test-event no longer 500s and reuses an existing li…
ardaerzin Jul 12, 2026
d5e1a04
feat(frontend): elicitation stepper shows Next until review, Accept o…
ardaerzin Jul 12, 2026
2f3ea2e
feat(frontend): paste a SKILL.md to auto-fill skill name/description/…
ardaerzin Jul 12, 2026
4e241ff
feat(frontend): auto-expand agent config list sections when the agent…
ardaerzin Jul 12, 2026
a5f149b
fix(frontend): scroll the build-mode sessions tab row with the mouse …
ardaerzin Jul 12, 2026
93be917
feat(frontend): dismiss the trigger drawer after a trigger is created
ardaerzin Jul 12, 2026
4084955
feat(frontend): show real keyboard-shortcut hints under the elicitati…
ardaerzin Jul 12, 2026
b870500
feat(frontend): show submitted elicitation answers in a collapsible s…
ardaerzin Jul 12, 2026
0248e53
feat(sdk): add Fable to the Claude harness model catalog
mmabrouk Jul 12, 2026
8e927fc
Merge pull request #5243 from Agenta-AI/feat-event-driven-tool-relay
mmabrouk Jul 12, 2026
f0208e0
Merge pull request #5245 from Agenta-AI/feat-client-tool-continuation-v1
mmabrouk Jul 12, 2026
f6711bc
Merge pull request #5257 from Agenta-AI/docs/model-catalog-schema
mmabrouk Jul 12, 2026
fc06269
Merge pull request #5248 from Agenta-AI/feat-stack-review-fixes
mmabrouk Jul 12, 2026
90792a1
fix(runner): resolve a bare Claude alias to its [1m] harness variant
mmabrouk Jul 12, 2026
d6339a2
Merge pull request #5240 from Agenta-AI/fix/strict-model-resolution
mmabrouk Jul 12, 2026
906094f
Merge pull request #5238 from Agenta-AI/fix/provider-env-var-names
mmabrouk Jul 12, 2026
2ae5f9e
Merge pull request #5239 from Agenta-AI/fix/agent-selector-fail-loud
mmabrouk Jul 12, 2026
33ac81e
chore(frontend): condense the drawer-paste comment to one line
ardaerzin Jul 12, 2026
e2b5d74
feat(frontend): browse and preview mount files in the session inspector
mmabrouk Jul 10, 2026
fe6bb25
fix(frontend): compute section crossings over the union of keys
ardaerzin Jul 12, 2026
b381dde
fix(frontend): use a non-passive wheel listener so preventDefault wor…
ardaerzin Jul 12, 2026
f25eb29
fix(api): reuse the exact colliding subscription by trigger_id (delet…
ardaerzin Jul 12, 2026
210eee1
fix(frontend): guard EventSourcePicker wait() against unhandled rejec…
ardaerzin Jul 12, 2026
9280e0d
Merge pull request #5258 from Agenta-AI/fe-fixes/agent-skills-drawer
ardaerzin Jul 12, 2026
efef25a
Merge pull request #5260 from Agenta-AI/fe-fixes/agent-config-auto-ex…
ardaerzin Jul 12, 2026
1d31c1a
Merge branch 'big-agents' into fe-fixes/agent-sessions-bar
ardaerzin Jul 12, 2026
6388848
Merge pull request #5261 from Agenta-AI/fe-fixes/agent-sessions-bar
ardaerzin Jul 12, 2026
c00a2ab
Merge branch 'big-agents' into fe-fixes/agent-elicitation
ardaerzin Jul 12, 2026
ed20dee
Merge pull request #5262 from Agenta-AI/fe-fixes/agent-elicitation
ardaerzin Jul 12, 2026
1b012bc
fix(api): classify the trigger-id unique violation by constraint name…
ardaerzin Jul 12, 2026
aa54a7b
Merge branch 'big-agents' into fe-fixes/agent-triggers
ardaerzin Jul 12, 2026
3b1db8c
Merge pull request #5259 from Agenta-AI/fe-fixes/agent-triggers
ardaerzin Jul 12, 2026
ca21ad1
[fix] Route known custom providers directly (#5265)
mmabrouk Jul 13, 2026
a0d9d03
fix(sdk): preserve invoke auth without trace context (#5266)
mmabrouk Jul 13, 2026
c7f2c12
[fix] Drain approval events before done (#5267)
mmabrouk Jul 13, 2026
b6c4947
fix(frontend): make the mount viewer accessible
mmabrouk Jul 13, 2026
51140f8
feat(platform): add durable files shared across agent sessions
mmabrouk Jul 13, 2026
f2b56dd
Merge pull request #5204 from Agenta-AI/feat/mount-file-viewer
mmabrouk Jul 13, 2026
238fb4f
Merge pull request #5268 from Agenta-AI/feat/agent-mounts-v2
mmabrouk Jul 13, 2026
f5a20ab
fix(frontend): evaluators "Create new" button doesn't open the templa…
bekossy Jul 13, 2026
c198ad9
Merge branch 'big-agents' into AGE-3944-/-bug-evaluators-create-new-b…
bekossy Jul 13, 2026
f47f865
[fix] clean up some agent mounts related stuff
jp-agenta Jul 13, 2026
0bc0e0c
clean up env vars and fern client
jp-agenta Jul 13, 2026
d2b23eb
Merge pull request #5274 from Agenta-AI/fix/agent-mounts-followups
jp-agenta Jul 13, 2026
b16a61c
fix(api): order analytics buckets chronologically (#5279)
mmabrouk Jul 13, 2026
925628d
fix tests and snapshot
jp-agenta Jul 13, 2026
9bdbb12
Merge pull request #5271 from Agenta-AI/AGE-3944-/-bug-evaluators-cre…
bekossy Jul 13, 2026
c7f7a7d
Merge branch 'big-agents' into web-test-/-big-agents-web-acceptance-s…
bekossy Jul 13, 2026
43f378c
fix one last flaky test
jp-agenta Jul 13, 2026
59a1140
Merge branch 'big-agents' of github.com:Agenta-AI/agenta into big-agents
jp-agenta Jul 13, 2026
51dabc1
fix(frontend): share usage date range (#5280)
mmabrouk Jul 13, 2026
7e776de
minor fixes
jp-agenta Jul 13, 2026
1566309
fix(ui): improve layout and styling for LLM provider components (#5282)
ashrafchowdury Jul 13, 2026
0f25ae1
fix(security): resolve CodeQL alerts on runner and web packages
jp-agenta Jul 13, 2026
fba2b23
fix(security): use literal key comparisons in deepSet guard for CodeQL
jp-agenta Jul 13, 2026
2e3c5a0
fix(security): keep stack out of the request listener's 500 body (Cod…
jp-agenta Jul 13, 2026
005d4c9
fix(security): message-only in the invalid-JSON 400 body (CodeQL 249)
jp-agenta Jul 13, 2026
1a1566d
fix(runner): retry transient ACP writes instead of killing the connec…
jp-agenta Jul 13, 2026
999729e
fix(runner): default the egress flag permissive to match the Python side
jp-agenta Jul 13, 2026
6276ccc
fix(security): drop String(err) fallback from listener 500 body (Code…
jp-agenta Jul 13, 2026
b4dfd89
Merge branch 'big-agents' into web-test-/-big-agents-web-acceptance-s…
bekossy Jul 13, 2026
2d539c6
fix(sdk): align code-evaluator runner default with the permissive-by-…
jp-agenta Jul 13, 2026
518abd8
fix(runner): shell-quote interpolated values in mount.ts sh -c calls
jp-agenta Jul 13, 2026
01cd022
fix(sdk): apply SSRF guard to MCP server url (PY-SEC-2)
jp-agenta Jul 13, 2026
080f4b1
fix(sdk): mask WireToolCallback.authorization from repr (PY-C5 residual)
jp-agenta Jul 13, 2026
28aaa6c
fix(runner): cap the tool result text returned to the model
jp-agenta Jul 13, 2026
2400723
docs(runner): record why the dev image stays root while Dockerfile.gh…
jp-agenta Jul 13, 2026
ec334e3
fix(runner): enforce the SDK's skill size caps at the untrusted wire …
jp-agenta Jul 13, 2026
58e4cd4
fix(sdk): mask ResolvedConnection.env on model_dump (F-SDK-DUMP)
jp-agenta Jul 13, 2026
7f6342c
fix(sdk): give UnsupportedDeploymentError its documented 422 (XP-3)
jp-agenta Jul 13, 2026
e3f3e43
fix(runner): scope /kill to a session instead of tearing down every t…
jp-agenta Jul 13, 2026
fdca4a6
fix(runner): give the harness only its declared provider's keys, not …
jp-agenta Jul 13, 2026
baced1e
Merge branch 'big-agents' into web-test-/-big-agents-web-acceptance-s…
bekossy Jul 13, 2026
bf5724f
fix(runner): stop leaking upstream tool-error bodies into the model's…
jp-agenta Jul 13, 2026
4f7cdd7
fix(runner): resolve the real tool spec for the ACP approval card
jp-agenta Jul 13, 2026
6b38546
fix(runner): wire the known-value Redactor into the record and span s…
jp-agenta Jul 13, 2026
3d7e283
merge(fix/v7-posture): v7 findings
jp-agenta Jul 13, 2026
b355972
merge(fix/v7-runner-hardening): v7 findings
jp-agenta Jul 13, 2026
83dd72e
merge(fix/v7-acp-spec): v7 findings
jp-agenta Jul 13, 2026
76a788b
merge(fix/v7-redaction): v7 findings
jp-agenta Jul 13, 2026
5ad8621
merge(fix/v7-sdk-service): v7 findings
jp-agenta Jul 13, 2026
663024e
fix(sdk): guarantee stream terminators in the dev twin (SDK-3)
jp-agenta Jul 13, 2026
73e8fcd
fix(sdk): widen the client idle timeout past the runner's authority
jp-agenta Jul 13, 2026
1d4e791
fix(sdk): count conformed parts so the zero-content backstop can fire
jp-agenta Jul 13, 2026
ae54b74
fix(api): stop persisting unset flags as false, and make oss000000010…
jp-agenta Jul 13, 2026
9762b7c
fix(hosting): declare AGENTA_RUNNER_TOKEN in every operator-facing ar…
jp-agenta Jul 13, 2026
64142ee
fix(api): dedup scheduled trigger dispatch so a retry cannot re-fire …
jp-agenta Jul 13, 2026
af368ee
fix(hosting): add the missing commonEnv include to the helm runner de…
jp-agenta Jul 13, 2026
3a58951
merge(fix/v7-runner-security): v7 findings
jp-agenta Jul 13, 2026
41c2479
merge(fix/v7-cheap-defects): v7 findings
jp-agenta Jul 13, 2026
998015d
fix(services): gate before resolve, de-duplicate the gates (SVC-1..5)
jp-agenta Jul 13, 2026
fb074c4
fix(web): surface the recent-samples fetch error (WEB-2)
jp-agenta Jul 13, 2026
ea3e3c2
merge(fix/v7-sdk-service): SVC-1..5, SDK-3, WEB-2, URL audit
jp-agenta Jul 13, 2026
48a1733
fix(api): dedup per-row run_flags lookups in evaluations DAO
jp-agenta Jul 13, 2026
35691b4
fix(api): batch session-record appends instead of one connection per …
jp-agenta Jul 13, 2026
c08868b
fix(api): dedup workflow fetch when normalizing many revisions for read
jp-agenta Jul 13, 2026
c884ccc
merge(fix/v7-api-pool): API-2 connection-per-row exhaustion
jp-agenta Jul 13, 2026
2291c84
docs(agent-workflows): plan MCP configuration redesign
mmabrouk Jul 13, 2026
05c3f38
fix(api): add expression index for gateway_connections provider accou…
jp-agenta Jul 13, 2026
b21b309
fix(api): hoist the per-poll DB session out of test_subscription's wa…
jp-agenta Jul 13, 2026
0c18ad6
fix(api): move session Redis TTLs and CONCURRENCY_LIMIT into env.py
jp-agenta Jul 13, 2026
5b5726f
fix(api): cache the OAuth callback's integration metadata lookup
jp-agenta Jul 13, 2026
81c01a0
fix(api): drop indexes redundant with an identical unique constraint
jp-agenta Jul 13, 2026
1cf6405
fix(api): type AuthService.discover's return as a DiscoverResponse DTO
jp-agenta Jul 13, 2026
a781c26
docs(mcp): adopt breaking cleanup decisions
mmabrouk Jul 13, 2026
59cec56
Merge pull request #5289 from Agenta-AI/docs/mcp-configuration-redesi…
mmabrouk Jul 13, 2026
0b371ee
refactor(mcp): replace public server contract
mmabrouk Jul 13, 2026
e0bbc2c
Merge pull request #5290 from Agenta-AI/refactor/mcp-public-contract
mmabrouk Jul 13, 2026
0e92a44
fix(ci): remove duplicate DAYTONA_API_KEY env key in railway deploy w…
bekossy Jul 13, 2026
0e6cd7e
Merge branch 'big-agents' into web-test-/-big-agents-web-acceptance-s…
bekossy Jul 13, 2026
b1e8fa2
fix(web-tests): resolve auth entry URL against origin, not AGENTA_WEB…
bekossy Jul 13, 2026
59b47b0
refactor(runner): canonical runner configuration names and typed config
mmabrouk Jul 13, 2026
3c70efb
refactor(runner): API/web read the shared sandbox-provider registry
mmabrouk Jul 13, 2026
4d7b287
refactor(hosting): canonical runner names in Compose, Helm, and Railway
mmabrouk Jul 13, 2026
b26c3c4
fix(runner): reuse a snapshot-baked pi in the probe-and-repair ladder
mmabrouk Jul 13, 2026
90f26c7
fix(runner): ignore empty-string agent snapshot overrides
mmabrouk Jul 13, 2026
b602bda
fix(agent): resolve MCP secrets from the project vault
mmabrouk Jul 14, 2026
d57bd38
refactor(helm): canonical runner provider values and schema
mmabrouk Jul 14, 2026
bd3d2f0
fix(tests): skip unfinished elicitation scaffold, harden evaluator ap…
bekossy Jul 14, 2026
42075a5
fix(agent): persist Pi transcripts in session workspaces
mmabrouk Jul 13, 2026
e0593b4
fix(agent): pass Pi transcript path into Daytona
mmabrouk Jul 13, 2026
14b09da
fix(agent): keep Pi skill paths stable across cold resumes
mmabrouk Jul 13, 2026
8c146ef
feat(frontend): simplify MCP secret authentication
mmabrouk Jul 14, 2026
c6c3321
Merge pull request #5296 from Agenta-AI/fix/mcp-secret-vault-resolution
mmabrouk Jul 14, 2026
44aae32
Merge pull request #5297 from Agenta-AI/feat/mcp-secret-auth-ui
mmabrouk Jul 14, 2026
bd33ab3
Merge pull request #5292 from Agenta-AI/fix/pi-transcript-persistence
mmabrouk Jul 14, 2026
31214e8
Merge pull request #5295 from Agenta-AI/fix/pi-skill-workspace
mmabrouk Jul 14, 2026
e763e51
Merge branch 'big-agents' into web-test-/-big-agents-web-acceptance-s…
bekossy Jul 14, 2026
06e1b82
fix(sdk): import sandbox_provider_enabled in the agent handler
mmabrouk Jul 14, 2026
16634bb
Merge pull request #5293 from Agenta-AI/fix/runner-snapshot-qa
mmabrouk Jul 14, 2026
1248efb
Merge pull request #5294 from Agenta-AI/refactor/runner-config-names
mmabrouk Jul 14, 2026
8a7c35b
fix(web): show only enabled sandbox providers and hide local-only per…
mmabrouk Jul 14, 2026
71308bb
Merge branch 'big-agents' into web-test-/-big-agents-web-acceptance-s…
bekossy Jul 14, 2026
4b89dcd
fix(tests): address CI failures in evaluator edit and human-annotation
bekossy Jul 14, 2026
b18f50a
fix(runner): stop conciseError misclassifying a bare "401" substring …
bekossy Jul 14, 2026
bd58444
Merge pull request #5303 from Agenta-AI/fix/runner-concise-error-401-…
bekossy Jul 14, 2026
1cc6e8f
Merge branch 'big-agents' into web-test-/-big-agents-web-acceptance-s…
bekossy Jul 14, 2026
e01da7d
Merge remote-tracking branch 'origin/big-agents' into merge/v7-integr…
jp-agenta Jul 14, 2026
aabc2e6
Merge remote-tracking branch 'origin/big-agents' into merge/v7-integr…
jp-agenta Jul 14, 2026
94d99fb
fix(sdk): use a literal public IP in MCP resolver tests, not a fake h…
jp-agenta Jul 14, 2026
c5ddb8a
fix(api): close the trigger dispatch TOCTOU with an atomic claim
jp-agenta Jul 14, 2026
a8e1bdd
fix(tests): skip evaluator-edit test in CI pending deployment check
bekossy Jul 14, 2026
fdc547a
fix(runner): redact span events/status, and scope redactors per trace…
jp-agenta Jul 14, 2026
3b921de
fix(runner): stream-bound the tool-call response body and fix UTF-8 t…
jp-agenta Jul 14, 2026
ccb593b
fix(runner): normalize blank /kill projectId and cap its request body
jp-agenta Jul 14, 2026
fab0ac1
merge(fix/v7-review): PR #5286 review findings
jp-agenta Jul 14, 2026
f3ff558
fix(runner): require projectId on /kill so pool and sandbox teardown …
jp-agenta Jul 14, 2026
0c6c28b
fix(api): RecordsDAO.append must not commit a caller-supplied session
jp-agenta Jul 14, 2026
c139e46
merge(fix/v7-review2): /kill scoping + DAO commit ownership
jp-agenta Jul 14, 2026
8163d65
Merge pull request #5281 from Agenta-AI/web-test-/-big-agents-web-acc…
bekossy Jul 14, 2026
8cff8cd
test(runner): update the /kill acceptance contract to require a proje…
jp-agenta Jul 14, 2026
4435091
fix(runner): scope the in-flight sandbox kill filter to the run's pro…
jp-agenta Jul 14, 2026
f731932
test(runner): await park() calls before asserting pool state
jp-agenta Jul 14, 2026
aa74587
test(runner): replace duplicate whitespace-projectId /kill test with …
jp-agenta Jul 14, 2026
a2a79fd
Merge pull request #5302 from Agenta-AI/fix/web-sandbox-picker
mmabrouk Jul 14, 2026
9380516
merge(fix/v7-review3): scoped /kill matches mountless sandboxes
jp-agenta Jul 14, 2026
376a961
fix(runner): give traceTargets per-run lifecycle accounting, matching…
jp-agenta Jul 14, 2026
2be8813
fix(runner): count skill size caps by Unicode code point, not UTF-16 …
jp-agenta Jul 14, 2026
0ca89b1
merge(fix/v7-review4): per-run span targets + code-point skill caps
jp-agenta Jul 14, 2026
837bf95
Merge branch 'big-agents' into fix/v7-integration
jp-agenta Jul 14, 2026
9599d40
initial fix
jp-agenta Jul 14, 2026
c6f8233
fix(api): revert unset-flag persistence change; fix real dedup regres…
jp-agenta Jul 14, 2026
8b41657
merge(fix/v7-api1-regression): fix the revision dedup AttributeError;…
jp-agenta Jul 14, 2026
55ae8e6
fix composio trigger subscriptions constraint logs
jp-agenta Jul 14, 2026
76d7c1f
fix tests
jp-agenta Jul 14, 2026
fc569a5
fix(services): retry acceptance HTTP calls on transient gateway 502/5…
jp-agenta Jul 14, 2026
5605cc2
Merge pull request #5305 from Agenta-AI/fix/interactions-and-credenti…
jp-agenta Jul 14, 2026
403681f
fix(api): keep the oss000000010 backfill provenance out of the flags …
jp-agenta Jul 14, 2026
57aa1dd
fix(services): retry acceptance HTTP calls on transient gateway 502/5…
jp-agenta Jul 14, 2026
563e5a9
Merge remote-tracking branch 'origin/big-agents' into fix/v7-integration
jp-agenta Jul 14, 2026
91659f9
merge(fix/v7-services-502): v7 findings
jp-agenta Jul 14, 2026
0e19772
merge(fix/v7-api-perf): API-4..9
jp-agenta Jul 14, 2026
729d90a
fix(runner): narrow the runner environment and drop subscription auto…
mmabrouk Jul 14, 2026
b158963
docs(self-host): restructure agent runner docs, hosting layout, and i…
mmabrouk Jul 14, 2026
9e85e46
docs(self-host): drop the three superseded agent-runner guides and st…
mmabrouk Jul 14, 2026
9a0310e
docs(self-host): complete and reorganize the runner configuration sur…
mmabrouk Jul 14, 2026
fa7b6a9
docs(self-host): address review — write for the reader
mmabrouk Jul 14, 2026
7a48978
docs(self-host): adversarial review fixes
mmabrouk Jul 14, 2026
c11cf58
docs(self-host): add verified field findings from a real deployment
mmabrouk Jul 14, 2026
07cffc7
fix(runner): run local subscriptions out of the read-write mount, not…
mmabrouk Jul 14, 2026
b5b06d1
docs(self-host): reorganize the sidebar into how-tos, concepts, and o…
mmabrouk Jul 14, 2026
a9f8f47
Merge pull request #5298 from Agenta-AI/fix/runner-env-narrowing
mmabrouk Jul 14, 2026
85c84e5
Merge pull request #5301 from Agenta-AI/docs/selfhost-runner-docs
mmabrouk Jul 14, 2026
e08e5e9
fix(hosting): bind Postgres and the Traefik dashboard to loopback by …
mmabrouk Jul 14, 2026
9ff8686
docs(skill): write-docs — write for the reader, verify every instruction
mmabrouk Jul 14, 2026
9f1b72e
Merge pull request #5309 from Agenta-AI/docs/write-docs-reader-princi…
mmabrouk Jul 14, 2026
9580bc3
fix trigger subscription tests
jp-agenta Jul 14, 2026
71708c3
minor fix
jp-agenta Jul 14, 2026
5757221
Merge remote-tracking branch 'origin/big-agents' into merge/v7-integr…
jp-agenta Jul 14, 2026
4025b66
fix(merge): fix YAML whitespace-trim bug and update RUN-SEC-1 test fo…
jp-agenta Jul 14, 2026
e1b41ea
fix(agent): align demo execution defaults
mmabrouk Jul 14, 2026
a0eaf81
merge(big-agents): trigger subscription test fixes
jp-agenta Jul 14, 2026
d45eb56
docs(self-host): add a copy-paste prompt card to self-host with a cod…
mmabrouk Jul 14, 2026
ac193a4
docs(self-host): make the self-host prompt self-contained and move th…
mmabrouk Jul 14, 2026
6cce405
Merge pull request #5311 from Agenta-AI/fix/agent-demo-defaults
mmabrouk Jul 14, 2026
c76ac75
docs(self-host): simplify the self-host prompt card to install-then-s…
mmabrouk Jul 14, 2026
54ee6c7
Merge pull request #5312 from Agenta-AI/docs/self-host-prompt-card
mmabrouk Jul 14, 2026
ede25c6
feat(runner): require AGENTA_RUNNER_TOKEN, like AGENTA_AUTH_KEY
jp-agenta Jul 14, 2026
32ac8a6
Merge branch 'big-agents' into fix/v7-integration
jp-agenta Jul 14, 2026
4a1e9cc
fix(runner-token): repair the deploy surfaces the required-token chan…
jp-agenta Jul 14, 2026
d01f8c4
Merge pull request #5286 from Agenta-AI/fix/v7-integration
jp-agenta Jul 14, 2026
609cec4
fix(hosting): bundle SeaweedFS object store in the published gh compose
mmabrouk Jul 14, 2026
f31d5f4
fix(runner): restore docker/ as the runner service image folder
jp-agenta Jul 14, 2026
8088a22
Merge pull request #5313 from Agenta-AI/fix/bundle-seaweedfs-store
jp-agenta Jul 14, 2026
0e46146
Merge pull request #5308 from Agenta-AI/fix/loopback-datastore-ports
jp-agenta Jul 14, 2026
00d1f8d
fix(hosting): bundle the SeaweedFS store in the gh.local and gh.ssl c…
mmabrouk Jul 14, 2026
7df3256
Merge pull request #5315 from Agenta-AI/fix/seaweedfs-gh-variants
mmabrouk Jul 14, 2026
c59ee9b
fix(hosting): hardcode loopback outside the port variable for postgre…
jp-agenta Jul 14, 2026
56e7145
docs(self-host): correct runner-token wording and a stale image-folde…
mmabrouk Jul 14, 2026
b5b000b
fix(hosting): expose the object store for Daytona sandboxes on self-h…
mmabrouk Jul 14, 2026
3c250cd
Merge pull request #5319 from Agenta-AI/docs/runner-token-accuracy
mmabrouk Jul 14, 2026
145a662
fix(runner): surface Pi provider errors instead of "The agent produce…
mmabrouk Jul 14, 2026
c55b30f
Merge pull request #5320 from Agenta-AI/fix-selfhost-daytona-store-ex…
mmabrouk Jul 14, 2026
6ae2d91
fix(runner): fail closed when the Pi permission extension cannot install
mmabrouk Jul 14, 2026
c757f67
Merge pull request #5317 from Agenta-AI/fix-pi-swallowed-provider-errors
mmabrouk Jul 14, 2026
1b5aec5
Merge pull request #5318 from Agenta-AI/fix-pi-permission-failclosed
mmabrouk Jul 14, 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
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .agents/skills/agenta-package-practices/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,8 @@ via `ModalFooter`, theme integration.

## Style utilities and presentational components

When adding or changing UI elements, implement appearance and interaction states for both light and dark themes, and verify both before considering the work complete.

```typescript
import {cn, textColors, bgColors} from "@agenta/ui"

Expand Down
95 changes: 95 additions & 0 deletions .agents/skills/sync-model-catalog/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
---
name: sync-model-catalog
description: Regenerate and refresh the curated agent model catalog (the label/description/pricing/ratings behind the agent model picker). Use when the pinned @earendil-works/pi-ai version bumps, when a Claude Code build changes its accepted alias set, or before a release when the curated Claude/Pi facts (lineup, pricing, ratings) need refreshing from current public sources. Owns the data files under sdks/python/agenta/sdk/agents/data/; never edits capabilities.py logic.
allowed-tools: Read, Edit, Write, Grep, Glob, Bash, WebSearch, WebFetch
user-invocable: true
---

# Sync model catalog

Keeps the agent model catalog honest. The catalog is the curated decoration over each harness's
accepted model set: clean labels, one-sentence descriptions, real pricing, and 1-5 ratings, keyed
by the id the harness accepts. It is published additively next to the ids-only `models` map on the
harness capability record (`capabilities.py`).

Design and rationale:
`docs/design/agent-workflows/projects/model-catalog-schema/{design.md,plan.md}`.

## What it owns

Three JSON data files under `sdks/python/agenta/sdk/agents/data/`, loaded by
`sdks/python/agenta/sdk/agents/model_catalog.py`:

- `pi_models.generated.json` — machine-generated from pi-ai. Objective facts only (name / pricing /
context_window / modalities), `source: "pi_generated"`. **Never hand-edit.**
- `pi_models.curated.json` — human overlay for the generated file (id -> `{label?, description?,
ratings?}`), merged onto the generated facts at load. Survives regeneration.
- `claude_models.curated.json` — hand-curated Claude alias entries (facts + judgments),
`source: "curated"`.

It never edits `capabilities.py` logic — only these data files.

## The three jobs

### 1. Regenerate the Pi file (on a pi-ai version bump)

The generator reads the pinned pi-ai `models.generated` for the providers Agenta reaches (the
vault-mapped providers plus `openai-codex`) and emits one entry per model. pi-ai provider names are
mapped to Agenta's vocabulary (`google`->`gemini`, `together`->`together_ai`); ids are
`<agenta-provider>/<pi-model-id>`.

```bash
# From repo root. Point at the pinned pi-ai in the runner's node_modules (the .pnpm path includes
# the version — resolve it with the glob).
MODELS=$(ls services/runner/node_modules/.pnpm/@earendil-works+pi-ai@*/node_modules/@earendil-works/pi-ai/dist/models.generated.js | head -1)
node .agents/skills/sync-model-catalog/generate_pi_models.mjs "$MODELS" \
sdks/python/agenta/sdk/agents/data/pi_models.generated.json
```

Detect the bump from a lockfile diff on `@earendil-works+pi-ai@<version>`. The `_generator` field
in the output records the exact pi-ai version. The curated overlay is untouched — only the
`.generated.json` is rewritten, so the merge on load re-applies the human judgments.

### 2. Sync Claude to the live accepted set (needs a running runner)

`claude_models.curated.json` must cover exactly the aliases the Claude harness accepts. Probe the
live set: start a Claude session on a running runner and read the model config options (the same
`getConfigOptions` call `allowedModels` uses in `services/runner/src/engines/sandbox_agent/model.ts`).
Reconcile in two directions only: add a curated entry for any accepted alias the file lacks (seed its
facts from pi-ai's `anthropic` block), and remove any entry the harness no longer accepts. This is how
a new alias (e.g. a `fable` alias, if a Claude Code build starts accepting it) enters the catalog.
Requires an authenticated Claude session, so it is a manual/periodic step, not a CI gate.

Note: today the accepted set is `default/sonnet/opus/haiku` plus their `[1m]` variants
(`CLAUDE_MODEL_ALIASES` in `capabilities.py`). There is no `fable` alias yet; Fable reaches the
picker through the Pi `anthropic` block. Do not add a `fable` Claude entry until the live probe
confirms the harness accepts it.

### 3. Refresh curated metadata from current public sources (before a release / on demand)

Labels, descriptions, and ratings state a model's *current* standing, which a language model's
training data gets wrong (the Anthropic frontier is Fable 5, above Opus, as of mid-2026). Look up the
current lineup, pricing, and relative standing from the vendor's pages and announcements (WebSearch +
WebFetch), then propose updated descriptions and ratings for a human to confirm. Never write a rating
from memory. Validate the 1-5 range and flag any entry whose facts you could not verify. Ratings:
higher is better on every axis; `cost` is cost-efficiency (5 = cheapest).

## Validate

The pydantic loader enforces the schema (including the 1-5 rating range) on load, and the unit test
locks coverage and the overlay merge:

```bash
cd sdks/python && uv run --no-sync python -m pytest \
oss/tests/pytest/unit/agents/connections/test_model_catalog.py -q
```

A malformed data file fails loud there (and at import in `capabilities.py`, which then publishes an
empty catalog rather than crashing `/inspect`).

## When to run

- Job 1 on a pi-ai bump (automatable from a lockfile diff).
- Jobs 2 and 3 before a release or on demand (need a live session and a web lookup).

The skill writes files and a proposal; a human reviews the curated changes and commits.
119 changes: 119 additions & 0 deletions .agents/skills/sync-model-catalog/generate_pi_models.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
// Generate the Pi model-catalog data file from the pinned `@earendil-works/pi-ai`
// `models.generated` catalog. This is job 1 of the `sync-model-catalog` skill.
//
// It reads the pi-ai model definitions for the providers Agenta reaches (the vault-mapped
// providers plus the `openai-codex` subscription) and emits one `ModelCatalogEntry` per model
// with `source: "pi_generated"` and the objective facts filled from pi-ai (name / pricing /
// context_window / modalities). The curated fields (label / description / ratings) are left
// absent — a human adds those in the sibling `pi_models.curated.json` overlay, which the SDK
// loader merges on top of this file. Regeneration only ever rewrites this generated file, so the
// overlay survives a bump.
//
// Run from the runner package (so `@earendil-works/pi-ai` resolves):
// node .agents/skills/sync-model-catalog/generate_pi_models.mjs \
// services/runner/node_modules/@earendil-works/pi-ai/dist/models.generated.js \
// sdks/python/agenta/sdk/agents/data/pi_models.generated.json
//
// The output JSON carries no inline comments (JSON forbids them); the "generated, do not
// hand-edit" notice lives in the `_generator` envelope field and in the skill README.

import {readFileSync, writeFileSync} from "node:fs";
import {pathToFileURL} from "node:url";

// pi-ai provider name -> Agenta vault provider vocabulary. Agenta's capability table, vault, and
// FE reachability filter speak `gemini`/`together_ai`; pi-ai's catalog keys them `google`/
// `together`. The catalog entry's `provider` (and the `provider/` prefix on its `id`) uses the
// Agenta vocabulary so it lines up with the rest of the system. The exact `provider/id` string the
// live Pi harness accepts is verified by the skill's live-probe job, not asserted here.
const PROVIDER_MAP = {
openai: "openai",
anthropic: "anthropic",
google: "gemini",
mistral: "mistral",
groq: "groq",
minimax: "minimax",
together: "together_ai",
openrouter: "openrouter",
"openai-codex": "openai-codex",
};

// The pi-ai provider blocks Agenta reaches: the vault-mapped providers plus the codex subscription.
const PI_PROVIDERS = Object.keys(PROVIDER_MAP);

function piVersion(modelsPath) {
// dist/models.generated.js -> ../package.json (the pi-ai package root).
try {
const pkgUrl = new URL("../package.json", pathToFileURL(modelsPath));
const pkg = JSON.parse(readFileSync(pkgUrl, "utf8"));
return `@earendil-works/pi-ai@${pkg.version}`;
} catch {
return "@earendil-works/pi-ai@unknown";
}
}

function pricing(cost) {
if (!cost) return null;
const out = {
input_per_mtok: cost.input ?? null,
output_per_mtok: cost.output ?? null,
currency: "USD",
};
if (cost.cacheRead != null) out.cache_read_per_mtok = cost.cacheRead;
if (cost.cacheWrite != null) out.cache_write_per_mtok = cost.cacheWrite;
return out;
}

function entryFor(agentaProvider, model) {
return {
id: `${agentaProvider}/${model.id}`,
provider: agentaProvider,
source: "pi_generated",
name: model.name ?? null,
pricing: pricing(model.cost),
context_window: model.contextWindow ?? null,
modalities: Array.isArray(model.input) ? model.input : null,
label: null,
description: null,
ratings: null,
};
}

async function main() {
const modelsPath = process.argv[2];
const outPath = process.argv[3];
if (!modelsPath || !outPath) {
console.error("usage: generate_pi_models.mjs <models.generated.js> <out.json>");
process.exit(2);
}

const {MODELS} = await import(pathToFileURL(modelsPath).href);

const models = [];
for (const piProvider of PI_PROVIDERS) {
const block = MODELS[piProvider];
if (!block) continue;
const agentaProvider = PROVIDER_MAP[piProvider];
for (const model of Object.values(block)) {
models.push(entryFor(agentaProvider, model));
}
}

const doc = {
schema_version: "1",
_generator: {
source: piVersion(modelsPath),
generated_by: ".agents/skills/sync-model-catalog/generate_pi_models.mjs",
generated_at: new Date().toISOString(),
note: "Generated file. Do not hand-edit. Curated fields live in pi_models.curated.json.",
},
models,
};

writeFileSync(outPath, JSON.stringify(doc, null, 2) + "\n");
console.error(`wrote ${models.length} models to ${outPath} from ${doc._generator.source}`);
}

main().catch((e) => {
console.error(e);
process.exit(1);
});
129 changes: 129 additions & 0 deletions .agents/skills/write-template-playbooks/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
---
name: write-template-playbooks
description: >-
Write a template playbook for the build-an-agent skill: a 1-2 KB per-use-case file that
teaches the builder agent to configure one kind of Agenta agent (changelog writer, issue
triager, support router, and so on). Use when the ask is "write a template playbook", "add
an agent template", "author a playbook for the build-an-agent skill", or "write the <X>
playbook". Encodes the file format, the prompting checklist, and the platform facts authors
get wrong.
allowed-tools: Read, Edit, Write, Grep, Glob, Bash
user-invocable: true
---

# Write a template playbook

A playbook is one markdown file under `references/agent-templates/<key>.md` in the
build-an-agent skill. The builder agent reads the one that matches the user's ask, then follows
it to configure that specific agent. Your job: encode the use-case thinking so a Sonnet-class
model can execute it. You get one inventory row as input (name, one-line pitch, integrations,
trigger). Turn it into a spec-conforming playbook.

Keep each playbook **1 to 2 KB**. An over-comprehensive playbook hurts: the agent cannot
extract what is relevant. Write a coherent, moderately detailed unit with a working
instructions template.

## The skeleton

Fill this in. Omit any section the use case does not need (a no-tool template drops Explore and
Connections; a no-trigger template drops the trigger half of Verify).

```markdown
# <Template name> playbook

## Match
One line: when this playbook applies. The card key plus the shape of the ask, including
free-text asks that match no card.

## Required context (ask via one request_input form)
- <field>: why the agent cannot proceed without it. When the agent can propose a value, set
it as the field's `default` (prefilled, one-click acceptable); no default otherwise. [required]
Only fields the agent genuinely cannot proceed without. One to four. Secrets never go here.

## Researchable context (ask, defaulting to "figure it out")
- <field>: the agent can discover this. Enum with a "Use your best judgment" or "Figure it
out from what's connected" option set as the `default`; the built-in Other… covers custom
values. Note the speed trade-off in the description.

## Explore first (read before proposing)
- Which read tools to discover_tools and wire.
- One test_run passing the uncommitted tools in delta.set.parameters.agent.tools (the FULL
tools list), to see the real repo or workspace. Show the user a concrete example before
committing the full setup.

## Defaults / priors table (situation to proposed setup)
| Situation | Trigger | Tools | Behavior default |
|---|---|---|---|
| <situation> | <trigger> | <reads> + <write> | <what it does> |

## Connections
Which integrations must be ready. If missing, request_connection and stop. List the
tool-agnostic alternatives (Notion OR Confluence OR Google Drive).

## Instructions template (what to commit)
The numbered per-run procedure for instructions.agents_md: exact tools in order, pinned ids,
ending on the terminal action. Include the output-format shape.

## Verify
1. test_run with a blunt test message; read the verdict and the tools line, not a 200.
2. If a trigger: fire an artificial test message first; then ask the user to run the real
trigger test (Lightning "Test event" for a subscription, Play "Run" for a schedule).

## Closing report
What the agent became, what is connected, what is scheduled, what you verified, what still
needs the user.
```

Every section maps to the build loop: Match to step one, Required and Researchable to
`request_input`, Explore to `discover_tools` plus `test_run`, Defaults to the proposal,
Connections to `request_connection`, Instructions to `commit_revision`, Verify to `test_run`
and the trigger test, Report to the final step.

## Three platform facts authors get wrong

These are counterintuitive and every first draft gets them backwards. State them correctly.

1. **`request_input` HAS a real `default` field (#5190, shipped) — use it.** A field's
`default` prefills the form so the user can accept every proposal in one click; set one
whenever the agent can propose a value. Rules: the default must match the field type
(array of strings on a multi-select); an empty default (`""`/`[]`) means "no proposal" and
is stripped; **date/date-time fields ignore defaults** — do not set them there. For a
researchable choice, include a "Figure it out, use your best judgment" enum option and set
it as the `default`. Enum options are SUGGESTIONS: every enum renders a built-in "Other…"
free-text escape hatch, so keep lists short and likely, not exhaustive. Multi-pick
questions use `{type: "array", items: {type: "string", enum: [...]}}`; options needing a
sentence of explanation use `oneOf: [{const, title, description}]`, which renders as
selectable choice cards. Forms with several questions can set `"x-ag-stepper": true` on
requestedSchema (one question at a time + review) — the tool description teaches this;
playbooks do not re-state it.
2. **`test_run` exercises uncommitted tools** through its in-memory delta
(`delta.set.parameters.agent.tools` carries the FULL tools list, lists replace wholesale).
So exploration does NOT require commit-and-stop-turn. Explore the real repo or workspace
with new tools before committing anything. Commit-and-stop is only a fallback for when the
flow cannot carry the delta.
3. **The trigger-test affordance is Lightning "Test event"** (event subscriptions) or Play
"Run" (schedules). It is never a flask icon. The flask is for Evaluations. Write the correct
copy in every Verify section.

## What a playbook NEVER contains

Add what the model lacks for this use case; omit what it already knows. Do not put in a
playbook:

- The generic build loop (discover, commit, test). It lives in the build-an-agent skill body.
- The config schema (tool entries, the fixed `llm`/`harness`/`runner` block). It lives in
the skill body and `references/config-schema.md`.
- Tool wire shapes or cron rules. Those live in the skill body and its other references.

A playbook that re-teaches these wastes the 1-2 KB budget and drifts from the source of truth.

## Read a reference when

| To do this | Read |
|---|---|
| Get the prompting rules for procedure, priors, forms, and verification | `references/prompting-checklist.md` |
| Copy from a complete, spec-conforming example | `references/worked-example.md` |

The canonical file format and the index.md match-table format are in the project spec at
`docs/design/agent-workflows/projects/agent-templates/playbook-spec.md`. Read it if the
skeleton above is not enough.
Loading
Loading