Context
Webtoon/cartoon image generation requires an agent with image-generation capability. Claude CLI inside OWS currently only produces prompts. Local Codex CLI supports the image_generation feature, so cartoon stories should use Codex by default/requirement once provider support exists.
QuadWork Reference
Use QuadWork's backend-selection UX as the reference, adapted down to OWS's simpler story model.
Reference paths:
/Users/cho/Projects/quadwork/src/components/SetupWizard.tsx
- Detects installed CLI backends.
- Disables unavailable backend choices.
- Stores backend choice separately from approval/bypass mode.
/Users/cho/Projects/quadwork/server/routes.js
- Persists backend command choice in project config.
- Sets Codex-specific defaults such as
reasoning_effort: "medium".
Do not copy QuadWork's four-agent role UI. OWS should expose one story-level agent provider selection.
Required Work
Update the New Story modal and story creation flow to select/store the agent provider.
UX rules
Persistence
When the story folder is created, write .story.json with:
{
"contentType": "cartoon",
"language": "English",
"agentProvider": "codex",
"agentMode": "normal"
}
For fiction, default to:
{
"contentType": "fiction",
"language": "English",
"agentProvider": "claude"
}
Existing .story.json files without agentProvider must be treated as Claude for rollback compatibility.
StoryBrowser / Terminal
- Untitled
_new_* sessions must carry both provider and mode until the agent creates the real story folder.
- When
_new_* is renamed to the actual story slug, preserve both agentProvider and agentMode into .story.json and terminal metadata.
- Do not change existing fiction story rows, status counts, archive behavior, publish status, or dashboard grouping.
Stable-area restrictions
This ticket may touch New Story UI, .story.json metadata read/write, and terminal spawn request payloads only as needed for provider selection.
Do not change:
- OWS wallet selection/signing logic.
/api/publish/* publish/upload transaction logic.
/api/dashboard stats/royalty reads.
/api/settings/register-agent, /generate-binding, or /link-status.
- Royalty claim or AI-agent/human account binding behavior.
Acceptance Criteria
- New Story modal has content type, language, agent provider, and agent mode states that do not conflict.
- Existing fiction stories without
agentProvider behave as Claude.
- New fiction stories default to Claude when Claude is available.
- Cartoon forces Codex and explains why.
.story.json correctly records provider and mode for new stories.
- UX follows QuadWork's installed/unavailable backend handling but remains one-provider-per-story, not multi-agent.
- No wallet, publish transaction, dashboard, royalty, claim, or account-binding behavior changes are included.
Context
Webtoon/cartoon image generation requires an agent with image-generation capability. Claude CLI inside OWS currently only produces prompts. Local Codex CLI supports the
image_generationfeature, so cartoon stories should use Codex by default/requirement once provider support exists.QuadWork Reference
Use QuadWork's backend-selection UX as the reference, adapted down to OWS's simpler story model.
Reference paths:
/Users/cho/Projects/quadwork/src/components/SetupWizard.tsx/Users/cho/Projects/quadwork/server/routes.jsreasoning_effort: "medium".Do not copy QuadWork's four-agent role UI. OWS should expose one story-level agent provider selection.
Required Work
Update the New Story modal and story creation flow to select/store the agent provider.
UX rules
For
Fiction:Claudewhenever Claude is installed. This preserves the existing stable OWS fiction workflow.Codexonly as an explicit advanced/alternative option when Codex is installed.For
Cartoon:Codexprovider.Cartoon mode requires Codex because the clean-image step needs image generation support.Agent mode remains separate:
Normal (approve each action)Permissions bypassPersistence
When the story folder is created, write
.story.jsonwith:{ "contentType": "cartoon", "language": "English", "agentProvider": "codex", "agentMode": "normal" }For fiction, default to:
{ "contentType": "fiction", "language": "English", "agentProvider": "claude" }Existing
.story.jsonfiles withoutagentProvidermust be treated as Claude for rollback compatibility.StoryBrowser / Terminal
_new_*sessions must carry both provider and mode until the agent creates the real story folder._new_*is renamed to the actual story slug, preserve bothagentProviderandagentModeinto.story.jsonand terminal metadata.Stable-area restrictions
This ticket may touch New Story UI,
.story.jsonmetadata read/write, and terminal spawn request payloads only as needed for provider selection.Do not change:
/api/publish/*publish/upload transaction logic./api/dashboardstats/royalty reads./api/settings/register-agent,/generate-binding, or/link-status.Acceptance Criteria
agentProviderbehave as Claude..story.jsoncorrectly records provider and mode for new stories.