Documentation/Guides/Skills & Code

STEP 5 OF 8

Skills & Code

From any engineer's profile, Customize opens /agents/{id}/edit (frontend/src/app/(dashboard)/agents/[id]/edit/page.tsx) — this is the current, real location for per-agent skill and code editing. It supersedes an older, now-deleted top-level /agent-workspace route; there is no such route in the codebase anymore.

This page is gated to tenant admins/owners (user.role in ('admin','owner') or super_admin). Everyone else sees a permission notice instead of the editor.

Customizations layer on top of stock, never mutate it

Everything you change on this page is a customization — a separate record layered on top of the stock engineer, scoped tenant-wide or to one engagement via the Engagement scope selector in the header. The stock engineer definition is never mutated; delete the customization and the agent falls back to stock exactly as it was.

# Read the current customization (tenant-wide, or scoped to one engagement)
curl "https://your-control-plane-host/api/v1/workforce/agents/{agent_id}/customization?engagement_id={engagement_id}" \
  -H "Authorization: Bearer $TOKEN"

# Save changes
curl -X PUT https://your-control-plane-host/api/v1/workforce/agents/{agent_id}/customization \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{
    "persona_prompt_override": "...",
    "code_override": "...",
    "llm_model_override": "claude-opus-4-7",
    "temperature_override": 0.4,
    "tools_override": ["web_search", "code_exec"],
    "removed_skill_credential_ids": [],
    "added_skills": [{"skill": "Snowflake Migration", "level": 2}]
  }'

The four tabs

  • Persona — a Monaco markdown editor for the system-prompt-equivalent persona. Check Show stock vs. your override to render both side by side plus a real diff (DiffViewer, components/monitoring/DiffViewer.tsx).
  • Skills — click a skill chip to remove it (masked for your tenant, not deleted upstream), or add a new one with a name, a tier (1–4), and an evidence URL.
  • Code — a Monaco Python editor for the agent's code_override, with the same stock-vs-override diff toggle as Persona.
  • Behavior — override the LLM model (claude-sonnet-4-6, claude-opus-4-7, or gpt-4o), temperature (slider), and the tool list. Tools default to inherit from stock; click "Take ownership of tool list" to start editing your own list, sourced from the real tool catalog (GET /api/v1/workforce/tool-catalog).

Test before you save

The "Sanity-check your engineer" panel at the bottom sends one live Claude Sonnet 4.6 message using your merged spec (stock + in-progress overrides) — it does not persist anything:

curl -X POST https://your-control-plane-host/api/v1/workforce/agents/{agent_id}/test \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"message": "In one sentence, what is your role?"}'

Promoting engagement-learned skills to the master agent

If you're editing an engagement-scoped customization and it has skills added during that engagement, a "Promote learned skills to the master agent" panel appears. Promoting turns those engagement-specific skills into permanent SkillCredential rows on the stock engineer — every future engagement starts from that upgraded baseline. This is audit-logged:

curl -X POST https://your-control-plane-host/api/v1/workforce/agents/{agent_id}/promote-skills \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"engagement_id": "<engagement_id>"}'
# -> { "agent_id": "...", "promoted_count": N, "promoted_skills": [...] }

Export in your own framework

Export & Deploy (/export-harness) publishes the whole harness as one signed zip, and the Export tab's Framework selector adds runnable code for the stack your team already uses — generated from the same runtime spec (agents/&lt;slug&gt;/agent.json) the Vouchstone runtime executes:

| Flavor | What you get | Workflows | |---|---|---| | Native (default) | The harness tree as-is — what the data-plane runtime runs | All, via the runtime | | LangGraph | A compiled ReAct agent per spec (exports/langgraph/agents/*.py) | A StateGraph module per linear agent workflow; anything unmappable is listed in the README as runtime-only, with the reason | | Claude Agent SDK | An agent per spec driven through Anthropic's Claude Agent SDK, platform tools served over an in-process MCP server | Agents only (stated in the README) | | Microsoft Agent Framework | An agent_framework.Agent per spec (Anthropic or OpenAI chat client) | Agents only (stated in the README) |

Every flavor keeps governance and memory real: the generated code registers only the tools the spec permits (local enforcement), and KG-scoped retrieval, gateway approvals, autonomy, budget caps, the signed ledger, and the 5-layer memory pipeline all stay enforced server-side on the control-plane calls — the flavor README carries the exact guarantees table. Generated files land under exports/ in the Code tab, hand-editable like everything else; your edits win over regeneration.

What's next

Step 6 — Workflows: chain multiple agents (with whatever customizations you've made) into a step-by-step, drag-and-drop workflow.