Designers define how work runs without hard-coding a single model, credential, or deployment. Three authoring surfaces compose but do not bundle into one document:
| Surface | What you declare | Current API/format |
|---|---|---|
| Agent | Discoverability, one direct or Workflow implementation, and declared Resource/Skill/MCP/workspace access | /api/projects/{project}/agents/{definition}/revision |
| Workflow | Immutable revision whose specification declares states, slots, requirements, hand-off, transitions, and bounds | /api/projects/{project}/workflows/{definition}/revision |
| Domain objects | ResourceType facets and inline Lua | PackDescriptor contract_version: 2 or Resource APIs |
Design in this order
- Read the object model and authorization, readiness, and Resources.
- Define the Agent: keep identity/prompt separate from authorization, model routing, credentials, and worker capacity.
- Design the Workflow: route on declared events/structured output; name requirements and recovery paths.
- Develop the Domain Pack: model domain nouns and operations; adopt types, then create/bind instances.
- Test invalid inputs and missing dependencies as seriously as the happy path.
Good Workforce design is portable because it avoids accidental ambient state. A Pack does not contain runtime instances; a Workflow specification does not contain credentials; an Agent revision does not by itself grant access. Scope binding and policy compose them at use time, leaving provenance and failure evidence visible.
Keep workflow configuration, structured handoff, and the generated HTTP routes open while authoring.