Skip to main content
Pick the smallest primitive that matches the work. This keeps project structure clear and prevents overlapping agents, workflows, runs, and integrations.

Quick choice

GoalUseStart with
Receive browser, HTTP, or webhook trafficApp route or API routePages and routing
Answer users with model reasoning, tools, memory, or skillsAgentAgents
Give an agent one typed capabilityToolTools
Package reusable agent behaviorSkillSkills
Reuse assistant instructionsPromptMCP server
Expose readable context to assistantsResourceMCP server
Define project-owned background workTaskTasks
Coordinate multiple steps, branches, approvals, or retriesWorkflowWorkflows
Run durable background work now or on a scheduleRun or scheduleRuns
Connect agents to third-party servicesIntegration with OAuthIntegrations
Expose project capabilities to assistants over a protocolMCP serverMCP server
Run isolated commands or file operationsSandboxSandbox
Add reusable runtime capabilitiesExtensionExtensions

Decision rules

PrimitiveUse forDo not use for
App routeA browser, HTTP client, or webhook needs an entry point.The work should outlive the request or be reused outside routing.
AgentThe model must decide, explain, call tools, use memory, or stream a response.The work is deterministic and can be a function, task, or workflow step.
ToolAn agent needs a typed operation such as search, lookup, write, or transform.The operation has multiple long-running states or human approval steps.
SkillAn agent needs reusable instructions, references, scripts, and tool policy.The work is deterministic or needs durable process state.
PromptAn assistant needs reusable instruction text.The project needs to execute code or read data.
ResourceAn assistant needs readable project context.The operation changes state or starts work.
TaskYou own a reusable background function in tasks/.The user needs conversational reasoning or streaming output.
WorkflowWork has ordered steps, parallel branches, retries, or human review.A single agent response or one background function is enough.
RunYou need durable execution, scheduling, batch status, or run history.The work can finish inside a request without durability.
IntegrationYou need provider metadata, OAuth, tokens, or remote integration tools.A local custom API call is enough and no shared connector behavior is needed.
MCP serverExternal assistants or MCP clients need tools, prompts, or resources.The capability is only used inside one Veryfront app route.
SandboxCode or shell work needs isolation from the app process.The code can run safely in your own trusted runtime.
ExtensionA capability should be packaged and reused across projects.The code belongs to one app and can stay local.

Common pairings

GoalTypical shape
Chat with company dataAgent + tools + memory + chat UI
Human-approved content pipelineWorkflow + agents + approval step
Nightly sync from an external APITask + schedule + optional integration credentials
Assistant help with a repeatable taskAgent + skill + optional tools
Assistant reads project contextMCP server + resources
User-authorized GitHub automationIntegration + OAuth + tools
Assistant-accessible project commandsMCP server + tools
Isolated repo inspection or code editsAgent + sandbox + tools
Reusable Redis cache supportExtension + CacheStore contract

Verify it worked

Before building, write down the primitive and why it owns the work. Then check the matching guide:
  • If the guide’s first example solves your shape, continue there.
  • If you need two or more primitives, start with the one that owns the triggering event.
  • When choosing between Task and Run, remember that a task defines the work and a run executes it durably.
Run the guide’s example or validation command before adding another primitive.