feat(automations): model picker with thinking level, readable receipts, and agent management - #3554
Merged
Merged
Conversation
… the editor The Desktop execution card printed `providerId/modelId` raw, so a Den provider record rendered as `lpr_01kz6ecd25fevt4ywj49q9...` — one long unbroken string that overflowed its grid cell and drew on top of the Next run column. It now shows the provider and model names people chose, and every cell wraps instead of overlapping. Configuring an Automation also used a bare <select> with no reasoning control, while the same person picks a model in chat through the full picker. The editor now opens that same ModelPickerModal over the models Den authorizes for them, which brings reasoning/thinking levels with it. Thinking level is carried end to end: an optional `variant` on the Automation model contract, a nullable column on the revision and run, through the runner assignment, into the local session create, and on to promptAsync — the same value the composer sends. Switching model clears it, since reasoning levels belong to a specific model. Models Den authorizes but the local runtime does not know still list, just without levels. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
1 Skipped Deployment
|
There was a problem hiding this comment.
Warden security clearance: clear. No new security issues found in this diff (8c096baf9ea86e6b58b7b11fcbdb6a63421b5481). Automated clearance satisfies the required-review gate only — a human still reviews and merges. Analysis run
…tions The Automations guidance only covered proposing a new one, and flatly told the agent it "cannot create, activate, or run an Automation". That is no longer true: nine management operations are MCP capabilities, so with OpenWork Cloud connected the agent really can list, inspect, edit, run, cancel, and archive. Asked "what automations do I have?" it had nothing to reach for, and asked to change one it was told it was powerless. Name the capabilities, and replace the blanket denial with the rule that actually matters: prefer the proposal card for new Automations, because one is active the moment it exists, but read and edit existing ones directly. Status must come from a capability call, never from memory, and deactivating is distinguished from cancelling a run already in flight. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Warden security clearance: clear. No new security issues found in this diff (5a535c2ef660f7337ea1538bf2e04238cce1acf5). Automated clearance satisfies the required-review gate only — a human still reviews and merges. Analysis run
This was referenced Aug 5, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Four enhancements to how a person — and the in-app agent — picks, reviews, and manages the model an Automation runs on.
lpr_01kz6ecd25fevt4ywj49q9.../deepseek/deepseek-v4-flash, overflowing onto the next columnOpenWork Models · DeepSeek v4 Flash, wrapping inside its own cell<select>ModelPickerModalused in chat — search, provider grouping, free/cloud badges1. Readable model on the receipt (the reported bug)
The Desktop execution card rendered the model as
providerId/modelIdstraight from the record. For a Den provider that islpr_01kz6ecd25fevt4ywj49q9...— one long unbroken string with nothing to wrap on — so it overflowed its grid cell and drew on top of the Next run column:Two causes, both fixed:
min-w-0+break-words, so no long value can overlap its neighbour again.describeAutomationModelalso keeps a revoked model inspectable: if the member loses access to it, the card falls back to the raw identity rather than rendering blank.2. The real model picker in the editor
Configuring an Automation used a bare
<select>with no reasoning control, while the same person picks a model in chat through the full picker. The editor now opens that sameModelPickerModal, fed by the models Den authorizes for that member — so the list stays exactly the set the server revalidates on save, but with the search, grouping, and affordances people already know.To be clear about the scope: the old
<select>already listed every authorized model. What was missing was the familiar control — and the reasoning levels it brings with it.3. Thinking level, end to end
The contract had nowhere to put a reasoning level, so this is the enhancement with real plumbing behind it:
variantonautomationModelSchema— the same value the composer sends as its behavior pillmodel_variantonautomation_revisionandautomation_run(migration0055: two additiveALTER TABLE ... ADD, nothing rewritten)POST /workspace/:id/sessions→promptAsyncTwo behaviours worth knowing:
highonto a model that has no such level would silently mean nothing.4. The agent can manage Automations
Nine management operations have been MCP capabilities since #3466, but the agent's guidance never mentioned them — and flatly asserted it "cannot create, activate, or run an Automation." So asking a thread "what automations do I have?" gave it nothing to reach for, and asking it to change one told it it was powerless.
The guidance now names the capabilities and states the rule that actually matters:
listAutomations/getAutomationfor what exists,listAutomationRuns/getAutomationRunfor history and receipts,updateAutomation,activateAutomation/deactivateAutomation,runAutomationNow,cancelAutomationRun,archiveAutomation.createAutomationis used directly only when explicitly asked.Runner-credential minting stays blocked from the MCP catalog, as fixed in #3466.
Checks
Run on
5a535c2ef:pnpm --filter @openwork/app typecheck,pnpm --dir apps/server typecheck,pnpm --filter @openwork-ee/den-api typecheck:automations— passedpackages/automations— 10 passednode --test electron/automation-runner.test.mjs) — passedmessage-list-loadingfailures that reproduce identically on unmodifieddevunder full-suite--isolateand pass when that file runs alone. Not introduced here, not claimed as passing.The previous commit was green across all 23 CI checks; this push adds the knowledge change and is re-running.
Migration
0055was generated withdb:generate, so the schema/migration sync check has its matching snapshot. No dependency changes, sopnpm-lock.yamlis untouched.Not covered
I could not exercise the picker against a live Den org or run a scheduled occurrence end to end, so the reasoning level and the agent's capability calls are verified by types, unit tests, and reading the call path — not by a live run. Worth a manual pass: pick a model with reasoning levels, save, confirm the receipt shows
provider · model · level, then ask a thread what Automations exist and to change one.🤖 Generated with Claude Code