Skip to main content

API Reference

The controller exposes a REST API for programmatic access. All /api/v1/* endpoints require authentication. By default Orka accepts Kubernetes ServiceAccount bearer tokens; when configured, external callers can use a valid OIDC JWT or generic context token instead.

Authentication

Send Kubernetes ServiceAccount and OIDC credentials with the standard bearer token header:

Authorization: Bearer <token>

Authentication modes:

  • Kubernetes ServiceAccount token — default mode. Tokens are validated with the Kubernetes TokenReview API.
  • OIDC JWT — enabled when the controller is configured with --oidc-issuer and --oidc-audience (or ORKA_OIDC_ISSUER / ORKA_OIDC_AUDIENCE). Tokens are validated against the issuer, audience, expiration, and RS256 signature. If --oidc-jwks-url is omitted, Orka discovers the JWKS URL from the issuer metadata.
  • Context token / kontxt TxToken — enabled with --context-token-profile=kontxt, --context-token-issuer, and --context-token-audience (or the matching ORKA_CONTEXT_TOKEN_* env vars). The built-in profile validates RS256 TxTokens with typ: txntoken+jwt, issuer/audience/time claims, kid, and required iat, txn, scope, and req_wl claims. By default tokens are read from the raw Txn-Token header; Authorization: Bearer support is opt-in with --context-token-headers=Txn-Token,Authorization:Bearer.
Txn-Token: <txntoken+jwt>

When a Task is created through OIDC or context-token authentication, Orka stamps the verified caller identity into immutable spec.requestedBy (subject, issuer, username, email, groups, and roles when present). Context-token Task creation also stamps immutable spec.transaction plus transaction labels/annotations for audit correlation. Clients cannot provide or override requestedBy or transaction; requests containing top-level or nested spec.requestedBy/spec.transaction are rejected with 400. See Kontxt TxToken integration for scope/tctx authorization, TTS exchange, delegation, and audit behavior.

Webhooks

GitHub webhooks use HMAC verification instead of bearer-token authentication.

EndpointMethodDescription
/webhooks/githubPOSTAccept GitHub issues / pull_request label triggers and pull request events for exact-head repository monitor runs

The controller requires ORKA_GITHUB_WEBHOOK_SECRET and verifies the X-Hub-Signature-256 header. Label trigger events can create agent Tasks for labels such as agent:implement. Pull request events can also queue exact-head RepositoryMonitor runs when a matching monitor has spec.review.exactEventEnabled: true. See GitHub Label Triggers for configuration and webhook behavior.

Tasks

EndpointMethodDescription
/api/v1/tasksPOSTCreate a task
/api/v1/tasksGETList tasks (paginated)
/api/v1/tasks/:idGETGet task details
/api/v1/tasks/:idDELETECancel/delete task
/api/v1/tasks/:id/logsGETStream task logs
/api/v1/tasks/:id/resultGETGet task result
/api/v1/tasks/:id/artifactsGETList task artifacts
/api/v1/tasks/:id/artifacts/:filenameGETDownload a task artifact
/api/v1/tasks/:id/planGETGet task plan
/api/v1/tasks/:id/childrenGETGet child tasks

Task Execution Workspace Schema

POST /api/v1/tasks accepts the Task CRD shape. Agent Tasks may include spec.execution.workspace to request experimental workspace-backed execution through an upstream agent-sandbox or Agent Substrate installation. The controller validates the request, resolves/defaults the effective workspace settings, and injects them into the outer Kubernetes worker Job. The agent worker wrapper then claims and executes inside the upstream workspace.

PathTypeValues/defaultNotes
spec.execution.workspace.enabledbooleandefault falseEnables workspace-backed execution for an agent Task. The controller rejects enabled requests unless the selected provider is enabled.
spec.execution.workspace.providerstringcontroller default provider; built-in default agent-sandboxWorkspace backend: agent-sandbox or substrate.
spec.execution.workspace.templateRef.namestringcontroller default template, if configuredWorkspace template name. Required when enabled: true and no controller default template is configured.
spec.execution.workspace.templateRef.namespacestringTask namespace, or provider-specific default namespace when configuredNamespace containing the workspace template.
spec.execution.workspace.reusePolicystringnone; allowed none, sessionsession derives the reuse key from spec.sessionRef.name and requires that field to be set.
spec.execution.workspace.cleanupPolicystringcontroller default cleanup policy; allowed delete, retainCleanup behavior after the sandbox command exits.
spec.execution.workspace.bootbooleandefault falseSubstrate only. Boots the actor from scratch on first resume.
spec.execution.workspace.poolRef.namestringemptySubstrate only. Places the Task on a SubstrateActorPool; pooled workspaces currently require cleanupPolicy: delete.
spec.execution.workspace.poolRef.namespacestringTask namespaceSubstrate only. Namespace containing the referenced pool.
spec.execution.workspace.snapshotobjectemptySubstrate only, reserved. Non-empty restore/checkpoint settings are currently rejected.
spec.execution.workspace.hibernationobjectemptySubstrate only, reserved. processMode: resident is currently rejected.

Workspace requests are only valid on spec.type: agent Tasks. See Agent Sandbox Workspaces and Substrate Execution Workspaces for configuration, validation rules, live smoke-test steps, and current limitations.

Get Task Plan

Retrieve the autonomous plan state for a task.

Endpoint: GET /api/v1/tasks/{id}/plan

Response (200):

{
"TaskName": "build-feature",
"Namespace": "default",
"Iteration": 3,
"Summary": "Completed auth module, working on CRUD endpoints",
"ProgressPct": 40,
"GoalComplete": false,
"PlanDocument": "# Plan\n- [x] Auth\n- [ ] CRUD\n...",
"CreatedAt": "2024-01-15T10:00:00Z",
"UpdatedAt": "2024-01-15T12:30:00Z"
}

Errors:

  • 404 — No plan found for this task
  • 501 — Plan store not configured

Sessions

EndpointMethodDescription
/api/v1/sessionsGETList sessions
/api/v1/sessions/:idGETGet session transcript
/api/v1/sessions/:idDELETEDelete session

Memory

Memory endpoints manage namespace-scoped durable memories and reviewable memory proposals. See Memory for the full lifecycle, worker behavior, and examples.

Durable Memories

EndpointMethodDescription
/api/v1/memoriesGETList durable memories
/api/v1/memoriesPOSTCreate durable memory
/api/v1/memories/:idGETGet durable memory
/api/v1/memories/:idPUTUpdate durable memory
/api/v1/memories/:idDELETESoft-delete durable memory
/api/v1/memories/:id/disablePOSTDisable memory for normal recall
/api/v1/memories/:id/enablePOSTRe-enable memory for normal recall

Common list query parameters: namespace, query/q, sessionName, agentName, taskName, parentTask, source, tags, ids, includeDisabled, includeDeleted, and limit.

Memory Proposals

EndpointMethodDescription
/api/v1/memory-proposalsGETList memory proposals
/api/v1/memory-proposalsPOSTCreate a memory proposal
/api/v1/memory-proposals/:idGETGet a memory proposal
/api/v1/memory-proposals/:id/reviewPOSTRecord a review decision without applying it
/api/v1/memory-proposals/:id/applyPOSTApply an accepted memory proposal into durable memory
/api/v1/memory-proposals/:id/archivePOSTArchive a proposal without applying it

Common list query parameters: namespace, taskName, agentName, type, status, query/q, and limit. Review and archive return 204 No Content. Apply accepts optional appliedBy and returns the linked durable memory JSON; repeated apply requests return the same memory.

Agents

EndpointMethodDescription
/api/v1/agentsPOSTCreate an agent
/api/v1/agentsGETList agents
/api/v1/agents/:nameGETGet agent details
/api/v1/agents/:namePUTUpdate an agent
/api/v1/agents/:nameDELETEDelete an agent

Skills

EndpointMethodDescription
/api/v1/skillsPOSTCreate a skill
/api/v1/skillsGETList skills
/api/v1/skills/:nameGETGet skill details
/api/v1/skills/:name/contentGETGet raw spec.content.inline markdown
/api/v1/skills/:namePUTUpdate a skill
/api/v1/skills/:nameDELETEDelete a skill

Tools

EndpointMethodDescription
/api/v1/toolsGETList tools (built-in + CRDs)
/api/v1/tools/:nameGETGet tool details

Tool CRD Schema

GET /api/v1/tools/:name returns built-in tool metadata or the full Tool CRD. Custom Tool CRDs can call plain HTTP endpoints or MCP servers hosted in durable Substrate actors.

Plain HTTP tools set spec.http.url and may inject authentication from a Kubernetes Secret into either the Authorization: Bearer header or the JSON request body:

apiVersion: core.orka.ai/v1alpha1
kind: Tool
metadata:
name: tavily-search
spec:
description: "Search the web for current information"
parameters:
type: object
properties:
query:
type: string
required:
- query
http:
url: "https://api.tavily.com/search"
method: POST
authSecretRef:
name: tavily-secret
key: api-key
authInject: body
authBodyKey: api_key

MCP actor-backed tools set spec.mcp.substrateActor and may omit spec.http entirely. Orka creates or reuses the Substrate actor, waits for the MCP endpoint, stores the resolved endpoint in status.endpoint, and workers call the MCP tool through JSON-RPC tools/call using the Tool name as the MCP tool name.

apiVersion: core.orka.ai/v1alpha1
kind: Tool
metadata:
name: repo-inspector
spec:
description: "Inspect repository metadata through an MCP server"
parameters:
type: object
properties:
message:
type: string
required:
- message
mcp:
path: /mcp
substrateActor:
templateRef:
name: orka-mcp
namespace: ate-demo
poolRef:
name: mcp-substrate-pool
boot: true
PathTypeValues/defaultNotes
spec.descriptionstringrequiredDescription shown to the LLM.
spec.parametersJSON SchemaemptyTool argument schema in function-calling format.
spec.http.urlstringrequired for plain HTTP toolsEndpoint called by workers. MCP actor-backed tools may omit it because Orka uses status.endpoint.
spec.http.methodstringdefault POST; allowed GET, POST, PUT, PATCH, DELETEHTTP method for plain HTTP tools. MCP actor-backed tools use POST.
spec.http.headersmapemptyStatic headers sent with the request. Reserved token propagation headers cannot be overridden when outbound TxToken propagation is enabled.
spec.http.timeoutdurationdefault 30sPer-call request timeout.
spec.http.authSecretRefSecret key selectoremptySecret value used as the auth token.
spec.http.authInjectstringdefault header; allowed header, bodyheader sends Authorization: Bearer <token>. body injects the token into the JSON request body and is invalid for MCP actor-backed tools.
spec.http.authBodyKeystringemptyJSON key used when authInject: body.
spec.mcp.pathstring/mcpHTTP path exposed by the MCP server inside the actor.
spec.mcp.substrateActor.templateRef.namestringrequiredSubstrate ActorTemplate hosting the MCP server.
spec.mcp.substrateActor.templateRef.namespacestringTool namespace or configured defaultNamespace containing the actor template.
spec.mcp.substrateActor.poolRef.namestringemptyOptional SubstrateActorPool for actor placement and reuse. The pool template must match the MCP actor template.
spec.mcp.substrateActor.poolRef.namespacestringTool namespaceNamespace containing the referenced actor pool.
spec.mcp.substrateActor.bootbooleanfalseBoots the actor from scratch on first resume; later reconciles reuse an already booted actor.
status.availablebooleanfalseWhether the controller can reach the resolved endpoint.
status.endpointstringemptyResolved non-secret endpoint used by workers. For MCP actor-backed tools this is the Substrate router endpoint.
status.actorobjectemptySafe actor metadata, including provider, actor ID, route host, resolved template, and pool reference.

MCP actor-backed tools require Substrate support to be enabled on the controller. If transport auth is needed for an MCP endpoint, set spec.http.authSecretRef, keep authInject as header or omit it, and omit spec.http.url.

Security

Repository security endpoints manage RepositoryScan configurations and their generated threat models, scan runs, findings, patch proposals, and remediation pull requests. Like other /api/v1/* endpoints, they require ServiceAccount bearer token authentication.

EndpointMethodDescription
/api/v1/security/repositoriesPOSTCreate a repository scan
/api/v1/security/repositoriesGETList repository scans
/api/v1/security/repositories/:nameGETGet repository scan details
/api/v1/security/repositories/:namePUTUpdate repository scan spec
/api/v1/security/repositories/:nameDELETEDelete repository scan
/api/v1/security/repositories/:name/threat-modelGETGet latest threat model
/api/v1/security/repositories/:name/threat-modelPUTUpdate threat model
/api/v1/security/repositories/:name/scansGETList scan runs
/api/v1/security/repositories/:name/scansPOSTTrigger manual scan
/api/v1/security/repositories/:name/slicesGETList deterministic review slices
/api/v1/security/repositories/:name/slices/:sliceIDGETGet review slice details
/api/v1/security/repositories/:name/dropped-findingsGETList v2 dropped-finding diagnostics
/api/v1/security/repositories/:name/findingsGETList findings
/api/v1/security/findings/:idGETGet finding details
/api/v1/security/findings/:id/dismissPOSTDismiss finding
/api/v1/security/findings/:id/reopenPOSTReopen finding
/api/v1/security/findings/:id/validatePOSTTrigger validation
/api/v1/security/findings/:id/patchPOSTGenerate patch proposal
/api/v1/security/findings/:id/patchesGETList patch proposals
/api/v1/security/findings/:id/pull-requestPOSTCreate remediation PR

Common query parameters:

  • namespace — Kubernetes namespace to operate in.
  • limit — page size for list endpoints that support pagination.
  • continue — Kubernetes continue token for GET /api/v1/security/repositories.
  • cursor — store cursor for GET /api/v1/security/repositories/:name/scans, GET /api/v1/security/repositories/:name/slices, GET /api/v1/security/repositories/:name/dropped-findings, and GET /api/v1/security/repositories/:name/findings.
  • severity, validationStatus, state, sliceID, category — filters for GET /api/v1/security/repositories/:name/findings.
  • status — filter for GET /api/v1/security/repositories/:name/slices.
  • scanRunID, sliceID — filters for GET /api/v1/security/repositories/:name/dropped-findings.
  • recommended=true — filters findings to recommended remediation candidates.

Create Repository Scan

Endpoint: POST /api/v1/security/repositories

Request Body:

{
"name": "example-repo",
"namespace": "default",
"spec": {
"provider": "github",
"repoURL": "https://github.com/example/app",
"branch": "main",
"ref": "v1.2.3",
"schedule": "0 2 * * *",
"validationMode": "light",
"analysisAgentRef": {"name": "security-reviewer"}
}
}

Response (201): The created RepositoryScan resource.

Required fields are name, spec.repoURL, and spec.analysisAgentRef.name. The API defaults or infers provider, owner, repository, branch, and validation mode where possible. Set spec.ref to pin scan tasks to a specific tag, branch, or commit SHA; when ref is set without branch, scan workspaces check out that ref directly instead of forcing the default main branch.

Security Findings Workflow

A typical remediation workflow is:

  1. List findings with GET /api/v1/security/repositories/:name/findings?namespace=default&recommended=true.
  2. Inspect evidence with GET /api/v1/security/findings/:id.
  3. Optionally validate with POST /api/v1/security/findings/:id/validate.
  4. Generate a patch with POST /api/v1/security/findings/:id/patch.
  5. Review patch proposals with GET /api/v1/security/findings/:id/patches. A proposal is successful only after patch summary and diff verification passes.
  6. Create a remediation pull request with POST /api/v1/security/findings/:id/pull-request.

Review slice and dropped-output inspection:

  1. List slices with GET /api/v1/security/repositories/:name/slices?namespace=default.
  2. Inspect one slice with GET /api/v1/security/repositories/:name/slices/:sliceID?namespace=default.
  3. List rejected v2 model output with GET /api/v1/security/repositories/:name/dropped-findings?namespace=default&scanRunID=scan_....

Repository Monitors

Repository monitor endpoints manage RepositoryMonitor configurations and their durable monitor runs, PR queue items, review state, and audit events. The current implementation supports GitHub pull request monitoring and read-only review task creation.

EndpointMethodDescription
/api/v1/monitors/repositoriesPOSTCreate a repository monitor
/api/v1/monitors/repositoriesGETList repository monitors
/api/v1/monitors/repositories/:nameGETGet repository monitor details
/api/v1/monitors/repositories/:namePUTUpdate repository monitor spec
/api/v1/monitors/repositories/:nameDELETEDelete repository monitor
/api/v1/monitors/repositories/:name/runsPOSTTrigger a manual monitor run
/api/v1/monitors/repositories/:name/runsGETList monitor runs
/api/v1/monitors/repositories/:name/itemsGETList current monitor items
/api/v1/monitors/eventsGETList monitor audit events

Common query parameters:

  • namespace - Kubernetes namespace to operate in.
  • limit - page size for list endpoints.
  • continue or cursor - pagination cursor for store-backed list endpoints.
  • kind, state, verdict, repairState, and automergeState - filters for GET /api/v1/monitors/repositories/:name/items.
  • name, runID, itemKind, itemNumber, and eventType - filters for GET /api/v1/monitors/events; name is required.

Context-token authorization scopes are orka:monitors:read for list/get endpoints, orka:monitors:write for create/update/delete, and orka:monitors:operate for manual run creation.

Create Repository Monitor

Endpoint: POST /api/v1/monitors/repositories

Request Body:

{
"name": "example-app",
"namespace": "default",
"spec": {
"provider": "github",
"repoURL": "https://github.com/example/app",
"branch": "main",
"gitSecretRef": {"name": "repo-monitor-github"},
"schedule": "*/30 * * * *",
"targets": {
"pullRequests": {
"enabled": true,
"includeDrafts": false,
"maxPerRun": 10
}
},
"agents": {
"reviewer": {"name": "repo-reviewer"}
},
"review": {
"event": "COMMENT",
"staleReviewTTL": "24h",
"exactEventEnabled": true
},
"policy": {
"protectedLabels": ["security-sensitive"],
"pauseLabels": ["orka:pause"]
},
"validation": {
"mode": "changed",
"commands": ["make test"]
}
}
}

Response (201): The created RepositoryMonitor resource.

Required fields are name, spec.repoURL, and spec.agents.reviewer.name when pull request monitoring is enabled. The API defaults or infers provider, owner, repository, branch, pull request enablement, pull request maxPerRun, review.event, and validation mode where possible. spec.repoURL must be a credential-free GitHub repository root URL such as https://github.com/owner/repo, https://github.com/owner/repo.git, or git@github.com:owner/repo.git; pull request, issue, branch/tree, blob/file, commit, query-string, fragment, non-GitHub, HTTP, and embedded-credential URLs are rejected.

Only GitHub pull request monitoring is supported in this slice. Requests that enable issue or commit targets, disable pull request monitoring, use a non-GitHub provider, set review.requireGreenCI, reference a missing/non-Claude reviewer runtime, or reference a reviewer Agent without usable Claude credentials are rejected with 400. The reviewer Agent must use runtime.type: claude, must reference a Secret in the monitor namespace, and that Secret must contain a non-empty ANTHROPIC_API_KEY or ANTHROPIC_FOUNDRY_API_KEY key. When gitSecretRef is set, the Git Secret must exist in the monitor namespace and contain a non-empty token, password, or GITHUB_TOKEN key.

Trigger Manual Monitor Run

Endpoint: POST /api/v1/monitors/repositories/{name}/runs

Request Body:

{
"targetKind": "pull_request",
"targetNumber": 123,
"targetSHA": "abc123"
}

The request body can be omitted to run a full pull request inventory pass. targetKind must be empty or pull_request; targetNumber and targetSHA narrow the run to one PR or exact head. When targetNumber is set, the controller fetches that pull request directly from GitHub and does not retire unrelated monitor items from the repository-wide inventory. The API returns 409 when the monitor already has a queued or running run.

See Repository Monitors for the full workflow and CRD example.

Auth

EndpointMethodDescription
/api/v1/auth/validateGETValidate auth token

Secrets

EndpointMethodDescription
/api/v1/secretsGETList secret names (metadata only)

Chat

EndpointMethodDescription
/api/v1/chatPOSTSend message (SSE streaming or JSON)
/api/v1/chat/configGETGet chat configuration and available tools
/api/v1/chat/:sessionIdDELETECancel a chat session

See Interactive Chat for full chat documentation.

OpenAI-Compatible API

EndpointMethodDescription
/openai/v1/chat/completionsPOSTChat completions (streaming & non-streaming)
/openai/v1/modelsGETList available models

See OpenAI Compatibility for details.

Anthropic-Compatible API

EndpointMethodDescription
/anthropic/v1/messagesPOSTCreate a message (streaming & non-streaming)
/anthropic/v1/modelsGETList available models

The /anthropic/v1/messages endpoint injects built-in tools and runs server-side tool execution by default. Set X-Orka-Tools: disabled header to use as a transparent proxy instead. See Anthropic Compatibility for details.

Internal API (Worker Communication)

EndpointMethodDescription
/internal/v1/results/:namespace/:taskNamePOSTSubmit task result
/internal/v1/artifacts/:namespace/:taskName/:filenamePOSTUpload task artifact
/internal/v1/sessions/:namespace/:name/transcriptGETGet session transcript
/internal/v1/plans/:namespace/:taskNamePOSTSave plan state
/internal/v1/plans/:namespace/:taskNameGETGet plan state
/internal/v1/messages/:namespacePOSTSend inter-agent message
/internal/v1/messages/:namespace/:taskNameGETGet messages for a task

Save Plan State

Workers call this to persist autonomous plan state.

Endpoint: POST /internal/v1/plans/{namespace}/{taskName}

Request Body:

{
"summary": "Completed phase 1",
"progress_pct": 25,
"goal_complete": false,
"plan_document": "# Plan\n..."
}

Response: 204 No Content

Get Plan State

Workers call this to load the current plan state at startup.

Endpoint: GET /internal/v1/plans/{namespace}/{taskName}

Response (200): Same as public plan endpoint.

Errors:

  • 404 — No plan found

Send Message

Workers call this to send messages to sibling tasks (same parent coordinator).

Endpoint: POST /internal/v1/messages/{namespace}

Request Body:

{
"fromTask": "worker-a",
"toTask": "worker-b",
"parentTask": "coordinator",
"content": "Found a bug in the auth module"
}

Use "toTask": "*" to broadcast to all siblings.

Response: 204 No Content

Get Messages

Workers call this to check for unread messages.

Endpoint: GET /internal/v1/messages/{namespace}/{taskName}?parentTask={parentTask}&markRead={true|false}

Query Parameters:

  • parentTask (required) — Parent coordinator task name (scopes messages to siblings)
  • markRead (optional, default: true) — Whether to mark returned messages as read

Response (200):

[
{
"id": 1,
"namespace": "default",
"fromTask": "worker-b",
"toTask": "worker-a",
"parentTask": "coordinator",
"content": "Found a bug in the auth module",
"read": false,
"createdAt": "2026-01-15T10:30:00Z"
}
]

Health

EndpointMethodDescription
/healthzGETHealth check
/readyzGETReadiness check

Example Usage

# Create a task
curl -X POST http://localhost:8080/api/v1/tasks \
-H "Authorization: Bearer $(kubectl create token orka-client)" \
-H "Content-Type: application/json" \
-d '{
"name": "my-task",
"type": "ai",
"agentRef": {"name": "assistant"},
"prompt": "Explain microservices architecture"
}'

# Get task result
curl http://localhost:8080/api/v1/tasks/my-task/result \
-H "Authorization: Bearer $(kubectl create token orka-client)"

# List task artifacts
curl http://localhost:8080/api/v1/tasks/my-task/artifacts \
-H "Authorization: Bearer $(kubectl create token orka-client)"

# Download an artifact
curl -L http://localhost:8080/api/v1/tasks/my-task/artifacts/output.json \
-H "Authorization: Bearer $(kubectl create token orka-client)" \
-o output.json

# Chat with SSE streaming
curl -N http://localhost:8080/api/v1/chat \
-H "Authorization: Bearer $(kubectl create token orka-client)" \
-H "Content-Type: application/json" \
-d '{
"message": "Create an AI task that summarizes Kubernetes best practices",
"sessionId": "my-session"
}'

Built-in Tools

These tools are available to AI worker agents:

ToolDescriptionParameters
web_searchSearch the web via configurable API (Tavily, etc.)query (required), limit (default 5)
code_execExecute code in a sandboxed environmentlanguage (python/javascript/bash), code, timeout (max 60s)
file_readRead files from the workspacepath, offset, limit (max 1MB)
web_fetchFetch and extract URL contenturl (required), max_chars (default 50000), raw
file_writeWrite or append files in workspace pathspath (required), content (required), mode (write/append), create_dirs

Coordination Tools

These tools are injected into AI worker agents when the Agent has coordination.enabled: true. They are not returned by GET /api/v1/tools.

The following tools are auto-injected when coordination is enabled:

ToolDescriptionParameters
delegate_taskDelegate a subtask to another agentagent, prompt (required); namespace, priority, auto_retry, max_retries
wait_for_tasksWait for delegated tasks to completetasks (required), timeout (default 10m)
create_container_taskCreate a child container taskname, image, command/args, env/workspace fields
cancel_taskCancel a running child tasktask_name (required); namespace, reason
send_messageSend a message to a sibling taskto_task (required, or * to broadcast), content (required)
check_messagesCheck for messages from sibling tasksmark_read (boolean, default true)
recall_memoryRecall durable namespace-scoped memoriesquery, tags, task_name, agent_name, source, limit, include_disabled
rememberSubmit a durable memory proposal for reviewcontent (required); title, description, tags, agent_name
propose_memorySubmit a memory-adjacent governance proposaltitle (required); type, skill_name, description, content, patch, agent_name
search_transcriptSearch prior session transcriptsquery (required); session_name, exclude_session_name, roles, limit, max_snippet_length
create_pull_requestCreate a GitHub pull requesttask_name, head_branch, base_branch, title (required); body
check_pull_request_ciCheck GitHub CI status without mergingpr_number (required); task_name, repo_url, wait_timeout, poll_interval
list_pull_requestsList open pull requests in a repositorytask_name, repo_url; per_page, page
check_pr_review_markerCheck for an existing Orka PR review marker on a PR headpr_number (required); task_name, repo_url, head_sha
merge_pull_requestMerge a GitHub pull requesttask_name, pr_number (required); merge_method, commit_title, commit_message
auto_merge_pull_requestPoll CI checks and merge a PR when all passtask_name, pr_number (required); merge_method, commit_title, commit_message, timeout
review_pull_requestFetch PR diff for reviewpr_number (required); task_name, repo_url
post_review_commentPost a review on a PRpr_number, body, event (required); task_name, repo_url, comments
create_agentCreate an Agent CRD at runtimename, provider, model (required); systemPrompt, tools, coordination
delete_agentDelete an Agent CRDname (required), namespace
update_planUpdate the autonomous execution plansummary, plan_document (required); progress_pct, goal_complete

The following tools require explicit spec.tools[] entries on the Agent CRD:

ToolDescriptionParameters
list_issuesList open GitHub issues in a repositorytask_name, repo_url; unassigned_only (default true), per_page, page
get_issueFetch full details of a GitHub issueissue_number (required); task_name, repo_url
comment_on_issuePost a comment on a GitHub issueissue_number, body (required); task_name, repo_url

For GitHub tools that accept repo_url, explicit repository URLs are scope-checked when task context is available. The requested repository must match the current task's workspace repository or signed transaction repository context; otherwise the tool fails closed before resolving credentials or calling GitHub.

create_pr_monitor is exposed through the chat/management tool set rather than auto-injected into every coordinator worker. Parameters are name, repo_url, schedule, and agent_ref (required), plus optional namespace, provider_ref, gitSecretRef, per_page, review_event, and prompt. repo_url must be a credential-free GitHub repository root URL such as https://github.com/owner/repo, https://github.com/owner/repo.git, or git@github.com:owner/repo.git; pull request, issue, branch/tree, blob/file, commit, query-string, fragment, non-GitHub, HTTP, and embedded-credential URLs are rejected.

create_pr_monitor is the compatibility path for prompt-orchestrated scheduled PR monitors. It creates a scheduled type: ai Task, sets spec.workspace.gitRepo to repo_url, injects only the PR review loop tools, and instructs the task to pass the same repo_url to list_pull_requests, check_pr_review_marker, check_pull_request_ci, review_pull_request, and post_review_comment. The Agent referenced by agent_ref must be an AI Agent with coordination enabled and autonomous coordination disabled. The task needs a Git credential Secret through gitSecretRef or one of the supported default Secret names in the target namespace: git-credentials, github-credentials, copilot-token, github-token, or git-token. The selected Secret must contain a non-empty token, password, or GITHUB_TOKEN key.

check_pr_review_marker returns a hidden marker that the monitor should include unchanged in the subsequent review body. The marker includes repo, pr, head_sha, and sig fields, and matching is scoped to that repository, pull request, and exact head. Marker signatures are stable across GitHub token rotation. Operators can set ORKA_PR_REVIEW_MARKER_SECRET in the worker Task environment for dedicated marker signing and ORKA_PR_REVIEW_MARKER_PREVIOUS_SECRETS for comma-separated previous keys during rotation. Legacy markers are accepted only from a trusted review author, configured with ORKA_PR_REVIEW_MARKER_TRUSTED_AUTHOR or resolved from the Task's authenticated GitHub user.