ctx.workspace is a property that raises PermissionError when the runtime
didn't provision a workspace. The original `getattr(ctx.workspace, …)`
guard didn't catch that — the property call happens before getattr can
fall back. When the agent is invoked over the local MCP gateway
(a2amcp), which has no grant flow, this surfaced as a 500 instead of
the intended "run me through the orchestrator" message.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
cp_deploy_tarball now blocks after the from-tarball POST, polling the new
agent's /.well-known/agent-card until version matches the deployed version
(180s timeout, exponential backoff capped at 10s). On success it returns
live_skills with each skill's input_schema so the builder LLM can verify
the advertised shape matches the code it wrote — catches the schema/code
skew that caused downstream 400s on call_agent.
cp_refresh_agent(name) is a new tool that forces the CP to re-fetch the
live card via GET /v1/agents/{name}. Use when a pod was redeployed out
of band and the CP cache is stale; cp_deploy_tarball handles the in-band
case automatically.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The default 25 was tripping on iterative builds (list -> write*3 -> test
-> deploy is already 12-18 steps; any retry blew the cap).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>