원클릭으로
add-capability
Use when adding a new
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Use when adding a new
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Use to verify changes to agents, capabilities, integrations, steps, or runtime end-to-end before declaring a task done. Boots the full server stack with embedded WASM runner and separate DBs, then drives the server HTTP API to create, compile, and execute a workflow and assert observable behavior. Unit tests are not sufficient — agent/runtime changes must e2e-verify.
Use when local dev state has drifted into a weird shape — failing migrations, half-applied schema changes, stale cached binaries, suspended instances clogging the system. Wipes the e2e DBs and data dir and gives you a clean slate. Distinct from e2e-verify which assumes a clean env.
Use to set up the right RUST_LOG filters and tail server + environment logs scoped to a specific tenant, instance, or component. Saves the "what's the right log filter again" lookup. Pair with trace-instance when you need both API state and live log output.
Use when a workflow that uses a connection misbehaves — to see stored params (secrets masked), token state, rate-limit history, and which integration it belongs to. Catches stale OAuth tokens and misconfigured connection params before you blame the agent.
Use to get a quick health view of a workflow — its definition, registered versions, recent instances and their statuses, and which connections it touches. The "is this thing healthy / what does it look like right now" view, distinct from trace-instance which drills into one specific run.
Use for the tight inner loop when developing or debugging a single capability — rebuild only the changed crate, recompile a small test workflow that exercises it, register, run, dump output. ~10s feedback vs full e2e-verify. Use e2e-verify for the final pre-commit check; use this while iterating.
| name | add-capability |
| description | Use when adding a new |
A capability is a single #[capability]-annotated function inside an agent module. It auto-registers via the inventory crate at compile time — no manual registry edits needed.
Reference templates:
from_xmlsend_email#[derive(Debug, Deserialize, CapabilityInput)]
#[capability_input(display_name = "<Human-readable input name>")]
pub struct MyCapabilityInput {
#[field(
display_name = "Field Label",
description = "What the user sees in tooltips",
example = "some example",
default = "default value"
)]
pub field_name: FieldType,
// For optional fields:
#[serde(default)]
#[field(display_name = "Optional Field", description = "...")]
pub optional_field: Option<String>,
}
For integration capabilities that need a connection, include:
#[field(skip)]
#[serde(skip_serializing_if = "Option::is_none")]
pub _connection: Option<RawConnection>,
The runtime injects _connection automatically when the workflow step references a connection.
#[derive(Debug, Serialize, Deserialize, CapabilityOutput)]
#[capability_output(display_name = "<Human-readable output name>")]
pub struct MyCapabilityOutput {
#[field(display_name = "Result", description = "What this returns")]
pub result: String,
}
Signature: fn(InputType) -> Result<OutputType, AgentError>.
#[capability(
module = "my_agent", // matches the file name
display_name = "Do The Thing", // shown in the step picker
description = "Does the thing with X",
module_display_name = "My Agent", // grouping label
module_description = "What this agent does",
module_has_side_effects = false, // true if it mutates external state
module_supports_connections = false, // true for integrations
module_secure = false // true if it handles secrets
)]
pub fn do_the_thing(input: MyCapabilityInput) -> Result<MyCapabilityOutput, AgentError> {
// ...
Ok(MyCapabilityOutput { result: "done".to_string() })
}
For integration capabilities, also add: module_integration_ids = "<integration_id>" (matches the integration_id from the connection params struct).
Use AgentError::permanent(code, msg) for terminal errors and AgentError::transient(...) for retryable ones. Attach context with .with_attr(attrs::FIELD, "...") so the UI can highlight the offending field.
After build:
regen-frontend-api so the capability appears in the Step Picker.e2e-verify — compile + register + execute a workflow that uses the new capability and assert observable behavior. Unit tests alone are insufficient (see always-e2e-verify).crates/runtara-agents/src/agents/<existing-agent>.rs — append input/output structs and the function