Skip to content

Choose the Onyx surface for the thin layer into Expected Parrot #130

Closed

Description

@aviyashchin

Question

Which Onyx surface becomes the thin layer into Expected Parrot?

Owner direction (2026-11-01): Onyx is a thin layer over Expected Parrot's own tools, code, skills and examples; stand those up instead of rebuilding them.

Facts found:

  • Expected Parrot ships no MCP server. Its agent interface is the ep CLI (all output JSON; study scaffolds a study, workflow holds approval gates such as plan-approved, report validates reports, present shows files), dozens of agent-first CLIs (golden, bower, umriss, zermelo, urteil, helmer, ...), and skill collections (ep-skills, skills) that tell a coding agent how to drive them.
  • Onyx Craft is that same shape: an OpenCode coding agent in a sandbox with a Python venv, MCP access, and skills pushed at session setup. Onyx can import skills straight from a GitHub repository (POST /skills/github/import). Normal Onyx chat does not use skills.
  • Craft is off on agent-dev: /api/build/sessions answers "Onyx Craft is not available". It needs ENABLE_CRAFT=true and a sandbox backend: Docker (the API mounts the Docker socket, root-equivalent on the host) or Kubernetes (a kind cluster). The agent's account has no Docker access on agent-dev.

Options:

  1. Craft route: enable Craft with the Docker sandbox on agent-dev (or a dedicated host), add edsl to the sandbox venv, import expectedparrot/ep-skills and expectedparrot/skills from GitHub, and let Expected Parrot's own instructions drive ep. Retire the custom tool wrapper. Needs the owner to grant the Docker socket on a shared host or provide a dedicated one.
  2. Chat route: keep the chat persona and MCP, but replace the 24 hand-built tools with a thin passthrough to the ep CLI, and load Expected Parrot's skill text into the persona prompt (ep-skills has no licence, so it is fetched at runtime rather than copied). Works on agent-dev today.

Activity

  1. self-assigned this
    on Nov 2, 2026
  2. beca-oc commented on Nov 2, 2026

    @beca-oc

    Goal: Beca in Onyx is a thin layer over Expected Parrot. A person opens Onyx, names a market question, and Beca designs, runs, charts and explains the study using Expected Parrot's own CLI, skills, examples and plots, reliably.

    Route (assumed; confirm or overrule on #130): Onyx Craft. Craft runs an OpenCode coding agent in a sandbox with a Python venv and skills, which is the shape Expected Parrot's tools are built for. Do not build new tools. Reuse, in this order: Expected Parrot's ep CLI and EDSL, its skill repos (expectedparrot/ep-skills, expectedparrot/skills), its study scaffold (ep study, ep workflow gates, ep report, plot_style.py, build_standard_plots.py), its agent-first CLIs where a study needs them (golden, bower, umriss, zermelo, urteil), then Onyx's own Craft, skills import, model gateway and egress proxy. Custom code is allowed only as glue with a named gap, and every gap is recorded on the map.

    Map: #119 ("Investigate a market from the Beca chat with Expected Parrot"). Decisions already made: respondents run on Claude Haiku 4.5 on Bedrock (#120); follow Expected Parrot's practice for audience, study type, plan approval then cost approval, and standard plots (#123); test-model placeholder fix (#122); live-model needs and costs (#121). Always pass --repo Subconscious-ai/onyx to gh.

    Steps:

    1. Owner gate: Craft needs a sandbox backend. On agent-dev the owner either adds the ubuntu user to the docker group or names a dedicated host. Until then, do every step that does not need a running sandbox.
    2. Enable Craft on the dev stack: ENABLE_CRAFT=true, SANDBOX_BACKEND=docker, per backend/onyx/server/features/build/sandbox/README.md and install.sh --include-craft. Proof: GET /api/build/sessions stops answering "Onyx Craft is not available", and a Craft session starts for the non-admin test account in ~/.config/ep-mcp/test-user.env.
    3. Put Expected Parrot in the sandbox: add edsl (the version on agent-dev, 1.0.9 or newer) to the sandbox image's initial-requirements.in, rebuild the image, and confirm ep --help runs inside a session.
    4. Respondent model without keys in the sandbox: point EDSL's openai_compatible service at Onyx's Craft model gateway so respondents run on Bedrock Haiku 4.5 through Onyx. If that fails, use the egress proxy's credential injection for Bedrock. Record which one works. Proof: one keyless test-model run and one live Haiku run of a single question inside a Craft session.
    5. Import Expected Parrot's skills through Onyx's own GitHub skill import (POST /api/skills/github/import) for expectedparrot/ep-skills and expectedparrot/skills, at a pinned revision. Do not copy their text into this repository (no licence).
    6. Starters and reliability: script three market investigations from Expected Parrot's examples (pricing with numeric willingness to pay, a message test of messages crossed with audiences, a choice-based conjoint) plus the eleven Expected Parrot sample flows already listed on Plan: Beca designs, recruits, runs and analyzes Expected Parrot studies from chat #109. Drive them through Craft with the non-admin account. Each passes when Beca follows Expected Parrot's gates (plan approved, cost approved), runs on Haiku, produces Expected Parrot's standard plots with tables, and labels respondents as simulated.
    7. Retire what the route replaces: the custom MCP wrapper (scripts/subconscious/serve_ep.py, PR feat: Beca designs, runs and analyzes Expected Parrot studies from chat (#109) #110) and persona 3, once step 6 passes. Keep them until then.

    Acceptance: three consecutive headless passes of the three investigations and the eleven sample flows through Craft on agent-dev, transcripts and charts saved, no empty answers, no invented tool output, total live spend recorded per run and under the cost each user approved. Report on #119 with links.

    Boundaries: never print secrets (Doppler project beca); never send external messages; never spend beyond the approved estimate; no change to auth, billing or production; merging follows the repository's merge policy, and enabling Craft on a shared host is the owner's call (step 1). Stop and report if a step needs a decision only the owner can make.

  3. aviyashchin commented on Nov 2, 2026

    @aviyashchin
    Author

    Resolution (owner, 2026-11-01)

    Craft route on agent-dev with the Docker sandbox backend. The owner preferred avoiding Docker, but Craft supports only Docker or Kubernetes, Docker is already installed there, and k3s would add more root-level machinery. Expected memory: about 2 GB per active sandbox (Onyx's default cap, freed after an hour idle); agent-dev has 39 GB available. The plan and goal script are in the comment above.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

wayfinder:grillingHuman decision needed to select the redesign route

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions