Repository navigation
Conversation
Records the agent-dev setup that lets Craft's agent run Expected Parrot's own EDSL, ep CLI and study skills on open-weight Bedrock models: the sandbox image (EDSL, openai[aiohttp], pinned ep-skills copied to /tmp at start, concurrency cap), a global OpenCode plugin that names each new chart's inline Markdown and flags market-share wording, the Craft organization instructions, the stack settings, and the scripts that drove the eleven demo flows through Craft's API. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
| const fresh = (await pngs()).filter((rel) => !seen.has(rel)); | ||
| for (const rel of fresh) seen.add(rel); |
| ~/craft-ep/craft_turn.sh $J new "$Q" > ~/craft-ep/flow-$TAG-turn1.txt 2>&1 | ||
| SID=$(head -1 ~/craft-ep/flow-$TAG-turn1.txt | awk "{print \$2}") | ||
| ~/craft-ep/craft_turn.sh $J $SID "Approved. Run the pilot." > ~/craft-ep/flow-$TAG-turn2.txt 2>&1 | ||
| ~/craft-ep/craft_turn.sh $J $SID "${4:-Approved. Run the full study with 20 respondents per group and show me the charts.}" > ~/craft-ep/flow-$TAG-turn3.txt 2>&1 |
|
Final-image rerun (sandbox image with
Earlier brand-new-user meal-kit run on the same image: 4 inline charts, 0 banned terms, skills read from |
…rompts Craft instructions now require uploaded images and PDFs to reach respondents through EDSL FileStore (a first image run passed only the file path, so the model never saw the ad). Test scripts upload attachments, parse the session id by its line, tolerate transient message reads, and carry prompts for the AI interview, humanize, question distribution, Google Form, label validation, image and PDF families. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Plan families 12 and 13 through Craft on the final image, 2026-11-02 (three turns each, non-admin users):
Banned share terms: 0 in every flow. |
With no Expected Parrot account, `ep humanize create` cannot publish. The sandbox image now pins expectedparrot/runway (MIT, own venv, on PATH), and the Craft instructions have the agent build the EDSL survey, render the respondent page with runway, and say that fielding to people needs an Expected Parrot account. Instructions trimmed to stay under Onyx's 4000-character limit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Humanize through Craft (2026-11-02): the agent built the EDSL survey and rendered the respondent page with Expected Parrot's |
The sandbox image installs every public package in Expected Parrot's directory (38 tools, pinned by commit in ep-tools.txt), each in its own venv under /opt/ep-tools because several pin edsl to different git revisions, and links their commands onto PATH. Two drift fixes: raiffa needs click, flyvbjerg needs typer 0.26.0. uxtest is left out (it requires Python < 3.13; the sandbox has 3.13). Craft instructions name the tools and tell the agent to read a tool's own help and use it. Adds the 37 tool prompts and their flow and audit scripts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Expected Parrot application tools through Craft, 2026-11-02. Every public package in Expected Parrot's directory except humanize-based 37 of 37 pass: epiq, conversation, aivis, ariel, bewley, bower, burr, dewey, flyvbjerg, green, golden, helmer, ishikawa, kahn, katz, langley, mccall, mcda, messick, niles, oneheart, perla, premortem, pruefung, raiffa, roth, stanton, tommy, treffen, umriss, urteil, vorhersage, voting, zermelo, zugunruhe, zwicky, zwill. Examples: aivis measured brand mentions across two models; green ran a choice experiment and charted attribute importance; ishikawa rendered its fishbone SVG inline; langley named low awareness as the least-refuted hypothesis; raiffa computed the expected-value policy; zugunruhe migrated a survey with Private packages (AISS, Earnings, Kean, Zitate) could not be tested. |
uxtest requires Python < 3.13 and the sandbox has 3.13, so the image installs uv's Python 3.12 for it alone, plus Playwright's Chromium under /opt/ms-playwright. Adds the uxtest prompt (a study against uxtest's own bundled example site). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
uxtest through Craft (2026-11-02): with uv's Python 3.12 and Playwright Chromium in the image, the agent ran 33 uxtest commands, drove three simulated personas through uxtest's bundled checkout site, and reported the main issue (every persona was sent to /login before understanding the product). No errors. That makes 38 of 38 public directory packages passing except humanize-based spence, which the owner asked to skip. AISS, Earnings, Kean and Zitate are private and return 404 to our accounts. |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
spence through Craft (2026-11-02): the agent ran 111 spence commands locally (role, opening, 3 applications, 6 reviews via spence's demo flow, all 6 in state submitted) with no errors and nothing published to Expected Parrot. All 39 public directory packages now pass through Craft. Untestable: AISS, Earnings, Kean and Zitate are private (404 to our GitHub accounts). |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
EDSL docs examples (docs.json: how-to guides and research examples) not covered before, run through Craft as test users on the final image, prompts in test/ep_demos.tsv:
No errors or banned terms in any turn. model_comparisons needed one extra turn because the generic 'run 20 per group' approval did not fit a two-model design. |
…lugin tdd.py drives Craft as test users and checks the EDSL Results in the sandbox: plan gate, pilot of 10, cost from tokens, exact full sample, named model, varied answers, inline charts, no market-share claims, unavailable models. Loops 1-4 went from 4/11 to 11/12. The instructions now fix the sample rules, varied agent traits, Results file names and unavailable models; ep-charts.ts blocks an EDSL .run( before the user has answered the plan. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
| if name == "full_size": | ||
| n = max((r["n"] for r in res), default=0) | ||
| return n >= args[1], f"largest results n={n}, want >= {args[1]}" |
…ider tdd - rebuild.sh builds every image from the checkout and applies the admin settings - Craft welcome page leads with Market research starter prompts - tdd: plan gate red/green case, three market investigations, demo and tool cases, time to first chart - plugin refuses a reply.md that names a share the study cannot measure Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…erlay The agent ran a study before approval with Expected Parrot's CLI (ep run), which the .run( check missed. rebuild.sh now includes docker-compose.craft.yml and restarts nginx; tdd re-logs in test users and reads the plugin as the sandbox user. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The plugin adds the current turn's rule to every model call and refuses every tool once the plan gate fires, so the agent cannot search for a way around it. tdd reads Results as the sandbox user, counts FileStore scenarios correctly, restores the gate after a red run, and accepts 'Ready for pilot?' as an approval request. The read timeout is 600 s for MiniMax's long tool calls. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… the user message Refusing every tool made MiniMax loop on glob for 20 minutes. Now only shell commands stay refused and the third refused command aborts the turn. The first-turn rule is also attached to the user's message in the model's copy of the history; with only the system rule MiniMax labeled tweets itself. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s with EDSL MiniMax kept gpt-4o 'as specified' and saved plain JSON as .json.gz. answers_vary now fails only when every question got one answer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… closed questions Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
plan_only also fails when a command started an EDSL job; rebuild.sh fails loudly when the API is not healthy and says which sandboxes it removes; the README names the gate's known gaps; ruff clean. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Local gate on exact head Independent review (fresh subagent, fallback because the Claude review job cannot run): PASS, no blocking findings. Non-blocking notes and what I did:
No review threads. Merging is blocked for this account ( |
Description
Onyx Craft as a thin layer over Expected Parrot: Craft's agent runs Expected Parrot's own EDSL,
epCLI, study skills and application CLIs on open-weight Bedrock models, with respondents going through Onyx's gateway. A non-admin user names a market question and gets a plan, a priced pilot, the full run, inline charts and a plain explanation. Map: #119, decision #130.What is in it:
deployment/craft-ep/sandbox/ep-charts.ts(global OpenCode plugin) holds the rules in code: no EDSL job (.run(,ep run,ep run-manifest) before the user's second message; after the gate fires, shell stays refused for that turn and the third refused command aborts it; each model call gets the current turn's rule (plan only, then a 10-respondent pilot with tokens and cost, then "respondents are simulated");reply.mdmay not say market share, penetration, adoption, market size or reach; each new chart's inline Markdown is appended to the tool result.deployment/craft-ep/rebuild.sh: one script that builds the backend, web, sandbox base and Expected Parrot sandbox images from the checkout, writes.env, brings up Compose with the Craft overlay, restarts nginx, and applies the Craft model and instructions.craft-instructions.md(3,827 of 4,000 characters), agent modelminimax.minimax-m2.5(GLM-5 also works at about twice the agent-token cost; Qwen3-Next refuses to run EDSL).web/src/app/craft/constants/exampleBuildPrompts.ts: a "Market research" group of four starter prompts, first on Craft's welcome page.test/tdd.py: drives Craft as test users;core(plan gate x2, pricing study through pilot, full run and a market-share follow-up, unavailable model),market(willingness to pay, image concept test, segmented conjoint),demos,tools; reports time to first chart;--without-gatefor the red side.Depends on #132 (LiteLLM
api_basefix) for any streamed model call on fork main.How Has This Been Tested?
On agent-dev, stack rebuilt by
rebuild.shfrom this branch plus #132 (tagfork-145653006), as non-admin test users through Craft's API:PLAN_GATE = false(agent wrote a Results file on turn 1,tdd-g6-red), green with it (tdd-g8: 3/3 gate cases). Before this PR's fix the agent bypassed the gate withep run.🤖 Generated with Claude Code