Skip to content

capx policy plugin: code-as-policy agents via CaP-X perception servers#140

Merged
jeqcho merged 17 commits into
mainfrom
feat/capx-policy-plugin
Jul 17, 2026
Merged

capx policy plugin: code-as-policy agents via CaP-X perception servers#140
jeqcho merged 17 commits into
mainfrom
feat/capx-policy-plugin

Conversation

@jeqcho

@jeqcho jeqcho commented Jul 17, 2026

Copy link
Copy Markdown
Collaborator

Closes #139

Adds plugins/inspect-robots-capx: a capx policy where the LLM writes Python per turn against SAM3 / Contact-GraspNet / Pyroki helpers (CaP-X's served models, spoken over the wire with no capx dependency) plus motion primitives that queue speed-limited joint targets. The queue becomes the returned ActionChunk; the next turn feeds back code, stdout, and stderr in CaP-X's REGENERATE/FINISH style.

Design in plans/0021-capx-policy-plugin.md. Notable decisions:

  • chunk-per-turn instead of CaP-X's blocking primitives, so no threads and clean ActionChunk semantics (plan section 3)
  • depth/intrinsics/extrinsics via a documented observation.extra key convention, core untouched (plan section 6)
  • reuses the agent plugin's chat client and PNG writer through new public re-exports, agent bumps to 0.10.0 (plan section 5)

Maintainer action before first release: create the pypi-capx trusted-publisher environment.

🤖 Generated with Claude Code

jeqcho and others added 17 commits July 17, 2026 00:06
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Fixes: cubepick out of profile (e2e gets its own joint-space mock), gripper
located via dim_labels/semantics not positional convention, proprioception
via single state field like build_toolset, drop the unneeded PNG reader,
export encode_png, agent bump corrected to 0.12.0, failure-budget semantics,
graspnet client defaults (forward_passes=2), pyroki launch has no CLI
parsing, approver guardrails are a CLI default not a framework guarantee.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Adds the wire selector and ResponsesClient/AssistantMessage to the reused
agent surface, fixes two stale CubePick e2e references, defines empty-grasp
normalization to (0,4,4)/(0,), and pins _motion.py to the agent toolset's
DeltaLimitApprover-safe step-limit derivation.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Pyroki /ik speaks the full actuated config (strip to arm dof, full config
is the warm start), execution report lands in the transcript eagerly since
chunk meta is a dead channel, depth extra keys accept a zero-arg callable
to keep TrialRecords small, delta-limit claim scoped to within-chunk.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Pins gripper polarity (high=open, gripper_open_is_high override),
reimplements observation formatting instead of importing agent privates,
disambiguates request_timeout_s (total budget, min(remaining,30) per
attempt) and max_code_failures scope, states the world==base frame
assumption for extrinsics and IK.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Critique round 5: READY with this one minor.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…, parse prose-wrapped replies

Fresh-eyes review round 1, three minors: the documented
obs['extrinsics'] @ pose idiom now works when embodiments provide extras
as zero-arg callables (the README-recommended form); MotionQueue rejects
offset boxes whose float grid is coarser than the per-step budget,
matching the agent toolset's guard the plan claims to reproduce; control
words tolerate punctuation and case, and a reply wrapping its fenced code
in prose executes the fenced block instead of burning a SyntaxError turn.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Fresh-eyes review round 2: membership decides absence so a KeyError from
a broken embodiment callable no longer masquerades as a missing key.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@jeqcho
jeqcho merged commit 17c1b4f into main Jul 17, 2026
22 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

capx policy plugin: code-as-policy agents via CaP-X perception servers

1 participant