06-reference/research

harness patterns ray to phdata work agent

2026-06-04·research-brief·source: deep-research
agent-harnessphdataagent-deployerdogfoodingportability

Harness patterns: what ports from Ray to the phData work-agent, and what gets rebuilt

The question

RDCO is, for the first time, deploying a second agent: the phData work-agent, air-gapped from Ray, running on the founder's locked-down corporate machine. This is a live natural experiment in the agent-deployer / fractional-FDE thesis. Which harness layers port cleanly from Ray to agent #2, and which carry a bespoke per-deployment rebuild tail? The honest version of this question is the falsifiable test of the positioning: if "deploy a 2nd agent" is genuinely fast and repeatable, the FDE/HaaS pitch holds; if each deployment is a long bespoke slog, it doesn't.

What we already know (from the vault)

The two-layer portability model is already codified. [[2026-05-10-harness-moat-two-layers-portability]] (written in answer to the founder's own "how much is portable to the next one?" question) splits the harness into:

The model has already been operationalized once, as a templatization artifact. [[2026-05-13-ai-demo-day]] / the Ray-Starter-Kit ("coo-in-a-box") scope proves the layers are real by separating them mechanically: it ships SOUL/CLAUDE templates with [[OPERATOR]]/[[PRIMARY_CHANNEL]] placeholders, 12 sanitized skills, a generalized audit script, a scheduled-jobs.template.txt, and an empty MEMORY.md index — while deliberately shipping zero actual memory files or vault content (Layer 2). The per-file sanitization map and the grep pre-publish gate are the concrete evidence of where Layer-1 ends and Layer-2 begins. Estimated build: ~10-13h to package the universal layer for a stranger.

The phData deployment's actual shape is documented and is deliberately simpler than Ray. [[2026-05-30-phdata-work-agent-setup-plan]]:

Ray's own topology is the thing being NOT-ported. [[project_channels_agent_setup]]: Mac Mini, LaunchAgent (com.claude.channels.plist), tmux session claude-channels, daily 4am restart with claude update, acceptEdits + expanding allowlist, Full Disk Access for iMessage chat.db. [[2026-05-15-nateherk-3-ways-to-deploy-claude-agents]] confirms RDCO is "Method 1, hardened" — 13 active crons in tmux under a supervising LaunchAgent. Almost none of this boot-persistent daemon stack transfers to a session-scoped agent.

The verification layer is a portable pattern with locally-rebuilt rubrics. [[2026-05-19-verification-as-independent-worker-pattern]]: the structural rule (a producer can't verify its own work; route through a fresh-eyes subagent that reads the rubric fresh and scores mechanically) is universal Layer-1 discipline. But the rubrics it scores against (/verify-vault-write, /verify-strategic-output, /verify-dispatch) are RDCO-surface-specific; a phData agent would inherit the pattern and the skill shape, then author its own client-appropriate rubrics. [[2026-06-01-garry-tan-stop-building-foxconn-factories-for-agents]] stress-tests whether the verification layer is even worth porting — Tan calls heavy verification a "Foxconn factory / cage" — but RDCO's counter is that the gates exist because the parent loop fabricated 12x in one morning (2026-05-31), so the lean version ports; the cruft doesn't.

What the web says

External 2026 commentary converges on the same split, in different vocabulary:

Convergences and contradictions

Convergences:

Contradictions / tensions:

Synthesis for RDCO

PORTS-CLEANLY vs NEEDS-REBUILD ledger (the load-bearing artifact)

Harness layer Verdict Detail / evidence
Cron suite (the 13 loops) NEEDS-REBUILD (mostly) — pattern ports, instances don't The /loop+todo and Notion-board patterns and the scheduled-jobs.template.txt shape port. But phData is session-scoped, not always-on, so the supervising LaunchAgent + 4am-restart + tmux daemon do NOT transfer at all. The autonomous-loop runs inside the session instead. Most of the 13 specific crons (process-newsletter, finance-pulse, sync-contacts) are RDCO-bet-specific and don't exist for agent #2. Net: keep the loop concept, rebuild the schedule.
Channel-as-state / open-threads NEEDS-REBUILD — comms surface itself is TBD Ray's iMessage/Discord reply-tool-as-response + open-threads parking is Layer-1 pattern. But phData's comms surface is explicitly undecided (Slack blocked + was Ray's wrong assumption; founder may just work in the terminal). With no async always-on channel, the open-threads cooldown mechanism may not even apply. Rebuild around whatever the actual surface is.
Memory schema (MEMORY.md index + per-file facts) PORTS-CLEANLY (format) / REBUILD (contents) Format is "portable as-is" (harness-moat doc) and the starter-kit ships the empty index. The entries are Layer-2 and must re-accumulate from phData-specific failures. Clean structural port, zero-content port.
Verification-as-independent-worker PORTS-CLEANLY (pattern) / REBUILD (rubrics) The fresh-eyes-subagent + mechanical-rubric + structured-verdict shape is pure Layer 1 and transfers intact. The three rubrics are RDCO-surface-specific; phData authors its own (and per Tan, audits which checks earn their keep before importing them).
Skill library / harness scaffolding PORTS-CLEANLY (with sanitization tax) This is the heart of the 90%. /improve, /skillify, /self-review, /deep-research, the skill format itself — all port. The starter-kit proves it: ~10-13h to sanitize+template the universal set. The tax is the per-file grep-gated strip of hardcoded paths/IDs/domains. Real but bounded.
Secrets discipline PORTS-CLEANLY (principle) / REBUILD (implementation) "No secrets on disk" ([[feedback_no_secrets_on_disk]]) is an inviolable Layer-1 principle. But the implementation (1Password op item get wrapper) breaks: phData uses LastPass, and LastPass CLI doesn't support federated SSO. Rebuild on macOS Keychain or per-session interactive auth. Principle ports, mechanism rebuilds.
Air-gap / perimeter constraints FULLY BESPOKE — the long tail This layer didn't exist for Ray and is invented fresh per deployment: corp-machine lockdown, every connector blocked, no auto mode, filesystem-as-universal-escape-hatch, Bitbucket-not-GitHub, tighter read+draft-only leash, context isolation. None of this ports because Ray never had a hostile perimeter. This is the genuinely bespoke per-deployment cost.

What this implies for the agent-deployer / FDE positioning

The honest verdict: "deploy a 2nd agent" is fast and repeatable at the pattern layer, but each deployment carries a real (bounded) bespoke tail — and the tail is dominated by the environment, not the agent.

In one line: agent #2 confirms the harness is portable and the environment is the product. The FDE positioning is sound; the pitch should sell perimeter-mastery, not a portability percentage.

Open follow-ups

  1. Extract a "locked-down corporate deployment" playbook upstream from the phData constraint map (filesystem-escape-hatch, federated-SSO secrets workaround, connector-blocked fallbacks). This is the first reusable primitive the 2nd deployment generated — does it get pulled into the starter-kit / a new SOP?
  2. Re-measure the Layer-1.5 adapter cost honestly post-phData: the harness-moat doc estimates "~50% adapter work, mechanical." Was that accurate for a hostile environment, or does Layer 1.5 need a sub-tier for "hostile-perimeter integration" that's closer to bespoke?
  3. Does the verification layer port at all into a client-confidential context? Per Tan, audit which /verify-* checks earn their keep for a read+draft-only agent with no public surface — possibly a much thinner gate than Ray's.
  4. Comms-surface decision for phData (terminal-direct vs a channel) determines whether channel-as-state / open-threads is even rebuilt or dropped entirely. Still open in the setup plan.
  5. Should the phData experiment be written up as the FDE-positioning proof point — the first time RDCO deployed a 2nd agent and measured the port-vs-rebuild ledger — for the agent-deployer / Ray-as-a-Service candidate bet?

Related

Sources