API Reference
The Gibson SDK proto surface — every service, message, field, and enum, generated from the protos.
This is the machine-generated reference for the Gibson SDK proto surface — the services, messages, fields, and enums a component developer compiles against. It is exhaustive; the guides walk you through the common workflows. Every symbol below is grouped by its proto package.
Package gibson.agent.v1
Services
AgentService
Execute
ExecuteRequest → ExecuteResponse
GetDescriptor
GetDescriptorRequest → GetDescriptorResponse
GetSlotSchema
GetSlotSchemaRequest → GetSlotSchemaResponse
Health
HealthRequest → HealthResponse
Messages
AgentSlotConfig
| Field | # | Type | Description |
|---|---|---|---|
provider | 1 | string | — |
model | 2 | string | — |
temperature | 3 | double | — |
max_tokens | 4 | int32 | — |
AgentSlotConstraints
| Field | # | Type | Description |
|---|---|---|---|
min_context_window | 1 | int32 | — |
required_features | 2 | repeated string | — |
AgentSlotDefinition
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | — |
description | 2 | string | — |
required | 3 | bool | — |
default_config | 4 | AgentSlotConfig | — |
constraints | 5 | AgentSlotConstraints | — |
ExecuteRequest
| Field | # | Type | Description |
|---|---|---|---|
task | 1 | gibson.types.v1.Task | — |
timeout_ms | 2 | int64 | — |
callback_endpoint | 3 | string | Callback endpoint for the orchestrator's HarnessCallbackService. When provided, the agent will connect to this endpoint to access harness operations (LLM, tools, memory, etc.). |
callback_token | 4 | string | Optional authentication token for the callback connection. |
mission | 5 | gibson.common.v1.TypedMap | Mission context for this execution. |
target | 6 | gibson.common.v1.TypedMap | Target information for this execution. |
trace_id | 7 | string | Trace ID for distributed tracing (propagated from orchestrator). |
parent_span_id | 8 | string | Parent span ID for distributed tracing (propagated from orchestrator). |
mission_run_id | 9 | string | Mission run ID - unique identifier for this specific mission execution. Created by MissionGraphManager.CreateMissionRunNode at mission start. Used for mission-scoped GraphRAG storage. |
agent_run_id | 10 | string | Agent run ID - unique identifier for this specific agent execution. Used for DISCOVERED relationships and provenance tracking. |
run_number | 11 | int32 | Run number - sequential number for this mission (1, 2, 3...). Used for mission memory queries and historical comparisons. |
ExecuteResponse
| Field | # | Type | Description |
|---|---|---|---|
result | 1 | gibson.types.v1.Result | — |
error | 2 | gibson.common.v1.Error | — |
GetDescriptorRequest
No fields.
GetDescriptorResponse
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | — |
version | 2 | string | — |
description | 3 | string | — |
capabilities | 4 | repeated string | — |
target_schemas | 5 | repeated TargetSchemaProto | — |
technique_types | 6 | repeated string | — |
target_types | 7 | repeated string | Deprecated: v0.8.0. Use target_schemas (field 5) instead. Will be removed in v0.10.0. |
GetSlotSchemaRequest
No fields.
GetSlotSchemaResponse
| Field | # | Type | Description |
|---|---|---|---|
slots | 1 | repeated AgentSlotDefinition | — |
HealthRequest
No fields.
HealthResponse
| Field | # | Type | Description |
|---|---|---|---|
status | 1 | gibson.common.v1.HealthStatus | — |
TargetSchemaProto
| Field | # | Type | Description |
|---|---|---|---|
type | 1 | string | — |
version | 2 | string | — |
schema_json | 3 | string | — |
description | 4 | string | — |
Package gibson.agentidentity.v1
Package gibson.agentidentity.v1 — AgentIdentityService: customer-callable
machine-identity provisioning surface and the developer enrollment dev-loop
(gibson component register / gibson agent). Re-homed out of
gibson.tenant.v1 into its own wire package so it can stay in the OSS SDK
while the nine tenant-administration services move to the gibson platform
protos under the unchanged gibson.tenant.v1 package — keeping both in one
package would link two generated Go homes for gibson.tenant.v1 into the
daemon (proto: duplicate registration). See ADR-0058 (amended 2026-06-22).
Services
AgentIdentityService
AgentIdentityService provisions and manages machine identities for agents, tools, and plugins.
CreateAgentIdentity
CreateAgentIdentityRequest → CreateAgentIdentityResponse
CreateAgentIdentity provisions a new machine identity for an agent, tool, or plugin. Returns a one-time capability-grant bootstrap_token that cannot be recovered after this call (ADR-0045 — the unified enrollment credential for every kind).
ListAgentIdentities
ListAgentIdentitiesRequest → ListAgentIdentitiesResponse
ListAgentIdentities returns all agent/tool/plugin identities provisioned in the caller's tenant, with optional kind filtering and pagination.
RevokeAgentIdentity
RevokeAgentIdentityRequest → RevokeAgentIdentityResponse
RevokeAgentIdentity permanently revokes a machine identity. Existing JWTs stop validating within the IdP token TTL (<=60 seconds). Idempotent on already-revoked principals (returns NotFound).
Messages
AgentIdentity
AgentIdentity is a single entry in the list response.
| Field | # | Type | Description |
|---|---|---|---|
principal_id | 1 | string | — |
kind | 2 | PrincipalKind | — |
name | 3 | string | — |
description | 4 | string | — |
created_at | 5 | google.protobuf.Timestamp | — |
last_authenticated_at | 6 | google.protobuf.Timestamp | last_authenticated_at is null if never authenticated or unsupported by the IdP. |
revoked | 7 | bool | — |
created_by_subject | 8 | string | — |
ComponentGrant
ComponentGrant describes an optional FGA capability grant to apply at creation time.
| Field | # | Type | Description |
|---|---|---|---|
component_ref | 1 | string | component_ref is the component reference, e.g. "tool:nmap" or "plugin:gitlab". |
relation | 2 | string | relation is the FGA relation to grant, e.g. "can_invoke". |
CreateAgentIdentityRequest
CreateAgentIdentityRequest is the input to AgentIdentityService.CreateAgentIdentity.
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | name must match ^[a-z][a-z0-9-]{2,40}$ |
kind | 2 | PrincipalKind | kind must not be UNSPECIFIED. |
description | 3 | string | description is optional, max 256 chars. |
component_grants | 4 | repeated ComponentGrant | component_grants is an optional list of FGA capability grants to apply at creation. |
CreateAgentIdentityResponse
CreateAgentIdentityResponse carries the provisioned identity credentials. The bootstrap_token is emitted exactly once and cannot be recovered.
| Field | # | Type | Description |
|---|---|---|---|
principal_id | 1 | string | principal_id is the FGA principal identifier (e.g. "agent_principal:uuid"). |
kind | 2 | PrincipalKind | — |
name | 3 | string | — |
gibson_url | 6 | string | gibson_url is the daemon's public Envoy URL for use in enroll_command. |
enroll_command | 7 | string | enroll_command is a complete copy-pasteable shell invocation for component enrollment: gibson component register --kind <kind> --token -. |
bootstrap_token | 8 | string | bootstrap_token is a one-time, daemon-signed Capability-Grant bootstrap credential the component presents to the CG register endpoint to complete its FIRST host registration (it carries no Capability Grant yet). Under the unified-identity model (ADR-0045) this is the SOLE credential gibson component register uses for every kind; the enroll_command pipes it via --token -. Store it immediately; it will not be shown again. |
ListAgentIdentitiesRequest
ListAgentIdentitiesRequest is the input to AgentIdentityService.ListAgentIdentities.
| Field | # | Type | Description |
|---|---|---|---|
page_size | 1 | int32 | page_size defaults to 50, max 200. |
page_token | 2 | string | — |
kind_filter | 3 | PrincipalKind | kind_filter: UNSPECIFIED means return all kinds. |
ListAgentIdentitiesResponse
ListAgentIdentitiesResponse is the output of AgentIdentityService.ListAgentIdentities.
| Field | # | Type | Description |
|---|---|---|---|
identities | 1 | repeated AgentIdentity | — |
next_page_token | 2 | string | — |
RevokeAgentIdentityRequest
RevokeAgentIdentityRequest is the input to AgentIdentityService.RevokeAgentIdentity.
| Field | # | Type | Description |
|---|---|---|---|
principal_id | 1 | string | — |
RevokeAgentIdentityResponse
RevokeAgentIdentityResponse is the output of AgentIdentityService.RevokeAgentIdentity.
No fields.
Enums
PrincipalKind
PrincipalKind identifies the type of machine principal being provisioned.
| Value | # | Description |
|---|---|---|
PRINCIPAL_KIND_UNSPECIFIED | 0 | — |
PRINCIPAL_KIND_AGENT | 1 | — |
PRINCIPAL_KIND_TOOL | 2 | — |
PRINCIPAL_KIND_PLUGIN | 3 | — |
Package gibson.budget_status.v1
Package gibson.budget_status.v1 — public, customer-visible wire shapes for LLM budget status signals.
BudgetScope and BudgetExceeded are the wire-level types that:
- the daemon attaches to a codes.ResourceExhausted gRPC status as a status-detail when an ExecuteLLM call is denied for budget reasons (see internal/daemon/api/server_provider_exec.go); and
- the SDK exposes back to customer agent code through llm.BudgetExceededError and llm.IsBudgetExceeded (see llm/errors.go).
Both surfaces share these types — the customer-facing READ side lives in the public OSS SDK (this package); the tenant-admin WRITE-side service that mutates budgets (gibson.budget.v1.BudgetService) lives in the internal platform-sdk. Customer agent code branching on budget denial parses BudgetExceeded directly out of the gRPC status detail without needing the admin service descriptor.
This mirrors the sdk#103 pattern that did the same separation for gibson.capability.v1.CapabilityGrantInfo (READ side in OSS) vs gibson.admin.v1.GrantsAdminService (WRITE side in platform-sdk).
Spec: llm-user-attribution-governance (Requirement 3, READ-side wire contract); two-surface platform contract (ADR-0025 / ADR-0030, sdk#106).
Messages
BudgetExceeded
BudgetExceeded is the status-detail payload returned inside the codes.ResourceExhausted gRPC status when an LLM call is denied for budget reasons. Consumers unmarshal via SDK helper IsBudgetExceeded.
Field numbers + tag names are wire-identical to the original definition in gibson.budget.v1.BudgetExceeded; see sdk#106 for the relocation rationale. Customer code branching on budget denial continues to receive the same on-wire bytes.
| Field | # | Type | Description |
|---|---|---|---|
scope | 1 | BudgetScope | — |
dimension | 2 | string | dimension is one of "tokens" or "spend". |
current_usage | 3 | int64 | — |
limit | 4 | int64 | — |
period_reset_at_unix | 5 | int64 | — |
subject_id | 6 | string | subject_id is the limiting subject (user or team ID; empty for tenant). |
Enums
BudgetScope
BudgetScope identifies the subject class a budget applies to. Tenant is the rollup ceiling; user and team are subdivisions within a tenant.
Field numbers + enum-value names are wire-identical to the original definition in gibson.budget.v1; see sdk#106 for the relocation rationale.
| Value | # | Description |
|---|---|---|
BUDGET_SCOPE_UNSPECIFIED | 0 | — |
BUDGET_SCOPE_USER | 1 | — |
BUDGET_SCOPE_TEAM | 2 | — |
BUDGET_SCOPE_TENANT | 3 | — |
Package gibson.capability.v1
Package gibson.capability.v1 — public, customer-visible wire shape for capability grants (CG-JWTs).
CapabilityGrantInfo describes ONE active capability grant minted for an agent / tool / plugin install. It is the read-side projection returned by:
- gibson.identity.v1.IdentityService.WhoAmI (a principal listing its own active grants)
- gibson.admin.v1.GrantsAdminService.ListActiveGrants (a tenant_admin inspecting all grants in the tenant)
Both surfaces share this type — the READ side lives in the public OSS SDK (this package); the WRITE/inspector SERVICE that mutates grants lives in the internal platform-sdk. Customer code that embeds the agent runtime parses CapabilityGrantInfo to render "what can I do right now" UI without needing the admin service descriptor.
Spec: two-surface platform contract (ADR-0001, forthcoming); component-bootstrap-e2e Requirement 10 (read side); secrets-tenant-lifecycle Requirement 8.1 (write side, moved to platform-sdk under slice #108).
Messages
CapabilityGrantInfo
CapabilityGrantInfo is the wire-shape for one active capability grant. It is derived from the daemon's grant store and is suitable for both the dashboard's grants table and the agent-side "what can I do right now" UI.
| Field | # | Type | Description |
|---|---|---|---|
jti | 1 | string | jti is the JWT ID claim of the CG-JWT — the canonical identifier the dashboard uses for filtering and per-row drill-down. |
recipient_install_id | 2 | string | recipient_install_id is the install ID this grant was minted for. |
recipient_class | 3 | RecipientClass | recipient_class is the class of the install (AGENT / TOOL / PLUGIN). |
recipient_name | 4 | string | recipient_name is the display name (component name) of the install. |
allowed_rpcs | 5 | repeated string | allowed_rpcs is the set of method strings the grant authorizes (e.g. ["GetCredential", "RecordFinding"]). |
mission_id | 6 | string | mission_id is the mission this grant scopes the recipient to. Empty for non-mission-scoped grants. |
task_id | 7 | string | task_id is the task within the mission. Empty when mission_id is empty or the grant is mission-wide. |
issued_at_unix | 8 | int64 | issued_at_unix is the iat claim, Unix seconds. |
expires_at_unix | 9 | int64 | expires_at_unix is the exp claim, Unix seconds. |
near_expiry | 10 | bool | near_expiry is true when the grant expires within 5 minutes from now. The dashboard renders these rows with a warning highlight. |
isolation | 11 | IsolationMode | isolation is where this grant's untrusted-execution boundary lives (ADR-0010). UNSPECIFIED is treated as HOSTED_SANDBOX by the daemon's dispatch-policy gate. Consumed together with the deployment shape: setec-only permits only HOSTED_SANDBOX (fail-closed otherwise). |
Enums
IsolationMode
IsolationMode is where the untrusted-execution isolation boundary lives for a capability grant (ADR-0010). It is consumed by the daemon's dispatch-policy gate together with the deployment shape (GIBSON_UNTRUSTED_EXEC): under the hosted SaaS shape (setec-only) only ISOLATION_MODE_HOSTED_SANDBOX is permitted; any other value is rejected fail-closed. Under a customer-operated shape (customer-isolation) the customer modes are permitted, and ISOLATION_MODE_ON_PREM_SANDBOX_ENDPOINT resolves the configured (customer- pointed) setec SandboxService endpoint.
The enum lives here (public OSS) because callers parsing a CapabilityGrantInfo need to render the isolation posture without pulling the admin/mint service descriptor — same rationale as RecipientClass.
| Value | # | Description |
|---|---|---|
ISOLATION_MODE_UNSPECIFIED | 0 | ISOLATION_MODE_UNSPECIFIED is treated as ISOLATION_MODE_HOSTED_SANDBOX by the gate (back-compat for grants minted before this field shipped), which is the fail-closed-safe default in the hosted shape. |
ISOLATION_MODE_HOSTED_SANDBOX | 1 | ISOLATION_MODE_HOSTED_SANDBOX: untrusted execution runs in the platform- operated setec sandbox fleet. The only mode permitted under setec-only. |
ISOLATION_MODE_CUSTOMER_CLUSTER_ATTESTED | 2 | ISOLATION_MODE_CUSTOMER_CLUSTER_ATTESTED: untrusted execution runs in a customer-operated cluster whose isolation the daemon verifies by attestation. Attestation mechanics are a separate follow-up. |
ISOLATION_MODE_CUSTOMER_SELF_SANDBOX | 3 | ISOLATION_MODE_CUSTOMER_SELF_SANDBOX: the customer owns and operates the isolation boundary entirely. Attestation mechanics are a separate follow-up. |
ISOLATION_MODE_ON_PREM_SANDBOX_ENDPOINT | 4 | ISOLATION_MODE_ON_PREM_SANDBOX_ENDPOINT: untrusted execution dispatches to a customer-pointed setec SandboxService endpoint configured on the daemon. |
RecipientClass
RecipientClass is the class of caller a capability grant is issued to. The runtime enum lives here (public OSS) because callers parsing a CapabilityGrantInfo need to discriminate without pulling the admin service descriptor.
| Value | # | Description |
|---|---|---|
RECIPIENT_CLASS_UNSPECIFIED | 0 | — |
RECIPIENT_CLASS_AGENT | 1 | RECIPIENT_CLASS_AGENT: the grant authorizes an agent install to invoke a per-mission RPC set. |
RECIPIENT_CLASS_TOOL | 2 | RECIPIENT_CLASS_TOOL: the grant authorizes a tool install. |
RECIPIENT_CLASS_PLUGIN | 3 | RECIPIENT_CLASS_PLUGIN: the grant authorizes a plugin install. |
Package gibson.common.v1
Messages
Error
| Field | # | Type | Description |
|---|---|---|---|
code | 1 | string | — |
message | 2 | string | — |
details | 3 | string | — |
retryable | 4 | bool | — |
HealthStatus
| Field | # | Type | Description |
|---|---|---|---|
status | 1 | string | — |
message | 2 | string | — |
checked_at | 3 | int64 | — |
JSONSchema
| Field | # | Type | Description |
|---|---|---|---|
json | 1 | string | — |
Metadata
Metadata contains labels and annotations for resources
| Field | # | Type | Description |
|---|---|---|---|
labels | 1 | map<string, string> | — |
annotations | 2 | map<string, string> | — |
TypedArray
TypedArray represents an array of TypedValues
| Field | # | Type | Description |
|---|---|---|---|
items | 1 | repeated TypedValue | — |
TypedMap
TypedMap represents a map of string keys to TypedValues
| Field | # | Type | Description |
|---|---|---|---|
entries | 1 | map<string, TypedValue> | — |
TypedValue
TypedValue represents a dynamically typed value
| Field | # | Type | Description |
|---|---|---|---|
null_value | 1 | NullValue | — |
string_value | 2 | string | — |
int_value | 3 | int64 | — |
double_value | 4 | double | — |
bool_value | 5 | bool | — |
bytes_value | 6 | bytes | — |
array_value | 7 | TypedArray | — |
map_value | 8 | TypedMap | — |
oneof kind — one of: null_value, string_value, int_value, double_value, bool_value, bytes_value, array_value, map_value.
Enums
ErrorCode
ErrorCode defines standard error codes across the system
| Value | # | Description |
|---|---|---|
ERROR_CODE_UNSPECIFIED | 0 | — |
ERROR_CODE_INTERNAL | 1 | — |
ERROR_CODE_INVALID_ARGUMENT | 2 | — |
ERROR_CODE_NOT_FOUND | 3 | — |
ERROR_CODE_TIMEOUT | 4 | — |
ERROR_CODE_UNAVAILABLE | 5 | — |
ERROR_CODE_PERMISSION_DENIED | 6 | — |
ERROR_CODE_ALREADY_EXISTS | 7 | — |
ERROR_CODE_RESOURCE_EXHAUSTED | 8 | — |
ERROR_CODE_CANCELLED | 9 | — |
ERROR_CODE_AGENT_TIMEOUT | 10 | — |
ERROR_CODE_AGENT_PANIC | 11 | — |
ERROR_CODE_AGENT_INIT_FAILED | 12 | — |
ERROR_CODE_LLM_RATE_LIMITED | 13 | — |
ERROR_CODE_LLM_CONTEXT_EXCEEDED | 14 | — |
ERROR_CODE_LLM_API_ERROR | 15 | — |
ERROR_CODE_LLM_PARSE_ERROR | 16 | — |
ERROR_CODE_TOOL_NOT_FOUND | 17 | — |
ERROR_CODE_TOOL_TIMEOUT | 18 | — |
ERROR_CODE_TOOL_EXEC_FAILED | 19 | — |
ERROR_CODE_NETWORK_TIMEOUT | 20 | — |
ERROR_CODE_NETWORK_UNREACHABLE | 21 | — |
ERROR_CODE_TLS_ERROR | 22 | — |
ERROR_CODE_DELEGATION_FAILED | 23 | — |
ERROR_CODE_CHILD_AGENT_FAILED | 24 | — |
ERROR_CODE_CONFIG_ERROR | 25 | — |
HealthState
HealthState defines standard health states
| Value | # | Description |
|---|---|---|
HEALTH_STATE_UNSPECIFIED | 0 | — |
HEALTH_STATE_HEALTHY | 1 | — |
HEALTH_STATE_DEGRADED | 2 | — |
HEALTH_STATE_UNHEALTHY | 3 | — |
NullValue
NullValue represents a null value in TypedValue
| Value | # | Description |
|---|---|---|
NULL_VALUE_UNSPECIFIED | 0 | — |
Package gibson.component.v1
Services
ComponentService
ComponentService is the central gRPC service that all Gibson components (agents, tools, and plugins) connect to. Components register themselves, receive work via long-polling, submit results, and access harness operations (LLM completion, tool calls, plugin queries, findings, memory) through the proxy RPCs defined here.
CallTool
CallToolRequest → CallToolResponse
CallTool proxies a tool execution request through the agent harness.
CallToolStream
CallToolStreamRequest → stream CallToolStreamResponse
CallToolStream proxies a tool execution with server-side streaming of progress, partial results, warnings, and the final output.
CancelMission
CancelMissionRequest → CancelMissionResponse
CancelMission requests cancellation of a running mission.
Complete
CompleteRequest → CompleteResponse
Complete proxies an LLM completion request through the agent harness.
CompleteStream
CompleteStreamRequest → stream CompleteStreamResponse
CompleteStream proxies a streaming LLM completion request through the agent harness.
CompleteStructured
CompleteStructuredRequest → CompleteStructuredResponse
CompleteStructured proxies an LLM completion requesting JSON output conforming to the supplied schema.
CompleteWithTools
CompleteWithToolsRequest → CompleteWithToolsResponse
CompleteWithTools proxies an LLM completion with tool definitions for function-calling support. Returns the response including any tool calls.
CreateMission
CreateMissionRequest → CreateMissionResponse
CreateMission creates a new sub-mission.
DelegateToAgent
DelegateToAgentRequest → DelegateToAgentResponse
DelegateToAgent dispatches a sub-task to another agent and returns its result.
DisablePlugin
DisablePluginRequest → DisablePluginResponse
DisablePlugin deactivates a plugin for the calling tenant.
EnablePlugin
EnablePluginRequest → EnablePluginResponse
EnablePlugin activates a plugin for the calling tenant, optionally supplying an initial configuration JSON blob.
FindSimilarAttacks
FindSimilarAttacksRequest → FindSimilarAttacksResponse
FindSimilarAttacks returns attack patterns semantically similar to the given content.
FindSimilarFindings
FindSimilarFindingsRequest → FindSimilarFindingsResponse
FindSimilarFindings returns findings semantically similar to the given finding.
GetAttackChains
GetAttackChainsRequest → GetAttackChainsResponse
GetAttackChains returns multi-hop attack paths from a starting technique.
GetCredential
GetCredentialRequest → GetCredentialResponse
GetCredential retrieves a tenant-scoped credential by name.
GetFindings
GetFindingsRequest → GetFindingsResponse
GetFindings queries previously submitted findings with optional filters.
GetMissionResults
GetMissionResultsRequest → GetMissionResultsResponse
GetMissionResults returns the final results of a completed mission.
GetMissionRunHistory
GetMissionRunHistoryRequest → GetMissionRunHistoryResponse
GetMissionRunHistory returns summaries of previous mission runs.
GetMissionStatus
GetMissionStatusRequest → GetMissionStatusResponse
GetMissionStatus returns the current status of a mission.
GetPluginConfig
GetPluginConfigRequest → GetPluginConfigResponse
GetPluginConfig retrieves the current configuration and schema for a plugin.
GetRelatedFindings
GetRelatedFindingsRequest → GetRelatedFindingsResponse
GetRelatedFindings returns findings related to the given finding via graph edges.
GetRunFindings
GetRunFindingsRequest → GetRunFindingsResponse
GetRunFindings queries findings scoped to a specific mission run or across all runs.
GetTaxonomySchema
GetTaxonomySchemaRequest → GetTaxonomySchemaResponse
GetTaxonomySchema returns the current taxonomy definition.
Heartbeat
HeartbeatRequest → HeartbeatResponse
Heartbeat sends a periodic health pulse. The response indicates whether the component is still considered registered and may carry config updates.
ListAgents
ListAgentsRequest → ListAgentsResponse
ListAgents returns descriptors for all agents visible to the caller's tenant.
ListAvailablePlugins
ListAvailablePluginsRequest → ListAvailablePluginsResponse
ListAvailablePlugins returns all plugins registered in the system along with their catalog metadata, health status, and configuration schema.
ListMissions
ListMissionsRequest → ListMissionsResponse
ListMissions returns missions matching the given filter.
ListTenantPlugins
ListTenantPluginsRequest → ListTenantPluginsResponse
ListTenantPlugins returns the plugin access records for the calling tenant.
ListTools
ListToolsRequest → ListToolsResponse
ListTools returns descriptors for all tools visible to the caller's tenant.
PollWork
PollWorkRequest → PollWorkResponse
PollWork long-polls for work items assigned to this component instance. Returns when a work item is available or the server-side timeout expires.
Authorized by can_poll_work, not can_execute: PollWork/SubmitResult are
the receive-side of dispatch (how a component gets its work), distinct
from CallTool/RunMission's drive-side (how a component directs the
platform). Sharing can_execute would let a poll-only grant also drive
missions. can_poll_work is modeled as can_execute or can_receive_work,
so existing can_execute holders keep polling unchanged.
QueryNodes
QueryNodesRequest → QueryNodesResponse
QueryNodes searches the knowledge graph using hybrid vector + graph scoring.
QueryPlugin
QueryPluginRequest → QueryPluginResponse
QueryPlugin proxies a plugin query request through the agent harness.
QueueToolWork
QueueToolWorkRequest → QueueToolWorkResponse
QueueToolWork submits a batch of tool invocations for parallel execution and returns a job ID for tracking.
RegisterComponent
RegisterComponentRequest → RegisterComponentResponse
RegisterComponent announces a component to Gibson and receives connection configuration including heartbeat and poll intervals.
ReportStepHints
ReportStepHintsRequest → ReportStepHintsResponse
ReportStepHints reports planning step hints from an agent back to the orchestrator.
RunMission
RunMissionRequest → RunMissionResponse
RunMission queues a mission for execution.
SubmitFinding
SubmitFindingRequest → SubmitFindingResponse
SubmitFinding submits a security finding through the agent harness.
SubmitResult
SubmitResultRequest → SubmitResultResponse
SubmitResult returns the execution result for a previously polled work item.
Authorized by can_poll_work — see PollWork's comment for why this receive-side RPC does not share can_execute with the drive-side RPCs.
TestPluginConnection
TestPluginConnectionRequest → TestPluginConnectionResponse
TestPluginConnection validates connectivity and credentials for a plugin without persisting any state changes.
ToolResults
ToolResultsRequest → stream ToolResultsResponse
ToolResults streams results for a previously queued tool batch as each invocation completes.
UpdatePluginConfig
UpdatePluginConfigRequest → UpdatePluginConfigResponse
UpdatePluginConfig replaces the configuration for an already-enabled plugin.
WaitMission
WaitMissionRequest → WaitMissionResponse
WaitMission blocks until a mission completes or the timeout expires.
Messages
AgentDescriptorProto
AgentDescriptorProto describes a registered agent.
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | — |
version | 2 | string | — |
description | 3 | string | — |
capabilities | 4 | repeated string | — |
target_types | 5 | repeated string | — |
CallToolRequest
CallToolRequest is a harness proxy request to execute a tool.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
tool_name | 2 | string | — |
input_json | 3 | string | input_json is the JSON-encoded tool input matching the tool's input schema. |
timeout_ms | 4 | int64 | — |
CallToolResponse
CallToolResponse carries the tool execution result.
| Field | # | Type | Description |
|---|---|---|---|
output_json | 1 | string | output_json is the JSON-encoded tool output matching the tool's output schema. |
error | 2 | ComponentError | — |
CallToolStreamRequest
CallToolStreamRequest is a harness proxy request for streaming tool execution.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
tool_name | 2 | string | — |
input_json | 3 | string | — |
timeout_ms | 4 | int64 | — |
CallToolStreamResponse
CallToolStreamResponse is a single event in a streaming tool execution.
| Field | # | Type | Description |
|---|---|---|---|
event_type | 1 | string | event_type: "progress", "partial", "warning", "error", "result". |
payload_json | 2 | string | payload_json carries event-specific data. |
done | 3 | bool | done is true on the final event. |
error | 4 | ComponentError | — |
CancelMissionRequest
CancelMissionRequest requests cancellation of a running mission.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
mission_id | 2 | string | — |
CancelMissionResponse
CancelMissionResponse is returned after cancellation is requested.
No fields.
CompleteRequest
CompleteRequest is a harness proxy request for a non-streaming LLM completion.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | work_id ties this request to the active work item for authorization and billing. |
slot | 2 | string | slot is the named LLM slot defined by the agent (e.g. "primary"). |
messages | 3 | repeated LLMMessage | — |
timeout_ms | 4 | int64 | timeout_ms is the maximum time to wait for the completion. |
CompleteResponse
CompleteResponse carries the LLM's reply to a non-streaming completion.
| Field | # | Type | Description |
|---|---|---|---|
response | 1 | LLMMessage | — |
usage | 2 | TokenUsage | — |
CompleteStreamRequest
CompleteStreamRequest is a harness proxy request for a streaming LLM completion.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | work_id ties this request to the active work item for authorization and billing. |
slot | 2 | string | slot is the named LLM slot defined by the agent (e.g. "primary"). |
messages | 3 | repeated LLMMessage | — |
timeout_ms | 4 | int64 | timeout_ms is the maximum time to wait for the completion. |
CompleteStreamResponse
CompleteStreamResponse is a single chunk in a streaming LLM completion response.
| Field | # | Type | Description |
|---|---|---|---|
content | 1 | string | — |
done | 2 | bool | done is true on the final chunk; usage is only populated on the final chunk. |
usage | 3 | TokenUsage | — |
CompleteStructuredRequest
CompleteStructuredRequest is a harness proxy request for structured JSON output.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
slot | 2 | string | — |
messages | 3 | repeated LLMMessage | — |
schema_json | 4 | string | schema_json is a JSON Schema the LLM output must conform to. |
timeout_ms | 5 | int64 | — |
CompleteStructuredResponse
CompleteStructuredResponse carries the validated structured output.
| Field | # | Type | Description |
|---|---|---|---|
result_json | 1 | string | result_json is the JSON output conforming to the requested schema. |
usage | 2 | TokenUsage | — |
CompleteWithToolsRequest
CompleteWithToolsRequest is a harness proxy request for LLM completion with tool definitions.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
slot | 2 | string | — |
messages | 3 | repeated LLMMessage | — |
tools | 4 | repeated ToolDefinition | — |
timeout_ms | 5 | int64 | — |
CompleteWithToolsResponse
CompleteWithToolsResponse carries the LLM's reply including any tool calls.
| Field | # | Type | Description |
|---|---|---|---|
response | 1 | LLMMessage | — |
usage | 2 | TokenUsage | — |
tool_calls | 3 | repeated ToolCallResult | — |
finish_reason | 4 | string | — |
ComponentDescriptor
ComponentDescriptor is the unified persisted description of a component registered in the Gibson ComponentRegistry, regardless of how it is dispatched. Consumers (orchestrator, dashboard, CLI, authz) look up a descriptor by name and switch on dispatch_mode to choose the routing.
Legacy fields (name, version, kind, tags, metadata) describe every component. Sandboxed-dispatch fields (image, command, env, resources, default_timeout_seconds, input_schema_json, output_proto_type, default_parse_quality) are populated by the daemon's catalog refresher for sandboxed tools. Plugin/agent entries leave those fields zero.
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | Common metadata — populated for every dispatch_mode. |
version | 2 | string | — |
kind | 3 | string | — |
description | 4 | string | — |
tags | 5 | repeated string | — |
metadata | 6 | map<string, string> | — |
dispatch_mode | 7 | DispatchMode | — |
image | 10 | string | Sandboxed-dispatch fields (DISPATCH_MODE_SANDBOXED only). image is an OCI reference pinned by digest for reproducibility. |
command | 11 | repeated string | command is the argv the runner executes inside the microVM. |
env | 12 | map<string, string> | env is static environment variables prepended to every Launch call. The daemon adds GIBSON_TOOL_INPUT_B64 and tracing headers on top. |
resources | 13 | Resources | resources is the vCPU + memory budget per sandbox. |
default_timeout_seconds | 14 | int32 | default_timeout_seconds bounds the synchronous tool call. |
input_schema_json | 15 | bytes | input_schema_json is the JSON Schema document describing the tool's typed arguments (fed to the orchestrator LLM for tool_use selection). |
output_proto_type | 16 | string | output_proto_type is the fully-qualified proto message name the tool's response conforms to, e.g. "gibson.tool.nmap.v1.ExecuteResponse". |
default_parse_quality | 17 | ParseQuality | default_parse_quality advertises how richly the runner's parser will populate the response's field-100 DiscoveryResult for this tool. |
content_trust | 18 | ContentTrust | content_trust classifies the trust level of input data this component processes at call-time. Consumed by the daemon's dispatch policy gate together with dispatch_mode (see ContentTrust doc above). The default zero (CONTENT_TRUST_UNSPECIFIED) is treated as TRUSTED at gate-evaluation time for backward compatibility with descriptors registered before this field existed. NOTE: field 100 is reserved platform-wide for gibson.graphrag.DiscoveryResult on tool response messages (see enterprise/docs/ARCHITECTURE.md); do not assign new fields >= 100 on any component message without coordination. |
ComponentError
ComponentError represents a structured error returned by a component or harness operation.
| Field | # | Type | Description |
|---|---|---|---|
code | 1 | string | code is a short machine-readable error identifier (e.g. "TOOL_NOT_FOUND"). |
message | 2 | string | — |
retryable | 3 | bool | retryable indicates whether the caller should attempt to retry the operation. |
ComponentMethod
ComponentMethod is the rich, per-method descriptor for a plugin method, carrying the metadata the connector catalog and SearchTools surface to agents.
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | name is the method identifier (matches an entry in RegisterComponentRequest.methods). |
description | 2 | string | description is a human-readable explanation of the method, surfaced in the catalog so an agent can disambiguate similar tools. |
input_schema_json | 3 | string | input_schema_json is the JSON-Schema document describing the method's input, when the source provides one (e.g. an MCP vendor's tools/list inputSchema). Optional; empty when unknown. |
CreateMissionRequest
CreateMissionRequest creates a new sub-mission.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
mission_definition_json | 2 | bytes | mission_definition_json is the JSON-encoded mission definition. |
target_id | 3 | string | — |
opts_json | 4 | bytes | opts_json is the JSON-encoded mission.CreateMissionOpts. |
CreateMissionResponse
CreateMissionResponse carries the created mission info.
| Field | # | Type | Description |
|---|---|---|---|
mission_json | 1 | bytes | mission_json is the JSON-encoded mission.MissionInfo. |
DelegateToAgentRequest
DelegateToAgentRequest dispatches a sub-task to another agent.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
agent_name | 2 | string | — |
task_json | 3 | bytes | task_json is the JSON-encoded agent.Task to delegate. |
DelegateToAgentResponse
DelegateToAgentResponse carries the delegated agent's result.
| Field | # | Type | Description |
|---|---|---|---|
result_json | 1 | bytes | result_json is the JSON-encoded agent.Result. |
DisablePluginRequest
DisablePluginRequest deactivates the named plugin for the calling tenant.
| Field | # | Type | Description |
|---|---|---|---|
plugin_name | 1 | string | plugin_name is the unique identifier of the plugin to disable. |
DisablePluginResponse
DisablePluginResponse reports the outcome of a disable operation.
| Field | # | Type | Description |
|---|---|---|---|
success | 1 | bool | success is true when the plugin was disabled without error. |
message | 2 | string | — |
EnablePluginRequest
EnablePluginRequest activates a plugin and optionally supplies initial configuration.
| Field | # | Type | Description |
|---|---|---|---|
plugin_name | 1 | string | plugin_name is the unique identifier of the plugin to enable. |
config_json | 2 | string | config_json is an optional JSON-encoded configuration blob for the plugin. |
EnablePluginResponse
EnablePluginResponse reports the outcome of an enable operation.
| Field | # | Type | Description |
|---|---|---|---|
success | 1 | bool | success is true when the plugin was enabled without error. |
message | 2 | string | — |
FindSimilarAttacksRequest
FindSimilarAttacksRequest searches for attack patterns similar to the given content.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
content | 2 | string | — |
top_k | 3 | int32 | — |
FindSimilarAttacksResponse
FindSimilarAttacksResponse carries matching attack patterns.
| Field | # | Type | Description |
|---|---|---|---|
results_json | 1 | bytes | results_json is a JSON-encoded []graphrag.AttackPattern. |
FindSimilarFindingsRequest
FindSimilarFindingsRequest searches for findings similar to the given one.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
finding_id | 2 | string | — |
top_k | 3 | int32 | — |
FindSimilarFindingsResponse
FindSimilarFindingsResponse carries matching findings.
| Field | # | Type | Description |
|---|---|---|---|
results_json | 1 | bytes | results_json is a JSON-encoded []graphrag.FindingNode. |
GetAttackChainsRequest
GetAttackChainsRequest requests multi-hop attack paths from a technique.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
technique_id | 2 | string | — |
max_depth | 3 | int32 | — |
GetAttackChainsResponse
GetAttackChainsResponse carries attack chain results.
| Field | # | Type | Description |
|---|---|---|---|
results_json | 1 | bytes | results_json is a JSON-encoded []graphrag.AttackChain. |
GetCredentialRequest
GetCredentialRequest retrieves a tenant-scoped credential.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
name | 2 | string | — |
GetCredentialResponse
GetCredentialResponse carries the credential.
| Field | # | Type | Description |
|---|---|---|---|
credential_json | 1 | bytes | credential_json is the JSON-encoded types.Credential. |
GetFindingsRequest
GetFindingsRequest queries previously submitted findings.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
filter_json | 2 | bytes | filter_json is a JSON-encoded finding.Filter. |
GetFindingsResponse
GetFindingsResponse carries matching findings.
| Field | # | Type | Description |
|---|---|---|---|
findings_json | 1 | bytes | findings_json is a JSON-encoded []*finding.Finding. |
GetMissionResultsRequest
GetMissionResultsRequest requests the final results of a mission.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
mission_id | 2 | string | — |
GetMissionResultsResponse
GetMissionResultsResponse carries the mission results.
| Field | # | Type | Description |
|---|---|---|---|
result_json | 1 | bytes | result_json is the JSON-encoded mission.MissionResult. |
GetMissionRunHistoryRequest
GetMissionRunHistoryRequest requests summaries of previous mission runs.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
GetMissionRunHistoryResponse
GetMissionRunHistoryResponse carries run summaries.
| Field | # | Type | Description |
|---|---|---|---|
runs_json | 1 | bytes | runs_json is the JSON-encoded []types.MissionRunSummary. |
GetMissionStatusRequest
GetMissionStatusRequest requests the current status of a mission.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
mission_id | 2 | string | — |
GetMissionStatusResponse
GetMissionStatusResponse carries the mission status.
| Field | # | Type | Description |
|---|---|---|---|
status_json | 1 | bytes | status_json is the JSON-encoded mission.MissionStatusInfo. |
GetPluginConfigRequest
GetPluginConfigRequest requests the current configuration for a named plugin.
| Field | # | Type | Description |
|---|---|---|---|
plugin_name | 1 | string | plugin_name is the unique identifier of the plugin to inspect. |
GetPluginConfigResponse
GetPluginConfigResponse carries the stored configuration and its schema.
| Field | # | Type | Description |
|---|---|---|---|
config_json | 1 | string | config_json is the JSON-encoded configuration currently stored for the plugin. |
config_schema_json | 2 | string | config_schema_json is the JSON Schema document describing the plugin's configurable fields. |
GetRelatedFindingsRequest
GetRelatedFindingsRequest requests findings related via graph relationships.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
finding_id | 2 | string | — |
GetRelatedFindingsResponse
GetRelatedFindingsResponse carries related findings.
| Field | # | Type | Description |
|---|---|---|---|
results_json | 1 | bytes | results_json is a JSON-encoded []graphrag.FindingNode. |
GetRunFindingsRequest
GetRunFindingsRequest queries findings scoped to mission runs.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
scope | 2 | string | scope: "previous" for prior run, "all" for all runs. |
filter_json | 3 | bytes | filter_json is a JSON-encoded finding.Filter. |
GetRunFindingsResponse
GetRunFindingsResponse carries matching run-scoped findings.
| Field | # | Type | Description |
|---|---|---|---|
findings_json | 1 | bytes | findings_json is a JSON-encoded []*finding.Finding. |
GetTaxonomySchemaRequest
GetTaxonomySchemaRequest requests the current taxonomy definition.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
GetTaxonomySchemaResponse
GetTaxonomySchemaResponse carries the taxonomy schema.
| Field | # | Type | Description |
|---|---|---|---|
schema_json | 1 | bytes | schema_json is the JSON-encoded taxonomy definition. |
HeartbeatRequest
HeartbeatRequest is the periodic health pulse sent by a registered component.
| Field | # | Type | Description |
|---|---|---|---|
instance_id | 1 | string | — |
health_status | 2 | string | health_status is the component's self-reported health: "healthy", "degraded", or "unhealthy". |
health_message | 3 | string | health_message provides optional human-readable detail about the health status. |
HeartbeatResponse
HeartbeatResponse is returned by the server after each heartbeat.
| Field | # | Type | Description |
|---|---|---|---|
registered | 1 | bool | registered indicates whether the server still considers this instance registered. A false value means the component must re-register before polling for work. |
config_updates | 2 | map<string, string> | config_updates carries any configuration values that have changed since the last heartbeat. The component should merge these into its running config. |
LLMMessage
LLMMessage represents a single message in an LLM conversation.
Tool-call round trips are represented with two message shapes so a
multi-turn conversation can replay the full tool history structurally
(instead of flattening it into content text):
- An assistant turn that requested tool calls sets
roleto "assistant" and carries the calls intool_calls(typically copied verbatim from a priorCompleteWithToolsResponse.tool_calls).contentholds any accompanying assistant text and may be empty. - A tool-result turn sets
roleto "tool",tool_call_idto theToolCallResult.idit answers, andcontentto the tool's output. One message per tool call; a turn with N tool calls is followed by N tool-result messages.
Both fields are optional: plain role+content messages are unchanged.
| Field | # | Type | Description |
|---|---|---|---|
role | 1 | string | role is "system", "user", "assistant", or "tool". |
content | 2 | string | — |
tool_calls | 3 | repeated ToolCallResult | tool_calls carries the tool calls an assistant turn requested. Set only when role is "assistant"; empty for all other roles. |
tool_call_id | 4 | string | tool_call_id identifies which requested tool call this message answers. Set only when role is "tool", in which case content carries the tool's output and this matches the ToolCallResult.id of the corresponding entry in the preceding assistant turn's tool_calls. Empty for all other roles. |
ListAgentsRequest
ListAgentsRequest requests descriptors for all available agents.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
ListAgentsResponse
ListAgentsResponse carries all agent descriptors visible to the caller.
| Field | # | Type | Description |
|---|---|---|---|
agents | 1 | repeated AgentDescriptorProto | — |
ListAvailablePluginsRequest
ListAvailablePluginsRequest is an empty request; filtering may be added in future fields.
No fields.
ListAvailablePluginsResponse
ListAvailablePluginsResponse carries the full catalog of plugins visible to the caller.
| Field | # | Type | Description |
|---|---|---|---|
plugins | 1 | repeated PluginCatalogEntryProto | plugins is the ordered list of catalog entries for every registered plugin. |
ListMissionsRequest
ListMissionsRequest returns missions matching the given filter.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
filter_json | 2 | bytes | filter_json is the JSON-encoded mission.MissionFilter. |
ListMissionsResponse
ListMissionsResponse carries matching missions.
| Field | # | Type | Description |
|---|---|---|---|
missions_json | 1 | bytes | missions_json is the JSON-encoded []*mission.MissionInfo. |
ListTenantPluginsRequest
ListTenantPluginsRequest is an empty request for the calling tenant's plugin access records.
No fields.
ListTenantPluginsResponse
ListTenantPluginsResponse carries all plugin access records belonging to the calling tenant.
| Field | # | Type | Description |
|---|---|---|---|
plugins | 1 | repeated PluginAccessProto | plugins is the ordered list of plugin access records for the calling tenant. |
ListToolsRequest
ListToolsRequest requests descriptors for all available tools.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
ListToolsResponse
ListToolsResponse carries all tool descriptors visible to the caller.
| Field | # | Type | Description |
|---|---|---|---|
tools | 1 | repeated ToolDescriptorProto | — |
PluginAccessProto
PluginAccessProto represents the access record linking a tenant to a specific plugin.
| Field | # | Type | Description |
|---|---|---|---|
tenant_id | 1 | string | tenant_id is the identifier of the tenant that owns this access record. |
plugin_name | 2 | string | plugin_name is the unique identifier of the plugin. |
enabled | 3 | bool | enabled indicates whether the plugin is currently active for this tenant. |
source | 4 | string | source identifies how the tenant gained access to this plugin (e.g. "manual", "helm"). |
configured_at | 5 | string | configured_at is the RFC 3339 timestamp of the last configuration change. |
configured_by | 6 | string | configured_by is the identity (user or service account) that applied the last config. |
has_config | 7 | bool | has_config indicates whether a non-empty configuration blob is stored for this record. |
PluginCatalogEntryProto
PluginCatalogEntryProto describes a single plugin as it appears in the catalog.
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | name is the unique identifier for the plugin (e.g. "gitlab"). |
version | 2 | string | — |
description | 3 | string | — |
methods | 4 | repeated string | methods lists the callable method names exposed by this plugin. |
config_schema_json | 5 | string | config_schema_json is the JSON Schema document describing the plugin's configurable fields. |
enabled | 6 | bool | enabled indicates whether the plugin is currently active for the calling tenant. |
configured | 7 | bool | configured indicates whether the plugin has a non-empty configuration stored. |
health_status | 8 | string | health_status is the last-known health of the plugin: "healthy", "degraded", or "unhealthy". |
source | 9 | string | source identifies where this plugin was discovered (e.g. "registry", "local"). |
instance_count | 10 | int32 | instance_count is the number of running instances currently registered. |
PollWorkRequest
PollWorkRequest is sent by a component to request the next available work item.
| Field | # | Type | Description |
|---|---|---|---|
instance_id | 1 | string | — |
timeout_ms | 2 | int32 | timeout_ms is the maximum duration the server should hold the request open waiting for work before returning an empty response. Should match the value received in RegisterComponentResponse.poll_timeout_ms. |
PollWorkResponse
PollWorkResponse carries a single work item for the component to execute. When work_id is empty the poll timed out without available work.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | work_id uniquely identifies this work item. Must be included in SubmitResult. |
work_type | 2 | string | work_type describes what kind of work this is (e.g. "execute", "stream"). |
payload | 3 | bytes | payload is the serialized work payload; interpretation depends on work_type. |
context | 4 | map<string, string> | context carries arbitrary key-value metadata associated with this work item. |
timeout_ms | 5 | int64 | timeout_ms is the maximum time allowed to complete and submit the result. |
QueryNodesRequest
QueryNodesRequest is a harness proxy request for knowledge graph queries.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
query | 2 | gibson.graphrag.v1.GraphQuery | — |
QueryNodesResponse
QueryNodesResponse carries knowledge graph query results.
| Field | # | Type | Description |
|---|---|---|---|
results | 1 | repeated gibson.graphrag.v1.QueryResult | — |
QueryPluginRequest
QueryPluginRequest is a harness proxy request to invoke a plugin method.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
plugin_name | 2 | string | — |
method | 3 | string | — |
params_json | 4 | string | params_json is the JSON-encoded method parameters. |
timeout_ms | 5 | int64 | — |
QueryPluginResponse
QueryPluginResponse carries the plugin method result.
| Field | # | Type | Description |
|---|---|---|---|
result_json | 1 | string | result_json is the JSON-encoded method result. |
error | 2 | ComponentError | — |
QueueToolWorkRequest
QueueToolWorkRequest submits a batch of tool invocations for parallel execution.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
tool_name | 2 | string | — |
inputs_json | 3 | repeated string | inputs_json is a list of JSON-encoded tool inputs. |
QueueToolWorkResponse
QueueToolWorkResponse carries the assigned job ID for tracking results.
| Field | # | Type | Description |
|---|---|---|---|
job_id | 1 | string | — |
RegisterComponentRequest
RegisterComponentRequest is sent by a component on startup to announce itself and declare its capabilities.
| Field | # | Type | Description |
|---|---|---|---|
kind | 1 | string | kind identifies the component type: "agent", "tool", or "plugin". |
name | 2 | string | — |
version | 3 | string | — |
metadata | 4 | map<string, string> | — |
capabilities | 5 | repeated string | capabilities lists agent capabilities (used when kind == "agent"). |
methods | 6 | repeated string | methods lists plugin methods (used when kind == "plugin"). |
input_message_type | 7 | string | input_message_type is the fully-qualified proto message type for tool input (used when kind == "tool"). |
output_message_type | 8 | string | output_message_type is the fully-qualified proto message type for tool output (used when kind == "tool"). |
file_descriptor_set | 9 | bytes | file_descriptor_set is the serialized proto FileDescriptorSet describing the tool's schema (used when kind == "tool"). |
config_schema_json | 10 | string | config_schema_json is the JSON Schema document describing the plugin's configuration surface (used when kind == "plugin"). |
ontology_extension | 11 | gibson.graphrag.v1.OntologyExtension | ontology_extension carries the component's contribution to the daemon's ontology reasoner (hierarchies, equivalences, IFPs, prefixes). Optional; components that do not author an ontology.yaml leave this unset and the daemon's reasoner is unaffected. Mirrors graphrag.OntologyExtension on the Go side; populated automatically by serve.Tool / serve.Agent when the component implements the optional serve.OntologyContributor interface. |
method_descriptors | 12 | repeated ComponentMethod | method_descriptors carries per-method metadata (name + human-readable description + optional JSON-Schema input) for plugin methods. It is the rich superset of methods (which stays for back-compat): methods carries names only; method_descriptors carries the descriptions an agent reads to disambiguate tools in the catalog (SearchTools). Used when kind == "plugin". Empty is valid (older SDKs populate only methods). |
RegisterComponentResponse
RegisterComponentResponse carries the assigned instance ID and connection parameters for the component to use going forward.
| Field | # | Type | Description |
|---|---|---|---|
instance_id | 1 | string | instance_id is the unique identifier assigned to this component instance. |
heartbeat_interval_ms | 2 | int32 | heartbeat_interval_ms is the recommended interval between Heartbeat calls. |
poll_interval_ms | 3 | int32 | poll_interval_ms is the recommended interval between PollWork calls when the previous poll returned no work. |
poll_timeout_ms | 4 | int32 | poll_timeout_ms is the server-side long-poll timeout the component should pass in PollWorkRequest.timeout_ms. |
config | 5 | map<string, string> | config carries initial configuration values for the component. |
ReportStepHintsRequest
ReportStepHintsRequest reports planning step hints from an agent.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
hints_json | 2 | bytes | hints_json is the JSON-encoded planning.StepHints. |
ReportStepHintsResponse
ReportStepHintsResponse is returned after hints are accepted.
No fields.
Resources
Resources declares the compute budget a sandboxed component requires per call. Units mirror Kubernetes resource conventions (vcpu is whole CPUs; memory is a quantity string like "256Mi" or "1Gi"). Only meaningful when dispatch_mode == DISPATCH_MODE_SANDBOXED.
| Field | # | Type | Description |
|---|---|---|---|
vcpu | 1 | int32 | — |
memory | 2 | string | — |
RunMissionRequest
RunMissionRequest queues a mission for execution.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
mission_id | 2 | string | — |
opts_json | 3 | bytes | opts_json is the JSON-encoded mission.RunMissionOpts. |
RunMissionResponse
RunMissionResponse is returned after a mission is queued.
No fields.
SubmitFindingRequest
SubmitFindingRequest is a harness proxy request to record a security finding.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
finding | 2 | bytes | finding is the JSON encoding of the SDK finding.Finding struct (see finding/finding.go). NOT a proto-encoded message — the daemon reads it with string(req.Finding). This is distinct from the typed HarnessCallbackService.SubmitFinding RPC, which carries a gibson.types.v1.Finding proto message. |
SubmitFindingResponse
SubmitFindingResponse is returned after a finding is accepted.
| Field | # | Type | Description |
|---|---|---|---|
finding_id | 1 | string | finding_id is the server-assigned identifier for the recorded finding. |
SubmitResultRequest
SubmitResultRequest delivers the outcome of a completed work item back to Gibson.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
result | 2 | bytes | result is the serialized result payload. |
error | 3 | ComponentError | error is set when the work item failed; leave unset on success. |
SubmitResultResponse
SubmitResultResponse is returned after a result is accepted.
No fields.
TestPluginConnectionRequest
TestPluginConnectionRequest asks the daemon to validate plugin credentials and connectivity without persisting any changes.
| Field | # | Type | Description |
|---|---|---|---|
plugin_name | 1 | string | plugin_name is the unique identifier of the plugin to test. |
config_json | 2 | string | config_json is the JSON-encoded configuration to test; if empty the stored configuration is used. |
TestPluginConnectionResponse
TestPluginConnectionResponse reports the result of a connectivity test.
| Field | # | Type | Description |
|---|---|---|---|
success | 1 | bool | success is true when the plugin endpoint was reachable and credentials were accepted. |
message | 2 | string | — |
latency_ms | 3 | int64 | latency_ms is the round-trip time of the test probe in milliseconds. |
TokenUsage
TokenUsage reports token consumption for an LLM call.
| Field | # | Type | Description |
|---|---|---|---|
input_tokens | 1 | int32 | — |
output_tokens | 2 | int32 | — |
ToolCallResult
ToolCallResult represents a tool call made by the LLM.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
name | 2 | string | — |
arguments_json | 3 | string | arguments is the JSON-encoded arguments the LLM generated for this tool call. |
ToolDefinition
ToolDefinition describes a tool available for LLM function calling.
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | — |
description | 2 | string | — |
input_schema_json | 3 | string | input_schema is a JSON Schema describing the tool's input parameters. |
ToolDescriptorProto
ToolDescriptorProto describes a registered tool.
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | — |
version | 2 | string | — |
description | 3 | string | — |
tags | 4 | repeated string | — |
input_message_type | 5 | string | — |
output_message_type | 6 | string | — |
ToolResultsRequest
ToolResultsRequest requests streaming results for a previously queued tool batch.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
job_id | 2 | string | — |
ToolResultsResponse
ToolResultsResponse is a single result from a queued tool batch.
| Field | # | Type | Description |
|---|---|---|---|
index | 1 | int32 | index is the zero-based position in the original inputs array. |
output_json | 2 | string | output_json is the JSON-encoded tool output. |
error | 3 | ComponentError | — |
done | 4 | bool | done is true on the final result. |
UpdatePluginConfigRequest
UpdatePluginConfigRequest replaces the stored configuration for an enabled plugin.
| Field | # | Type | Description |
|---|---|---|---|
plugin_name | 1 | string | plugin_name is the unique identifier of the plugin whose config will be updated. |
config_json | 2 | string | config_json is the JSON-encoded configuration blob to persist. |
UpdatePluginConfigResponse
UpdatePluginConfigResponse reports the outcome of a config update operation.
| Field | # | Type | Description |
|---|---|---|---|
success | 1 | bool | success is true when the configuration was updated without error. |
message | 2 | string | — |
WaitMissionRequest
WaitMissionRequest blocks until a mission completes or the timeout expires.
| Field | # | Type | Description |
|---|---|---|---|
work_id | 1 | string | — |
mission_id | 2 | string | — |
timeout_ms | 3 | int64 | timeout_ms is the maximum time to wait. 0 means wait indefinitely. |
WaitMissionResponse
WaitMissionResponse carries the final mission result.
| Field | # | Type | Description |
|---|---|---|---|
result_json | 1 | bytes | result_json is the JSON-encoded mission.MissionResult. |
Enums
ContentTrust
ContentTrust classifies the trust level of input data a component will
process at call-time. The daemon's dispatch policy gate consults this
classification together with dispatch_mode to decide whether a call may
proceed: an UNTRUSTED component MUST be dispatched via DISPATCH_MODE_SANDBOXED
(microVM) — direct PLUGIN/AGENT execution against UNTRUSTED data is denied
unless a platform-operator override is active.
The default zero value (CONTENT_TRUST_UNSPECIFIED) is treated as TRUSTED by
the gate for backward compatibility with descriptors registered before this
field existed; operators can flip the daemon's strictDefaultUntrusted=true
flag to invert that default during a phased rollout.
| Value | # | Description |
|---|---|---|
CONTENT_TRUST_UNSPECIFIED | 0 | — |
CONTENT_TRUST_TRUSTED | 1 | CONTENT_TRUST_TRUSTED: input data is sourced from trusted, in-cluster origins (operator-installed plugins, internal services, vetted manifests) and may safely run in PLUGIN/AGENT processes. |
CONTENT_TRUST_UNTRUSTED | 2 | CONTENT_TRUST_UNTRUSTED: input data is sourced from external networks, user-supplied targets, or third-party feeds (DNS responses, scanned hosts, template downloads, etc.). MUST be dispatched via SANDBOXED execution. |
DispatchMode
DispatchMode identifies how the Gibson daemon should dispatch calls to a component registered in the ComponentRegistry. The enum lets one registry serve tools (sandboxed microVM dispatch), plugins (long-running stateful gRPC), and agents (long-running gRPC) uniformly — consumers look up by name and switch on dispatch_mode to choose the route.
| Value | # | Description |
|---|---|---|
DISPATCH_MODE_UNSPECIFIED | 0 | — |
DISPATCH_MODE_SANDBOXED | 1 | DISPATCH_MODE_SANDBOXED: the component is a stateless tool executed in an ephemeral Setec microVM. The registry entry carries image/env/ resources used to Launch the sandbox per call. |
DISPATCH_MODE_PLUGIN | 2 | DISPATCH_MODE_PLUGIN: the component is a long-running plugin process that heartbeats to the registry and serves gRPC. |
DISPATCH_MODE_AGENT | 3 | DISPATCH_MODE_AGENT: the component is a long-running agent process that heartbeats to the registry and serves gRPC. |
ParseQuality
ParseQuality tags how richly a sandboxed-tool response populates its field-100 DiscoveryResult. The taxonomy persistence layer uses this to filter queries by data quality.
| Value | # | Description |
|---|---|---|
PARSE_QUALITY_UNSPECIFIED | 0 | — |
PARSE_QUALITY_STRUCTURED | 1 | PARSE_QUALITY_STRUCTURED: response includes fully populated taxonomy nodes (Host, Port, Service, Finding,...). |
PARSE_QUALITY_PARTIAL | 2 | PARSE_QUALITY_PARTIAL: response includes some taxonomy nodes plus raw output preserved in Evidence nodes. |
PARSE_QUALITY_RAW | 3 | PARSE_QUALITY_RAW: response preserves stdout as an Evidence node only; no taxonomy-specific nodes were extracted. |
PARSE_QUALITY_FAILED | 4 | PARSE_QUALITY_FAILED: a parser errored; stdout/stderr preserved for diagnostics, DiscoveryResult is nil. |
Package gibson.daemon.v1
Schema evolution policy (mission-schema-canonicalization Requirement 7):
- Enum values (MissionStatus, etc.) are append-only. No renumbers,
no deletions. Deprecated values use
[deprecated = true]plus a// reservedcomment. - Message field numbers are append-only. No renumbers, no reuse. Type-of-field changes ARE breaking and require a ship sequence across SDK + every consumer (see ADR 0004 for the precedent).
- Cross-file consistency: this file consumes gibson.mission.v1.MissionDefinition AND gibson.mission.v1.MissionConstraints (the canonical platform-wide constraint shape per ADR 0004). The daemon-local MissionConstraints message was removed in the same change. Any breaking change to the canonical SDK type must be coordinated with this file under the canonical ship sequence.
Services
DaemonService
DaemonService provides the gRPC API for Gibson daemon client communication.
This service exposes operational daemon functionality including mission execution, agent management, and real-time event streaming for the TUI and SDK clients.
BuildComponent
BuildComponentRequest → BuildComponentResponse
BuildComponent rebuilds a component (agent, tool, or plugin) from source. Useful for rebuilding after manual code changes.
CompleteMissionCUE
CompleteMissionCUERequest → CompleteMissionCUEResponse
CompleteMissionCUE returns completion candidates at a cursor position. Powers the dashboard CUE editor's auto-complete.
Connect
ConnectRequest → ConnectResponse
Connect establishes a client connection to the daemon. Returns connection metadata and daemon version info.
CreateMission
CreateMissionRequest → CreateMissionResponse
CreateMission creates a new mission with target and mission-definition reference. Supports both referenced and inline configurations.
CreateMissionDefinition
CreateMissionDefinitionRequest → CreateMissionDefinitionResponse
CreateMissionDefinition registers a structured mission definition with the daemon. This is the API-only replacement for the removed InstallMission RPC: the daemon does not clone git repositories or parse YAML; callers submit a fully-formed MissionDefinition proto (serialized from JSON in the CLI via protojson, or constructed natively in the dashboard).
CreateTarget
CreateTargetRequest → CreateTargetResponse
CreateTarget registers a new target and returns its server-minted UUID. The id field of the supplied target is ignored; the daemon mints it.
DeleteTarget
DeleteTargetRequest → DeleteTargetResponse
DeleteTarget removes a target by its UUID.
GetAgentStatus
GetAgentStatusRequest → GetAgentStatusResponse
GetAgentStatus returns the current status of a specific agent.
GetCapabilityManifest
gibson.manifest.v1.GetCapabilityManifestRequest → gibson.manifest.v1.GetCapabilityManifestResponse
GetCapabilityManifest returns the signed, versioned capability manifest for the calling principal in their resolved tenant. SDKs call this on session start and on invalidation events. The ADK calls it at scaffold time to discover what components, permissions, cross-component rules, and runtime limits apply.
GetComponentLogs
GetComponentLogsRequest → stream GetComponentLogsResponse
GetComponentLogs streams log entries for a component. Supports follow mode for continuous streaming and line limits.
GetMissionDefinition
GetMissionDefinitionRequest → GetMissionDefinitionResponse
GetMissionDefinition returns the full structured proto for a single installed mission definition, looked up by name. Use this instead of ListMissionDefinitions when the caller knows the definition name and needs every author-facing field (workspace, constraints, per-node retry/data/reuse policies). Returns codes.NotFound when the name is not registered. Spec: mission-author-experience M5 (gibson#134).
GetMissionGraph
GetMissionGraphRequest → GetMissionGraphResponse
GetMissionGraph returns the renderable flow-chart projection of a mission definition: typed nodes (boxes), data-flow edges, derived entry/exit, and per-node positions. The daemon computes the topology and a deterministic auto-layout from the mission DAG, then overlays any saved layout from the mission layout store (SaveMissionLayout) so hand-arranged positions win. This keeps the dashboard a pure renderer — it never re-derives topology. Presentation only: nothing here affects mission execution. Spec: MissionGraph epic (sdk#278).
GetMissionHistory
GetMissionHistoryRequest → GetMissionHistoryResponse
GetMissionHistory returns all runs for a mission name, showing the complete history of mission executions with the same mission name.
GetMissionLayout
GetMissionLayoutRequest → GetMissionLayoutResponse
GetMissionLayout returns the saved diagram layout (per-node positions + viewport) for a mission definition, or an empty layout when none has been saved. The layout store is separate from the mission definition record — the mission work-schema carries no presentation state. Keyed by mission_definition_id. Spec: MissionGraph epic (sdk#278).
GetMyPermissions
GetMyPermissionsRequest → GetMyPermissionsResponse
GetMyPermissions returns the current user's role, is_admin flag, component grants, and team memberships for the current tenant. Used by the dashboard's PermissionsCache to gate UI elements without per-click daemon calls.
Auth: self-mode (spec: self-mode-authz). The hotfix unauthenticated: true
is replaced with self: true + allowed_identities: USER. This RPC may be
called before the active-tenant cookie is set (which made the earlier
tenant_from_identity FGA check fail with "no tenant derivable"), so no
FGA tuple lookup is performed. The four defense layers are preserved:
(a) Envoy jwt_authn validates the Zitadel JWT before ext-authz.
(b) ext-authz mints X-Gibson-Identity-Subject from the verified sub —
clients cannot forge it.
(c) The daemon's SPIFFE mTLS init is fail-closed (zero-trust-hardening
Req 1) so non-Envoy callers cannot reach the listener.
(d) ext-authz enforces allowed_identities: only USER tokens are accepted.
The handler scopes the response strictly to the caller's verified subject.
GetTarget
GetTargetRequest → GetTargetResponse
GetTarget returns a single target by its UUID.
HoverMissionCUE
HoverMissionCUERequest → HoverMissionCUEResponse
HoverMissionCUE returns type and documentation for a position in CUE source. Powers the dashboard CUE editor's hover tooltip.
ListAgents
ListAgentsRequest → ListAgentsResponse
ListAgents returns all registered agents from the etcd registry.
ListMissionDefinitions
ListMissionDefinitionsRequest → ListMissionDefinitionsResponse
ListMissionDefinitions returns all installed mission definitions.
ListMissions
ListMissionsRequest → ListMissionsResponse
ListMissions returns all missions (past and active).
ListMyMemberships
ListMyMembershipsRequest → ListMyMembershipsResponse
ListMyMemberships returns every tenant the authenticated caller is a member of, with the caller's role per tenant. Identity comes from the call context; no tenant_id parameter — this RPC discovers the caller's tenants. Used by the dashboard at sign-in time to populate the tenant picker / set the active-tenant cookie.
Auth: self-mode (spec: self-mode-authz). The hotfix unauthenticated: true
is replaced with self: true + allowed_identities: USER. By definition this
RPC runs before the caller's active tenant is known, so a
tenant_from_identity deriver would always fail "no tenant derivable". The
same four defense layers as GetMyPermissions apply; see that method for the
full contract. The handler self-scopes the membership list to the verified
caller subject.
ListPlugins
ListPluginsRequest → ListPluginsResponse
ListPlugins returns all registered plugins from the etcd registry.
ListTargets
ListTargetsRequest → ListTargetsResponse
ListTargets returns the calling tenant's targets, narrowed by TargetFilter.
ListTools
ListToolsRequest → ListToolsResponse
ListTools returns all registered tools from the etcd registry.
PauseMission
PauseMissionRequest → PauseMissionResponse
PauseMission pauses a running mission at the next clean checkpoint boundary. If force is true, pauses immediately without waiting for a clean boundary.
Ping
PingRequest → PingResponse
Ping checks if the daemon is responsive. Used for health checks and connection validation.
QueryPlugin
QueryPluginRequest → QueryPluginResponse
QueryPlugin executes a method on a plugin and returns the result. The plugin must be registered in the etcd registry.
RenewCapabilityGrant
RenewCapabilityGrantRequest → RenewCapabilityGrantResponse
RenewCapabilityGrant mints a fresh capability-grant JWT for an ongoing mission task whose existing CG-JWT is approaching its ≤30-minute expiry. Long-running missions (vuln research, broad recon sweeps, multi-host fuzzing) call this before their current CG-JWT expires so callbacks keep flowing without dispatching a fresh task.
Authorization: the caller MUST present a valid (non-expired) CG-JWT whose subject matches the request's agent_id and whose mission_id/task_id match the request. Renewal is rate-limited per agent to prevent abuse.
Spec: unified-identity-and-authorization Requirement 5.8.
ResumeMission
ResumeMissionRequest → stream ResumeMissionResponse
ResumeMission resumes a paused mission from its last checkpoint. Returns a stream of mission events as execution continues.
RunMission
RunMissionRequest → stream RunMissionResponse
RunMission starts a mission and streams execution events. The stream remains open until the mission completes or is stopped.
SaveMissionLayout
SaveMissionLayoutRequest → SaveMissionLayoutResponse
SaveMissionLayout persists a hand-arranged diagram layout for a mission definition into the layout store. Layout-only: it never mutates the mission definition, its nodes/edges/configs, or its cue_source. The optional expected_version enables optimistic concurrency — a stale write (the layout changed underneath) is rejected rather than clobbering. Keyed by mission_definition_id. Spec: MissionGraph epic (sdk#278).
ShowComponent
ShowComponentRequest → ShowComponentResponse
ShowComponent returns detailed information about a component. Includes manifest, status, paths, and lifecycle information.
StartComponent
StartComponentRequest → StartComponentResponse
StartComponent starts a component (agent, tool, or plugin) by kind and name. The component must be installed in the local database.
Status
StatusRequest → StatusResponse
Status returns the current daemon status including uptime, service endpoints, and component counts.
StopComponent
StopComponentRequest → StopComponentResponse
StopComponent stops a running component (agent, tool, or plugin) by kind and name. If force is true, sends SIGKILL immediately instead of graceful SIGTERM.
StopMission
StopMissionRequest → StopMissionResponse
StopMission gracefully stops a running mission.
Subscribe
SubscribeRequest → stream SubscribeResponse
Subscribe establishes an event stream for TUI real-time updates. Streams mission events, agent events, finding events, etc.
UpdateMissionDefinition
UpdateMissionDefinitionRequest → UpdateMissionDefinitionResponse
UpdateMissionDefinition replaces the content of an existing mission definition. The name field of the embedded definition is the lookup key. All other fields replace the stored definition; the server-assigned ID and original timestamps are preserved. Returns codes.NotFound if no definition with that name exists. Spec: gibson#437.
UpdateTarget
UpdateTargetRequest → UpdateTargetResponse
UpdateTarget replaces a target's metadata. The id field is the lookup key and is never changed.
ValidateMissionCUE
ValidateMissionCUERequest → ValidateMissionCUEResponse
ValidateMissionCUE compiles a CUE mission snippet and returns diagnostics. Powers the dashboard CUE editor's real-time error squiggles, and is now callable by ADK/SDK users with a single user token. An empty diagnostics list means the source is valid.
WatchManifestInvalidations
gibson.manifest.v1.WatchManifestInvalidationsRequest → stream gibson.manifest.v1.WatchManifestInvalidationsResponse
WatchManifestInvalidations streams ManifestInvalidationEvents to the caller whenever their resolved tenant's manifest is invalidated (FGA mutation, component registry change, tier update). Heartbeats are emitted periodically to keep the stream alive.
Messages
AgentEvent
AgentEvent represents an agent lifecycle event.
| Field | # | Type | Description |
|---|---|---|---|
event_type | 1 | string | event_type identifies the agent event type (registered, unregistered, health_change) |
timestamp | 2 | int64 | timestamp is when the event occurred (Unix timestamp) |
agent_id | 3 | string | agent_id is the agent identifier |
agent_name | 4 | string | agent_name is the agent name |
message | 5 | string | message is a human-readable message |
data | 6 | gibson.common.v1.TypedMap | data contains event-specific data (typed map) |
AgentInfo
AgentInfo describes a registered agent.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | id is the unique agent identifier |
name | 2 | string | name is the agent name |
kind | 3 | string | kind is the component kind (always "agent") |
version | 4 | string | version is the agent version |
endpoint | 5 | string | endpoint is the gRPC endpoint for the agent |
capabilities | 6 | repeated string | capabilities lists agent capabilities |
health | 7 | string | health is the agent health status (healthy, unhealthy) |
last_seen | 8 | int64 | last_seen is when the agent was last seen (Unix timestamp) |
BuildComponentRequest
BuildComponentRequest requests rebuilding a component from source.
| Field | # | Type | Description |
|---|---|---|---|
kind | 1 | string | kind is the component kind ("agent", "tool", "plugin") |
name | 2 | string | name is the component name to build |
BuildComponentResponse
BuildComponentResponse returns the result of building a component.
| Field | # | Type | Description |
|---|---|---|---|
success | 1 | bool | success indicates if the build was successful |
stdout | 2 | string | stdout contains the build standard output |
stderr | 3 | string | stderr contains the build standard error |
duration_ms | 4 | int64 | duration_ms is the build time in milliseconds |
message | 5 | string | message provides additional context or error information |
CUECompletionItem
CUECompletionItem is a single completion suggestion from CompleteMissionCUE.
| Field | # | Type | Description |
|---|---|---|---|
label | 1 | string | label is the text to insert (the completion token). |
detail | 2 | string | detail is a short type annotation or signature hint. |
documentation | 3 | string | documentation is the Markdown documentation for this item. |
kind | 4 | string | kind classifies the item: "field" | "value" | "keyword". |
CUEDiagnostic
CUEDiagnostic is a single error or warning produced by CUE compilation or schema validation. Line and col are 1-based.
| Field | # | Type | Description |
|---|---|---|---|
line | 1 | int32 | line is the 1-based source line number. |
col | 2 | int32 | col is the 1-based column offset. |
message | 3 | string | message is the human-readable diagnostic text. |
severity | 4 | string | severity is "error" or "warning". |
Capabilities
Capabilities describes runtime privileges and features available to a tool.
| Field | # | Type | Description |
|---|---|---|---|
has_root | 1 | bool | has_root indicates the tool is running as uid 0 (root user) |
has_sudo | 2 | bool | has_sudo indicates passwordless sudo access is available |
can_raw_socket | 3 | bool | can_raw_socket indicates the ability to create raw network sockets |
features | 4 | map<string, bool> | features contains tool-specific feature availability flags |
blocked_args | 5 | repeated string | blocked_args lists command-line arguments that cannot be used |
arg_alternatives | 6 | map<string, string> | arg_alternatives maps blocked arguments to their safer alternatives |
CheckpointMetadata
CheckpointMetadata is the lightweight summary of the source checkpoint streamed back on a ResumeMission response so the dashboard can render "Resumed from checkpoint X".
Spec: mission-checkpointing R9.
| Field | # | Type | Description |
|---|---|---|---|
checkpoint_id | 1 | string | checkpoint_id is the unique identifier of the source checkpoint. |
saved_at_unix_seconds | 2 | int64 | saved_at_unix_seconds is when the checkpoint was captured (Unix epoch seconds). |
super_step_number | 3 | int32 | super_step_number identifies which super-step boundary this checkpoint captured (1-based; 0 if not super-step-aligned). |
cadence_reason | 4 | string | cadence_reason is a free-form classifier for why the checkpoint was taken. Recognised values per R9.1: "super_step", "parallel_group_complete", "approval_required", "graceful_shutdown". Promoted to enum at v1.0.0. |
size_bytes | 5 | int64 | size_bytes is the wire size of the checkpoint payload (advisory). |
CompleteMissionCUERequest
CompleteMissionCUERequest requests completion items at a cursor position.
| Field | # | Type | Description |
|---|---|---|---|
cue_source | 1 | string | cue_source is the raw CUE source text at the time of the request. |
line | 2 | int32 | line is the 1-based cursor line number. |
col | 3 | int32 | col is the 1-based cursor column offset. |
CompleteMissionCUEResponse
CompleteMissionCUEResponse returns the completion items for the cursor position.
| Field | # | Type | Description |
|---|---|---|---|
items | 1 | repeated CUECompletionItem | items is the list of completion candidates. |
ConnectRequest
ConnectRequest initiates a client connection to the daemon.
| Field | # | Type | Description |
|---|---|---|---|
client_version | 1 | string | client_version is the version of the Gibson CLI client |
client_id | 2 | string | client_id is an optional unique identifier for this client |
ConnectResponse
ConnectResponse returns connection metadata.
| Field | # | Type | Description |
|---|---|---|---|
daemon_version | 1 | string | daemon_version is the version of the running daemon |
session_id | 2 | string | session_id is a unique identifier for this client session |
grpc_address | 3 | string | grpc_address is the address the daemon is listening on |
CreateMissionDefinitionRequest
CreateMissionDefinitionRequest registers a new mission definition with the daemon. The definition is validated server-side via MissionDefinition.Validate and written to the definition store.
| Field | # | Type | Description |
|---|---|---|---|
definition | 1 | gibson.mission.v1.MissionDefinition | definition is the fully-formed mission definition to register. |
cue_source | 2 | string | cue_source is the raw CUE source text that compiled to definition (maximum 512 KB). Persisted alongside the definition so that GetMissionDefinition can return the author's exact source rather than a reconstruction. Optional for backward compatibility; when empty the definition is stored without a recoverable source. |
CreateMissionDefinitionResponse
CreateMissionDefinitionResponse returns the registered mission definition ID and its summary info record.
| Field | # | Type | Description |
|---|---|---|---|
mission_definition_id | 1 | string | mission_definition_id is the server-assigned identifier for the definition. |
info | 2 | MissionDefinitionInfo | info is the summary record for the registered definition. |
CreateMissionRequest
CreateMissionRequest requests creation of a new mission. API-only: missions reference a registered target and mission definition by ID. Inline target / inline mission / YAML paths are no longer accepted.
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | name is the mission name |
description | 2 | string | description is the mission description |
target_id | 3 | string | target_id is the ID of a pre-registered target. |
mission_definition_id | 4 | string | mission_definition_id is the ID of a pre-registered mission definition. |
constraints | 5 | gibson.mission.v1.MissionConstraints | constraints defines dispatch-time execution constraints. Canonical type per ADR 0004: gibson.mission.v1.MissionConstraints is the single platform-wide shape. Precedence: dispatch-time constraints (this field) take full precedence over any constraints baked into the referenced MissionDefinition. There is NO per-field merge — if this field is set, the entire dispatch constraint set wins; any field absent from this message reverts to 0 (unlimited), not to the definition's value. To inherit the definition's constraints, leave this field unset (the zero-value message is NOT the same as "absent"). Callers that want partial overrides must read the definition's constraints first and re-supply all fields they wish to preserve. Token budget precedence for per-call caps: dispatch constraints.max_tokens_per_call > definition constraints.max_tokens_per_call > per-node *NodeConfig.max_tokens_per_call (lowest; wins if set) Spec: ADR 0004, mission-schema-canonicalization; gibson#133 (M4). |
metadata | 6 | map<string, string> | metadata provides additional mission metadata |
variables | 7 | map<string, string> | variables contains mission variables to override at creation time |
memory_continuity | 8 | string | memory_continuity defines how agent memory is shared across mission runs Valid values: "isolated" (default), "inherit", "shared" |
source_yaml | 9 | string | source_yaml is the original YAML the dashboard used to construct this mission. Optional. When non-empty, the daemon stores it alongside the structured mission state. Empty for programmatic callers that never had a YAML source. Spec: dashboard-neo4j-crud-removal Req 3.5. |
CreateMissionResponse
CreateMissionResponse returns the result of creating a mission.
| Field | # | Type | Description |
|---|---|---|---|
success | 1 | bool | success indicates if the mission was created successfully |
mission | 2 | Mission | mission is the created mission |
message | 3 | string | message provides additional context or error information |
CreateTargetRequest
CreateTargetRequest carries the metadata for a new target.
| Field | # | Type | Description |
|---|---|---|---|
target | 1 | gibson.target.v1.Target | target carries the new target's metadata. Its id field is ignored; the daemon mints the canonical UUID. |
CreateTargetResponse
CreateTargetResponse returns the minted target.
| Field | # | Type | Description |
|---|---|---|---|
target_id | 1 | string | target_id is the server-minted UUID — the canonical identity clients use to reference this target thereafter. |
target | 2 | gibson.target.v1.Target | target is the full stored target, including the minted id and timestamps. |
DeleteTargetRequest
DeleteTargetRequest removes a target by UUID.
| Field | # | Type | Description |
|---|---|---|---|
target_id | 1 | string | target_id is the UUID of the target to delete. |
DeleteTargetResponse
DeleteTargetResponse reports the outcome of a delete.
| Field | # | Type | Description |
|---|---|---|---|
success | 1 | bool | — |
Event
Event represents a generic daemon event.
| Field | # | Type | Description |
|---|---|---|---|
event_type | 1 | string | event_type identifies the type of event |
timestamp | 2 | int64 | timestamp is when the event occurred (Unix timestamp) |
source | 3 | string | source is the event source (mission, agent, daemon, etc.) |
data | 4 | gibson.common.v1.TypedMap | data contains event-specific data (typed map) |
mission_event | 5 | MissionEvent | — |
agent_event | 7 | AgentEvent | — |
finding_event | 8 | FindingEvent | — |
tool_event | 9 | ToolEvent | — |
llm_event | 10 | LLMEvent | — |
orchestrator_event | 11 | OrchestratorEvent | — |
oneof event — one of: mission_event, agent_event, finding_event, tool_event, llm_event, orchestrator_event.
FindingEvent
FindingEvent represents a finding discovery event.
| Field | # | Type | Description |
|---|---|---|---|
event_type | 1 | string | event_type identifies the finding event type (discovered, updated) |
timestamp | 2 | int64 | timestamp is when the event occurred (Unix timestamp) |
finding | 3 | FindingInfo | finding is the finding information |
mission_id | 4 | string | mission_id is the mission that discovered the finding |
FindingInfo
FindingInfo describes a discovered vulnerability.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | id is the unique finding identifier |
title | 2 | string | title is the finding title |
severity | 3 | string | severity is the severity level (info, low, medium, high, critical) |
category | 4 | string | category is the finding category |
description | 5 | string | description is the detailed finding description |
technique | 6 | string | technique is the MITRE ATT&CK or ATLAS technique ID |
evidence | 7 | string | evidence contains supporting evidence |
timestamp | 8 | int64 | timestamp is when the finding was discovered (Unix timestamp) |
GetAgentStatusRequest
GetAgentStatusRequest queries a specific agent.
| Field | # | Type | Description |
|---|---|---|---|
agent_id | 1 | string | agent_id is the unique agent identifier |
GetAgentStatusResponse
GetAgentStatusResponse returns agent status.
| Field | # | Type | Description |
|---|---|---|---|
agent | 1 | AgentInfo | agent is the agent information |
active | 2 | bool | active indicates if the agent is currently executing a task |
current_task | 3 | string | current_task describes the active task (if any) |
task_start_time | 4 | int64 | task_start_time is when the current task started (Unix timestamp) |
GetComponentLogsRequest
GetComponentLogsRequest requests log entries for a component.
| Field | # | Type | Description |
|---|---|---|---|
kind | 1 | string | kind is the component kind ("agent", "tool", "plugin") |
name | 2 | string | name is the component name to get logs for |
follow | 3 | bool | follow indicates whether to stream logs continuously |
lines | 4 | int32 | lines is the number of lines to return (0 = all, default 50) |
GetComponentLogsResponse
GetComponentLogsResponse wraps a LogEntry for the GetComponentLogs streaming RPC.
| Field | # | Type | Description |
|---|---|---|---|
timestamp | 1 | int64 | timestamp is when the log entry was created (Unix timestamp) |
level | 2 | string | level is the log level (debug, info, warn, error) |
message | 3 | string | message is the log message |
fields | 4 | gibson.common.v1.TypedMap | fields contains additional structured log fields (typed map) |
GetMissionDefinitionRequest
GetMissionDefinitionRequest fetches a single mission definition by name.
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | name is the mission definition name to look up. Case-sensitive; must match the name field used in CreateMissionDefinition. |
GetMissionDefinitionResponse
GetMissionDefinitionResponse returns the full structured proto for the requested mission definition. Every author-facing field is present: workspace, constraints, per-node retry/data/reuse policies, etc.
| Field | # | Type | Description |
|---|---|---|---|
definition | 1 | gibson.mission.v1.MissionDefinition | definition is the full mission definition proto. Never nil on success. |
mission_definition_id | 2 | string | mission_definition_id is the stable server-assigned identifier for this definition (the GUID returned by CreateMissionDefinition, unchanged across updates). Populated on every successful response. |
cue_source | 3 | string | cue_source is the raw CUE source the author submitted when the definition was created or last updated. Empty for definitions registered before source persistence landed, or registered without a source. |
GetMissionGraphRequest
GetMissionGraphRequest selects the mission definition to project.
| Field | # | Type | Description |
|---|---|---|---|
mission_definition_id | 1 | string | mission_definition_id is the stable id of the registered mission definition (as returned by CreateMissionDefinition / carried on a run). |
GetMissionGraphResponse
GetMissionGraphResponse carries the projected, layout-merged graph.
| Field | # | Type | Description |
|---|---|---|---|
graph | 1 | MissionGraph | — |
GetMissionHistoryRequest
GetMissionHistoryRequest queries mission execution history by name.
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | name is the mission name to query history for |
limit | 2 | int32 | limit restricts the number of results (default: 100) |
offset | 3 | int32 | offset is the pagination offset (default: 0) |
GetMissionHistoryResponse
GetMissionHistoryResponse returns mission execution history.
| Field | # | Type | Description |
|---|---|---|---|
runs | 1 | repeated MissionRun | runs contains all mission runs for the requested name |
total | 2 | int32 | total is the total count of runs (for pagination) |
GetMissionLayoutRequest
GetMissionLayoutRequest selects the layout to read.
| Field | # | Type | Description |
|---|---|---|---|
mission_definition_id | 1 | string | — |
GetMissionLayoutResponse
GetMissionLayoutResponse returns the saved layout, or an empty layout (no node positions, empty version) when none has been saved.
| Field | # | Type | Description |
|---|---|---|---|
layout | 1 | MissionLayout | — |
GetMyPermissionsRequest
GetMyPermissionsRequest queries the caller's permissions within a tenant.
| Field | # | Type | Description |
|---|---|---|---|
tenant_id | 1 | string | tenant_id is the tenant to scope the query to. If empty, the tenant is inferred from the caller's auth context. |
GetMyPermissionsResponse
GetMyPermissionsResponse returns a compact summary of the caller's permissions.
| Field | # | Type | Description |
|---|---|---|---|
tenant_id | 1 | string | tenant_id is the tenant this summary is scoped to |
role | 2 | string | role is the caller's FGA-backed role ("owner", "admin", "operator", "viewer") |
is_admin | 3 | bool | is_admin is true when the caller holds the admin or owner relation on the tenant |
component_grants | 4 | repeated PermissionComponentGrant | component_grants lists the component access grants held by the caller |
team_memberships | 5 | repeated PermissionTeamMembership | team_memberships lists the teams the caller belongs to within this tenant |
GetTargetRequest
GetTargetRequest looks up a target by UUID.
| Field | # | Type | Description |
|---|---|---|---|
target_id | 1 | string | target_id is the target UUID. |
GetTargetResponse
GetTargetResponse returns the requested target.
| Field | # | Type | Description |
|---|---|---|---|
target | 1 | gibson.target.v1.Target | — |
HoverMissionCUERequest
HoverMissionCUERequest requests hover documentation for a cursor position.
| Field | # | Type | Description |
|---|---|---|---|
cue_source | 1 | string | cue_source is the raw CUE source text at the time of the request. |
line | 2 | int32 | line is the 1-based cursor line number. |
col | 3 | int32 | col is the 1-based cursor column offset. |
HoverMissionCUEResponse
HoverMissionCUEResponse returns Markdown hover documentation for the symbol under the cursor, or an empty string if there is no hover info.
| Field | # | Type | Description |
|---|---|---|---|
markdown | 1 | string | markdown is the hover documentation rendered as Markdown. |
LLMEvent
LLMEvent represents an LLM activity event.
| Field | # | Type | Description |
|---|---|---|---|
event_type | 1 | string | event_type identifies the LLM event type (llm.request.started, llm.request.completed, llm.request.failed) |
timestamp | 2 | int64 | timestamp is when the event occurred (Unix timestamp) |
agent_id | 3 | string | agent_id is the agent identifier |
agent_name | 4 | string | agent_name is the agent name |
model | 5 | string | model is the LLM model identifier (e.g., "claude-3-5-sonnet-20241022") |
slot | 6 | string | slot is the LLM slot (primary, fast, reasoning) |
message_count | 7 | int32 | message_count is the number of messages in the request |
prompt_tokens | 8 | int32 | prompt_tokens is the number of input tokens |
completion_tokens | 9 | int32 | completion_tokens is the number of output tokens |
total_tokens | 10 | int32 | total_tokens is the sum of prompt and completion tokens |
duration_ms | 11 | double | duration_ms is the request duration in milliseconds |
cached | 12 | bool | cached indicates if the response was served from cache |
error | 13 | string | error contains error information if the event represents a failure |
error_code | 14 | string | error_code identifies the error type (rate_limit, context_length, api_error, timeout) |
will_retry | 15 | bool | will_retry indicates if the failed request will be retried |
ListAgentsRequest
ListAgentsRequest queries agent registry.
| Field | # | Type | Description |
|---|---|---|---|
kind | 1 | string | kind filters by component kind (empty = all agents) |
ListAgentsResponse
ListAgentsResponse returns registered agents.
| Field | # | Type | Description |
|---|---|---|---|
agents | 1 | repeated AgentInfo | agents is the list of registered agents |
ListMissionDefinitionsRequest
ListMissionDefinitionsRequest queries installed mission definitions.
| Field | # | Type | Description |
|---|---|---|---|
limit | 1 | int32 | limit restricts the number of results (0 = all) |
offset | 2 | int32 | offset is the pagination offset |
ListMissionDefinitionsResponse
ListMissionDefinitionsResponse returns installed mission definitions.
| Field | # | Type | Description |
|---|---|---|---|
missions | 1 | repeated MissionDefinitionInfo | missions is the list of installed mission definitions |
total | 2 | int32 | total is the total count of mission definitions (for pagination) |
ListMissionsRequest
ListMissionsRequest queries mission list.
| Field | # | Type | Description |
|---|---|---|---|
active_only | 1 | bool | active_only filters to only running missions |
limit | 2 | int32 | limit restricts the number of results |
offset | 3 | int32 | offset is the pagination offset |
status_filter | 4 | string | status_filter filters missions by status (running, completed, failed, cancelled) |
name_pattern | 5 | string | name_pattern filters missions by name using glob pattern matching |
ListMissionsResponse
ListMissionsResponse returns mission list.
| Field | # | Type | Description |
|---|---|---|---|
missions | 1 | repeated MissionInfo | missions is the list of missions |
total | 2 | int32 | total is the total count of missions (for pagination) |
ListMyMembershipsRequest
ListMyMembershipsRequest has no fields. The caller is identified via the call context (HMAC-signed identity headers set by ext-authz). This RPC answers "which tenants am I a member of?" before any tenant-scoped RPC can be made.
No fields.
ListMyMembershipsResponse
ListMyMembershipsResponse returns the caller's tenant memberships. Sorted by tenant_name ASC for stable rendering.
| Field | # | Type | Description |
|---|---|---|---|
memberships | 1 | repeated Membership | memberships is the (possibly empty) list of tenants the caller belongs to. An empty list means the caller has no tenant — the dashboard should route to onboarding rather than the picker in that case. |
ListPluginsRequest
ListPluginsRequest queries plugin registry.
No fields.
ListPluginsResponse
ListPluginsResponse returns registered plugins.
| Field | # | Type | Description |
|---|---|---|---|
plugins | 1 | repeated PluginInfo | plugins is the list of registered plugins |
ListTargetsRequest
ListTargetsRequest narrows the tenant's targets.
| Field | # | Type | Description |
|---|---|---|---|
filter | 1 | gibson.target.v1.TargetFilter | filter narrows the result set. Omit for the tenant's full target list. |
ListTargetsResponse
ListTargetsResponse returns the matching targets.
| Field | # | Type | Description |
|---|---|---|---|
targets | 1 | repeated gibson.target.v1.Target | — |
ListToolsRequest
ListToolsRequest queries tool registry.
No fields.
ListToolsResponse
ListToolsResponse returns registered tools.
| Field | # | Type | Description |
|---|---|---|---|
tools | 1 | repeated ToolInfo | tools is the list of registered tools |
LogEntry
LogEntry represents a single log entry from a component.
| Field | # | Type | Description |
|---|---|---|---|
timestamp | 1 | int64 | timestamp is when the log entry was created (Unix timestamp) |
level | 2 | string | level is the log level (debug, info, warn, error) |
message | 3 | string | message is the log message |
fields | 4 | gibson.common.v1.TypedMap | fields contains additional structured log fields (typed map) |
Membership
Membership describes one tenant the caller is a member of, plus the caller's role in that tenant.
| Field | # | Type | Description |
|---|---|---|---|
tenant_id | 1 | string | tenant_id is the FGA object id for this tenant (UUID or slug). It is the value the dashboard sets as the x-gibson-tenant header on tenant-scoped RPCs. |
tenant_name | 2 | string | tenant_name is the human-friendly display name. Best-effort: when the daemon's tenant-name cache misses, this falls back to tenant_id. |
role | 3 | string | role is the caller's FGA-backed role within this tenant ("admin" or "member"). Set to "admin" when the caller holds the admin relation on the tenant; otherwise "member". |
Mission
Mission represents a complete mission execution instance with full state.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | id is the unique mission identifier |
name | 2 | string | name is the human-readable mission name |
status | 3 | MissionStatus | status is the current mission status |
target_id | 4 | string | target_id is the target identifier |
mission_definition_id | 5 | string | mission_definition_id is the mission definition identifier |
constraints | 6 | gibson.mission.v1.MissionConstraints | constraints defines execution constraints. Canonical type per ADR 0004: gibson.mission.v1.MissionConstraints is the single platform-wide shape. |
metrics | 7 | MissionMetrics | metrics contains current execution metrics |
checkpoint | 8 | MissionCheckpoint | checkpoint is the latest checkpoint (if any) |
run_number | 9 | int32 | run_number is the sequential run number for this mission name |
created_at | 10 | int64 | created_at is when the mission was created (Unix timestamp in milliseconds) |
updated_at | 11 | int64 | updated_at is when the mission was last updated (Unix timestamp in milliseconds) |
started_at | 12 | int64 | started_at is when the mission execution started (Unix timestamp in milliseconds) |
completed_at | 13 | int64 | completed_at is when the mission execution completed (Unix timestamp in milliseconds, 0 if not completed) |
MissionCheckpoint
MissionCheckpoint represents a saved checkpoint state for pause/resume.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | id is the unique checkpoint identifier |
version | 2 | int32 | version is the checkpoint format version |
completed_nodes | 3 | int32 | completed_nodes is the number of nodes that had completed at checkpoint time |
total_nodes | 4 | int32 | total_nodes is the total number of nodes in the mission |
created_at | 5 | int64 | created_at is when this checkpoint was created (Unix timestamp in milliseconds) |
state_data | 6 | bytes | state_data is the serialized checkpoint state (opaque blob) |
MissionDefinitionInfo
MissionDefinitionInfo describes an installed mission definition.
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | name is the mission name |
version | 2 | string | version is the mission version |
description | 3 | string | description is the mission description |
source | 4 | string | source is the Git repository URL |
installed_at | 5 | int64 | installed_at is when the mission was installed (Unix timestamp) |
updated_at | 6 | int64 | updated_at is when the mission was last updated (Unix timestamp) |
node_count | 7 | int32 | node_count is the number of nodes in the mission |
mission_definition_id | 8 | string | mission_definition_id is the stable server-assigned identifier for this definition (the GUID returned by CreateMissionDefinition, unchanged across updates). |
MissionEvent
MissionEvent represents a mission execution event.
| Field | # | Type | Description |
|---|---|---|---|
event_type | 1 | string | event_type identifies the type of event |
timestamp | 2 | int64 | timestamp is when the event occurred (Unix timestamp) |
mission_id | 3 | string | mission_id is the unique mission identifier |
node_id | 4 | string | node_id is the mission node ID (if applicable) |
message | 5 | string | message is a human-readable event message |
data | 6 | gibson.common.v1.TypedMap | data contains event-specific data (typed map) |
error | 7 | string | error contains error information if the event represents an error |
result | 8 | OperationResult | result contains typed operation metrics (for mission.completed events) |
MissionGraph
MissionGraph is the daemon-computed renderable projection of a mission definition. Node and edge ordering is deterministic.
| Field | # | Type | Description |
|---|---|---|---|
nodes | 1 | repeated MissionGraphNode | — |
edges | 2 | repeated MissionGraphEdge | — |
entry_points | 3 | repeated string | — |
exit_points | 4 | repeated string | — |
viewport | 5 | MissionGraphViewport | — |
MissionGraphEdge
MissionGraphEdge is a renderable data-flow line between two boxes.
| Field | # | Type | Description |
|---|---|---|---|
from | 1 | string | — |
to | 2 | string | — |
condition | 3 | string | condition is the optional CEL guard carried on an explicit mission edge. |
role | 4 | string | role is the branch semantics for edges leaving a condition node: "" (default) | "true" | "false". |
MissionGraphNode
MissionGraphNode is a renderable box in the mission flow-chart.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | id is the mission node id this box represents. |
kind | 2 | string | kind is the renderer classification of the node: "agent" | "tool" | "plugin" | "condition" | "parallel" | "join" | "unknown" (string, not enum, so renderers degrade gracefully on future node kinds). |
name | 3 | string | name is the human-readable label (falls back to id when unset). |
summary | 4 | string | summary is a kind-specific one-line descriptor (agent name, tool name, plugin name+method, condition expression, etc.). May be empty. |
is_entry | 5 | bool | is_entry / is_exit mark mission entry and exit nodes. |
is_exit | 6 | bool | — |
rank | 7 | int32 | rank is the 0-based topological layer (left-to-right depth). |
x | 8 | double | x / y are the box position in the renderer's abstract canvas space: the saved layout when present, else the deterministic auto-layout position. |
y | 9 | double | — |
layout_source | 10 | string | layout_source is "saved" when x/y came from the layout store, "auto" when computed by the deterministic auto-layout. |
MissionGraphViewport
MissionGraphViewport is the diagram pan/zoom framing.
| Field | # | Type | Description |
|---|---|---|---|
x | 1 | double | — |
y | 2 | double | — |
zoom | 3 | double | — |
MissionInfo
MissionInfo describes a mission.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | id is the unique mission identifier |
status | 3 | string | status is the mission status (running, completed, failed) |
start_time | 4 | int64 | start_time is when the mission started (Unix timestamp) |
end_time | 5 | int64 | end_time is when the mission ended (Unix timestamp, 0 if running) |
finding_count | 6 | int32 | finding_count is the number of findings discovered |
name | 7 | string | name is the human-readable mission name |
description | 9 | string | description is the mission description |
progress | 10 | double | progress is the mission completion progress from 0.0 to 1.0 |
mission_definition_id | 11 | string | mission_definition_id is the registered mission definition this run used. |
target_id | 12 | string | target_id is the registered target this mission ran against. |
MissionLayout
MissionLayout is the saved diagram layout for a mission definition. It lives in a store separate from the mission definition; the work-schema carries no presentation state.
| Field | # | Type | Description |
|---|---|---|---|
mission_definition_id | 1 | string | mission_definition_id is the definition this layout belongs to. |
nodes | 2 | repeated NodePosition | nodes are the saved per-node positions. Nodes without an entry fall back to the daemon's deterministic auto-layout in GetMissionGraph. |
viewport | 3 | MissionGraphViewport | viewport is the saved pan/zoom framing (optional). |
version | 4 | string | version is an opaque revision token for optimistic concurrency. Empty when no layout has been saved yet. Returned by GetMissionLayout and SaveMissionLayout; pass it back as expected_version on the next save. |
MissionMetrics
MissionMetrics contains execution metrics for a mission.
| Field | # | Type | Description |
|---|---|---|---|
turns_used | 1 | int32 | turns_used is the number of agent turns/iterations executed |
nodes_executed | 2 | int32 | nodes_executed is the number of mission nodes that ran successfully |
nodes_failed | 3 | int32 | nodes_failed is the number of mission nodes that failed |
findings_count | 4 | int32 | findings_count is the total number of findings discovered |
critical_count | 5 | int32 | critical_count is the number of critical severity findings |
high_count | 6 | int32 | high_count is the number of high severity findings |
medium_count | 7 | int32 | medium_count is the number of medium severity findings |
low_count | 8 | int32 | low_count is the number of low severity findings |
tokens_used | 9 | int64 | tokens_used is the total LLM tokens consumed |
MissionRun
MissionRun represents a single execution instance of a mission.
| Field | # | Type | Description |
|---|---|---|---|
mission_id | 1 | string | mission_id is the unique identifier for this run |
run_number | 2 | int32 | run_number is the sequential run number for this mission name |
status | 3 | string | status is the final status of this run (running, completed, failed, cancelled, paused) |
created_at | 4 | int64 | created_at is when this run was created (Unix timestamp) |
completed_at | 5 | int64 | completed_at is when this run completed (Unix timestamp, 0 if not completed) |
findings_count | 6 | int32 | findings_count is the number of findings discovered in this run |
previous_run_id | 7 | string | previous_run_id is the ID of the previous run (if any) |
trace_id | 8 | string | trace_id is the OTel trace ID for Langfuse lookup |
NodePosition
NodePosition is a single node's saved diagram coordinate.
| Field | # | Type | Description |
|---|---|---|---|
node_id | 1 | string | — |
x | 2 | double | — |
y | 3 | double | — |
OperationResult
OperationResult represents the unified result of a long-running operation (attack or mission). This provides typed metrics instead of JSON-encoded strings.
| Field | # | Type | Description |
|---|---|---|---|
status | 1 | string | status of the operation ("success", "failed", "timeout", "cancelled") |
duration_ms | 2 | int64 | duration_ms is the total duration in milliseconds |
started_at | 3 | int64 | started_at is the Unix timestamp (milliseconds) when the operation started |
completed_at | 4 | int64 | completed_at is the Unix timestamp (milliseconds) when the operation completed |
turns_used | 5 | int32 | turns_used is the number of agent turns/iterations executed |
tokens_used | 6 | int64 | tokens_used is the total LLM tokens consumed |
nodes_executed | 7 | int32 | nodes_executed is the number of mission nodes that ran successfully |
nodes_failed | 8 | int32 | nodes_failed is the number of mission nodes that failed |
findings_count | 9 | int32 | findings_count is the total number of findings discovered |
critical_count | 10 | int32 | critical_count is the number of critical severity findings |
high_count | 11 | int32 | high_count is the number of high severity findings |
medium_count | 12 | int32 | medium_count is the number of medium severity findings |
low_count | 13 | int32 | low_count is the number of low severity findings |
error_message | 14 | string | error_message contains the error message if status == "failed" |
error_code | 15 | string | error_code contains a machine-readable error code if status == "failed" |
OrchestratorEvent
OrchestratorEvent represents an orchestrator decision event.
| Field | # | Type | Description |
|---|---|---|---|
event_type | 1 | string | event_type identifies the orchestrator event type (orchestrator.decision, orchestrator.approval_required) |
timestamp | 2 | int64 | timestamp is when the event occurred (Unix timestamp) |
mission_id | 3 | string | mission_id is the mission identifier |
iteration | 4 | int32 | iteration is the orchestrator iteration number |
action | 5 | string | action is the orchestrator action (execute_agent, skip_node, wait, complete, request_approval) |
target_node_id | 6 | string | target_node_id is the mission node ID being targeted |
target_agent_name | 7 | string | target_agent_name is the agent name being targeted |
confidence | 8 | double | confidence is the decision confidence score (0-1) |
reasoning | 9 | string | reasoning is the orchestrator's reasoning (max 500 chars in practice) |
tokens_used | 10 | int32 | tokens_used is the number of tokens consumed for this decision |
latency_ms | 11 | double | latency_ms is the decision latency in milliseconds |
approval_id | 12 | string | approval_id is set when approval is required |
risk | 13 | string | risk is the risk level (low, medium, high, critical) |
timeout_seconds | 14 | int32 | timeout_seconds is the timeout for approval requests |
PauseMissionRequest
PauseMissionRequest requests pausing a running mission.
| Field | # | Type | Description |
|---|---|---|---|
mission_id | 1 | string | mission_id is the unique identifier of the mission to pause |
force | 2 | bool | force indicates whether to pause immediately without waiting for a clean checkpoint boundary If false (default), waits for the current node to complete before pausing |
PauseMissionResponse
PauseMissionResponse confirms the mission pause request.
| Field | # | Type | Description |
|---|---|---|---|
success | 1 | bool | success indicates if the pause request was accepted |
checkpoint_id | 2 | string | checkpoint_id is the ID of the checkpoint created during pause |
message | 3 | string | message provides additional context about the pause operation |
PermissionComponentGrant
PermissionComponentGrant is a compact component grant for use in permissions summaries.
| Field | # | Type | Description |
|---|---|---|---|
component_ref | 1 | string | component_ref is the component identifier, e.g. "tool:mytool" |
actions | 2 | repeated string | actions lists the FGA relations the caller holds (execute, configure, read) |
PermissionTeamMembership
PermissionTeamMembership describes the caller's membership in a team.
| Field | # | Type | Description |
|---|---|---|---|
team_id | 1 | string | team_id is the unique team identifier |
team_name | 2 | string | team_name is the human-readable team name |
is_admin | 3 | bool | is_admin is true when the caller is an admin of the team |
PingRequest
PingRequest is an empty health check request.
No fields.
PingResponse
PingResponse confirms the daemon is responsive.
| Field | # | Type | Description |
|---|---|---|---|
timestamp | 1 | int64 | timestamp is the server time when the ping was received |
PluginInfo
PluginInfo describes a registered plugin.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | id is the unique plugin identifier |
name | 2 | string | name is the plugin name |
version | 3 | string | version is the plugin version |
endpoint | 4 | string | endpoint is the gRPC endpoint for the plugin |
description | 5 | string | description is the plugin description |
health | 6 | string | health is the plugin health status (healthy, unhealthy) |
last_seen | 7 | int64 | last_seen is when the plugin was last seen (Unix timestamp) |
QueryPluginRequest
QueryPluginRequest executes a method on a plugin.
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | name is the plugin name to query |
method | 2 | string | method is the method name to execute |
params | 3 | gibson.common.v1.TypedMap | params is the typed parameters for the method |
timeout_ms | 4 | int64 | timeout_ms is the optional timeout in milliseconds (0 = default) |
QueryPluginResponse
QueryPluginResponse returns the result of a plugin query.
| Field | # | Type | Description |
|---|---|---|---|
result | 1 | gibson.common.v1.TypedValue | result is the typed result from the plugin method |
error | 2 | string | error is set if the query failed |
duration_ms | 3 | int64 | duration_ms is how long the query took in milliseconds |
RenewCapabilityGrantRequest
RenewCapabilityGrantRequest carries the identifiers needed to validate the renewal request. The currently-presented CG-JWT (in the X-Capability-Grant header) authorizes the call; this request body just identifies which task is being renewed.
Spec: unified-identity-and-authorization Requirement 5.8.
| Field | # | Type | Description |
|---|---|---|---|
agent_id | 1 | string | agent_id is the agent's Zitadel service-account ID. Must match the sub claim of the presented CG-JWT. |
mission_id | 2 | string | mission_id names the mission. Must match the mission_id claim of the presented CG-JWT. |
task_id | 3 | string | task_id names the specific task. Must match the task_id claim of the presented CG-JWT. |
RenewCapabilityGrantResponse
RenewCapabilityGrantResponse returns the freshly-minted CG-JWT plus its claimed expiry timestamp (Unix seconds, UTC) for client- side scheduling of the next renewal.
| Field | # | Type | Description |
|---|---|---|---|
capability_grant | 1 | string | capability_grant is the compact-serialized JWT to attach as the X-Capability-Grant header on subsequent harness callbacks. |
expires_at_unix | 2 | int64 | expires_at_unix is the new exp claim, Unix seconds. Clients use this to schedule renewal before expiry. |
ResumeMissionRequest
ResumeMissionRequest requests resuming a paused mission.
| Field | # | Type | Description |
|---|---|---|---|
mission_id | 1 | string | mission_id is the unique identifier of the mission to resume |
checkpoint_id | 2 | string | checkpoint_id optionally specifies a specific checkpoint to resume from If empty, resumes from the latest checkpoint |
target_checkpoint_id | 3 | string | Empty string = legacy resume-from-latest behaviour (backward compatible). When non-empty, the daemon rewinds the mission to the named checkpoint and resumes execution from that point. The handler additionally enforces the mission#admin FGA relation when this field is non-empty per mission-checkpointing R16.3. |
ResumeMissionResponse
ResumeMissionResponse wraps a MissionEvent for the ResumeMission streaming RPC.
| Field | # | Type | Description |
|---|---|---|---|
event_type | 1 | string | event_type identifies the type of event |
timestamp | 2 | int64 | timestamp is when the event occurred (Unix timestamp) |
mission_id | 3 | string | mission_id is the unique mission identifier |
node_id | 4 | string | node_id is the mission node ID (if applicable) |
message | 5 | string | message is a human-readable event message |
data | 6 | gibson.common.v1.TypedMap | data contains event-specific data (typed map) |
error | 7 | string | error contains error information if the event represents an error |
result | 8 | OperationResult | result contains typed operation metrics (for mission.completed events) |
checkpoint_metadata | 9 | CheckpointMetadata | checkpoint_metadata surfaces the source checkpoint metadata at the start of a resumed stream so the dashboard can render the "Resumed from checkpoint X" affordance. Populated on the first event of a resume stream; nil/empty on subsequent events. Spec: mission-checkpointing R9. |
RunMissionRequest
RunMissionRequest starts a mission execution. API-only: missions are invoked by reference — no YAML, no file paths.
| Field | # | Type | Description |
|---|---|---|---|
mission_definition_id | 1 | string | mission_definition_id is the ID of a registered mission definition to execute. |
target_id | 2 | string | target_id is the ID of a registered target the mission runs against. |
variables | 3 | map<string, string> | variables contains mission variables to override |
memory_continuity | 4 | string | memory_continuity defines how agent memory is shared across mission runs Valid values: "isolated" (default), "inherit", "shared" |
RunMissionResponse
RunMissionResponse wraps a MissionEvent for the RunMission streaming RPC.
| Field | # | Type | Description |
|---|---|---|---|
event_type | 1 | string | event_type identifies the type of event |
timestamp | 2 | int64 | timestamp is when the event occurred (Unix timestamp) |
mission_id | 3 | string | mission_id is the unique mission identifier |
node_id | 4 | string | node_id is the mission node ID (if applicable) |
message | 5 | string | message is a human-readable event message |
data | 6 | gibson.common.v1.TypedMap | data contains event-specific data (typed map) |
error | 7 | string | error contains error information if the event represents an error |
result | 8 | OperationResult | result contains typed operation metrics (for mission.completed events) |
SaveMissionLayoutRequest
SaveMissionLayoutRequest persists a hand-arranged layout.
| Field | # | Type | Description |
|---|---|---|---|
layout | 1 | MissionLayout | layout is the layout to persist. Its mission_definition_id is the key. |
expected_version | 2 | string | expected_version, when set, must match the currently-stored layout's version or the save is rejected (codes.Aborted) as a stale write. Empty means "create if absent" / last-write-wins for the first save. |
SaveMissionLayoutResponse
SaveMissionLayoutResponse returns the new revision token after a successful save. Pass it as expected_version on the subsequent save.
| Field | # | Type | Description |
|---|---|---|---|
version | 1 | string | — |
ShowComponentRequest
ShowComponentRequest requests detailed information about a component.
| Field | # | Type | Description |
|---|---|---|---|
kind | 1 | string | kind is the component kind ("agent", "tool", "plugin") |
name | 2 | string | name is the component name to show |
ShowComponentResponse
ShowComponentResponse returns detailed component information.
| Field | # | Type | Description |
|---|---|---|---|
success | 1 | bool | success indicates if the component was found |
name | 2 | string | name is the component name |
version | 3 | string | version is the component version |
kind | 4 | string | kind is the component kind |
status | 5 | string | status is the component status (installed, running, stopped) |
source | 6 | string | source is the Git repository URL |
repo_path | 7 | string | repo_path is the local repository path |
bin_path | 8 | string | bin_path is the path to the binary |
port | 9 | int32 | port is the listening port (if running) |
pid | 10 | int32 | pid is the process ID (if running) |
created_at | 11 | int64 | created_at is when the component was installed (Unix timestamp) |
updated_at | 12 | int64 | updated_at is when the component was last updated (Unix timestamp) |
started_at | 13 | int64 | started_at is when the component was started (Unix timestamp, 0 if not running) |
stopped_at | 14 | int64 | stopped_at is when the component was stopped (Unix timestamp, 0 if never stopped) |
manifest_info | 15 | string | manifest_info contains manifest details (JSON-encoded) |
message | 16 | string | message provides additional context or error information |
StartComponentRequest
StartComponentRequest requests starting a component.
| Field | # | Type | Description |
|---|---|---|---|
kind | 1 | string | kind is the component kind ("agent", "tool", "plugin") |
name | 2 | string | name is the component name |
StartComponentResponse
StartComponentResponse returns the result of starting a component.
| Field | # | Type | Description |
|---|---|---|---|
success | 1 | bool | success indicates if the component was started successfully |
pid | 2 | int32 | pid is the process ID of the started component |
port | 3 | int32 | port is the port the component is listening on |
message | 4 | string | message provides additional context or error information |
log_path | 5 | string | log_path is the path to the component's log file |
StatusRequest
StatusRequest queries daemon status.
No fields.
StatusResponse
StatusResponse returns complete daemon status information.
| Field | # | Type | Description |
|---|---|---|---|
running | 1 | bool | running indicates if the daemon is running (always true if responding) |
pid | 2 | int32 | pid is the process ID of the daemon |
start_time | 3 | int64 | start_time is when the daemon started (Unix timestamp) |
uptime | 4 | string | uptime is the human-readable uptime string |
grpc_address | 5 | string | grpc_address is the gRPC server address |
registry_type | 6 | string | registry_type is the type of registry (embedded, external) |
registry_addr | 7 | string | registry_addr is the registry endpoint address |
callback_addr | 8 | string | callback_addr is the callback server address |
agent_count | 9 | int32 | agent_count is the number of registered agents |
mission_count | 10 | int32 | mission_count is the total number of missions |
active_mission_count | 11 | int32 | active_mission_count is the number of currently running missions |
StopComponentRequest
StopComponentRequest requests stopping a component.
| Field | # | Type | Description |
|---|---|---|---|
kind | 1 | string | kind is the component kind ("agent", "tool", "plugin") |
name | 2 | string | name is the component name |
force | 3 | bool | force indicates whether to skip graceful shutdown (SIGKILL instead of SIGTERM) |
StopComponentResponse
StopComponentResponse returns the result of stopping a component.
| Field | # | Type | Description |
|---|---|---|---|
success | 1 | bool | success indicates if the component was stopped successfully |
stopped_count | 2 | int32 | stopped_count is the number of instances successfully stopped |
total_count | 3 | int32 | total_count is the total number of instances that were running |
message | 4 | string | message provides additional context or error information |
StopMissionRequest
StopMissionRequest requests mission termination.
| Field | # | Type | Description |
|---|---|---|---|
mission_id | 1 | string | mission_id is the identifier of the mission to stop |
force | 2 | bool | force indicates whether to force-kill the mission (default: graceful) |
StopMissionResponse
StopMissionResponse confirms mission stop request.
| Field | # | Type | Description |
|---|---|---|---|
success | 1 | bool | success indicates if the stop request was accepted |
message | 2 | string | message provides additional context |
SubscribeRequest
SubscribeRequest establishes an event stream.
| Field | # | Type | Description |
|---|---|---|---|
event_types | 1 | repeated string | event_types filters which event types to receive (empty = all) |
mission_id | 2 | string | mission_id filters to a specific mission (empty = all) |
SubscribeResponse
SubscribeResponse wraps an Event for the Subscribe streaming RPC.
| Field | # | Type | Description |
|---|---|---|---|
event_type | 1 | string | event_type identifies the type of event |
timestamp | 2 | int64 | timestamp is when the event occurred (Unix timestamp) |
source | 3 | string | source is the event source (mission, agent, daemon, etc.) |
data | 4 | gibson.common.v1.TypedMap | data contains event-specific data (typed map) |
mission_event | 5 | MissionEvent | — |
agent_event | 7 | AgentEvent | — |
finding_event | 8 | FindingEvent | — |
tool_event | 9 | ToolEvent | — |
llm_event | 10 | LLMEvent | — |
orchestrator_event | 11 | OrchestratorEvent | — |
oneof event — one of: mission_event, agent_event, finding_event, tool_event, llm_event, orchestrator_event.
ToolEvent
ToolEvent represents a tool execution event.
| Field | # | Type | Description |
|---|---|---|---|
event_type | 1 | string | event_type identifies the tool event type (tool.started, tool.completed, tool.failed, tool.progress, tool.warning) |
timestamp | 2 | int64 | timestamp is when the event occurred (Unix timestamp) |
tool_name | 3 | string | tool_name is the name of the tool being executed |
agent_id | 4 | string | agent_id is the agent identifier executing the tool |
agent_name | 5 | string | agent_name is the agent name executing the tool |
mission_id | 6 | string | mission_id is the mission context for this tool execution |
message | 7 | string | message is a human-readable event message |
duration | 8 | double | duration is the execution time in seconds (for completed/failed events) |
progress | 9 | double | progress is the completion percentage (0-1 for progress events) |
error | 10 | string | error contains error information if the event represents an error |
error_code | 11 | string | error_code contains a machine-readable error code |
warning | 12 | string | warning contains warning information if the event represents a warning |
warning_severity | 13 | string | warning_severity is the severity level (low, medium, high) |
data | 14 | gibson.common.v1.TypedMap | data contains event-specific data (typed map) |
ToolInfo
ToolInfo describes a registered tool.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | id is the unique tool identifier |
name | 2 | string | name is the tool name |
version | 3 | string | version is the tool version |
endpoint | 4 | string | endpoint is the gRPC endpoint for the tool |
description | 5 | string | description is the tool description |
health | 6 | string | health is the tool health status (healthy, unhealthy) |
last_seen | 7 | int64 | last_seen is when the tool was last seen (Unix timestamp) |
capabilities | 8 | Capabilities | capabilities describes runtime privileges and features (optional) |
UpdateMissionDefinitionRequest
UpdateMissionDefinitionRequest carries the replacement definition. The name field of the embedded definition is the lookup key.
| Field | # | Type | Description |
|---|---|---|---|
definition | 1 | gibson.mission.v1.MissionDefinition | definition is the replacement content. The name field is used as the lookup key; all other fields replace the stored definition. The server-assigned ID and original timestamps are preserved. |
cue_source | 2 | string | cue_source is the raw CUE source text that compiled to definition (maximum 512 KB). Overwrites the stored source in place under the stable id. Optional for backward compatibility. |
UpdateMissionDefinitionResponse
UpdateMissionDefinitionResponse returns the stable server-assigned ID for the updated definition (unchanged across updates).
| Field | # | Type | Description |
|---|---|---|---|
mission_definition_id | 1 | string | mission_definition_id is the stable server-assigned identifier for this definition (unchanged across updates). |
UpdateTargetRequest
UpdateTargetRequest replaces a target's metadata.
| Field | # | Type | Description |
|---|---|---|---|
target | 1 | gibson.target.v1.Target | target is the replacement content. Its id field is the lookup key and is preserved; all other fields replace the stored target. |
UpdateTargetResponse
UpdateTargetResponse returns the updated target.
| Field | # | Type | Description |
|---|---|---|---|
target | 1 | gibson.target.v1.Target | — |
ValidateMissionCUERequest
ValidateMissionCUERequest carries raw CUE source text to validate.
| Field | # | Type | Description |
|---|---|---|---|
cue_source | 1 | string | cue_source is the raw CUE source text. |
ValidateMissionCUEResponse
ValidateMissionCUEResponse returns the diagnostics produced by compiling the submitted CUE source against the mission schema. An empty list means the source is valid.
| Field | # | Type | Description |
|---|---|---|---|
diagnostics | 1 | repeated CUEDiagnostic | diagnostics is the list of errors and warnings. Empty on success. |
compiled_definition | 2 | gibson.mission.v1.MissionDefinition | compiled_definition is the MissionDefinition proto produced by compiling the CUE source. Only populated when diagnostics is empty (i.e. the source is valid). Callers can pass this directly to CreateMissionDefinition without a separate compile round-trip. |
Enums
MissionStatus
MissionStatus represents the execution status of a mission.
| Value | # | Description |
|---|---|---|
MISSION_STATUS_UNSPECIFIED | 0 | — |
MISSION_STATUS_PENDING | 1 | — |
MISSION_STATUS_RUNNING | 2 | — |
MISSION_STATUS_PAUSED | 3 | — |
MISSION_STATUS_COMPLETED | 4 | — |
MISSION_STATUS_FAILED | 5 | — |
MISSION_STATUS_CANCELLED | 6 | — |
Package gibson.graph.v1
Services
GraphService
GraphService serves per-tenant knowledge-graph reads and a server-streaming update feed. Every RPC routes through Pool.For(tenant).Neo4j server-side and is gated by the FGA tenant.member relation at ext-authz.
GetFindingCounts
GetFindingCountsRequest → GetFindingCountsResponse
GetFindingCounts returns finding counts grouped by severity or category. Replaces the dashboard's prior direct-Neo4j paths in the dashboard data client (getKPIs, getFindingsBySeverity, getFindingsByCategory) and app/api/findings/counts/route.ts.
GetFindingTimeSeries
GetFindingTimeSeriesRequest → GetFindingTimeSeriesResponse
GetFindingTimeSeries returns finding counts bucketed by day for the last N days (default 30, max 365). Missing days are returned as zero buckets.
GetFindings
GetFindingsRequest → GetFindingsResponse
GetFindings returns a paginated, filterable list of findings (and vulnerabilities) for the calling tenant. Replaces the dashboard's direct-Neo4j paths in app/api/findings/route.ts, app/api/missions/[id]/findings/route.ts, and the iteration backing findings export. Spec: dashboard-neo4j-crud-removal Req 1.
GetGraphContext
GetGraphContextRequest → GetGraphContextResponse
GetGraphContext returns a focus node and its bounded neighborhood, used by the chatbot to enrich its system prompt. Returns an empty response (focus_node unset) on missing node or NotProvisioned — does NOT error, so the chatbot prompt never breaks.
GetGraphStats
GetGraphStatsRequest → GetGraphStatsResponse
GetGraphStats returns aggregate stats for the per-tenant knowledge graph: node counts by label, total edges, last-write timestamp.
GetGraphSummary
GetGraphSummaryRequest → GetGraphSummaryResponse
GetGraphSummary returns an LLM-friendly text summary of the per-tenant graph plus structured stats. Server-side caches results for 60s per tenant.
GetMissionGraph
GetMissionGraphRequest → GetMissionGraphResponse
GetMissionGraph returns the subgraph touched by a single mission run.
Mission ownership is enforced by FGA + by WHERE m.tenant_id = $tenant
in the underlying Cypher (defense in depth).
GetTenantGraph
GetTenantGraphRequest → GetTenantGraphResponse
GetTenantGraph returns the full per-tenant subgraph subject to a server-side node-count cap. Use limit + include_labels to narrow scope.
QueryPaths
QueryPathsRequest → QueryPathsResponse
QueryPaths runs a bounded path query from from_node_id to either a
specific to_node_id or any node of to_node_kind, up to max_depth.
Server caps: depth ≤ 10, paths ≤ 100, query timeout 5s.
WatchGraphUpdates
WatchGraphUpdatesRequest → stream GraphUpdate
WatchGraphUpdates server-streams new node/edge writes for the calling tenant. Subscribers should treat the stream as a UX hint, not a source of truth — drops are possible under load. Reconnect with exponential backoff; fall back to polling GetTenantGraph if the stream stays unhealthy.
Messages
CountBucket
| Field | # | Type | Description |
|---|---|---|---|
label | 1 | string | — |
count | 2 | uint64 | — |
Edge
Edge is a single relationship between two nodes.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
source_id | 2 | string | — |
target_id | 3 | string | — |
type | 4 | string | — |
properties | 5 | map<string, string> | — |
Finding
Finding is a per-tenant security finding or vulnerability node from the knowledge graph, shaped for dashboard list/detail views.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
name | 2 | string | — |
description | 3 | string | — |
type | 4 | string | Category / type. Free-form string drawn from the underlying node's type property (e.g. "sql_injection", "exposed_secret"). |
severity | 5 | string | "critical" | "high" | "medium" | "low" | "info" (lowercase, free-form). |
mission_id | 6 | string | — |
created_at | 7 | google.protobuf.Timestamp | — |
properties | 8 | map<string, string> | Catch-all for additional properties beyond the structured fields above (CVE, CVSS, etc.). Values are stringified to preserve fidelity through proto3. |
labels | 9 | repeated string | Distinguishes:Finding from:Vulnerability and any future label split. |
GetFindingCountsRequest
| Field | # | Type | Description |
|---|---|---|---|
group_by | 1 | FindingCountGroupBy | — |
time_window_seconds | 2 | uint64 | Optional. When > 0, only count findings whose created_at is within the last N seconds. 0 (default) means all-time. |
GetFindingCountsResponse
| Field | # | Type | Description |
|---|---|---|---|
buckets | 1 | repeated CountBucket | — |
GetFindingTimeSeriesRequest
| Field | # | Type | Description |
|---|---|---|---|
days | 1 | uint32 | Default 30, max 365 (server-clamped). |
GetFindingTimeSeriesResponse
| Field | # | Type | Description |
|---|---|---|---|
points | 1 | repeated TimeSeriesPoint | Ordered, padded with zero buckets for missing days. Length == days. |
GetFindingsRequest
| Field | # | Type | Description |
|---|---|---|---|
severity_filter | 1 | string | Exact match. Empty string = no filter. |
category_filter | 2 | string | Exact match on the type / category. Empty string = no filter. |
mission_id | 3 | string | When non-empty, only findings reachable from this mission node within the same tenant (within 3 hops) are returned. |
search | 4 | string | Substring match on name OR description (case-insensitive). Empty = no filter. |
limit | 5 | uint32 | Default 100, max 500 (server-clamped). |
offset | 6 | uint32 | — |
GetFindingsResponse
| Field | # | Type | Description |
|---|---|---|---|
findings | 1 | repeated Finding | — |
total | 2 | uint64 | Count of matching findings without limit/offset, for pagination UI. |
truncated | 3 | bool | True when total > offset + len(findings). |
GetGraphContextRequest
| Field | # | Type | Description |
|---|---|---|---|
node_id | 1 | string | — |
hops | 2 | uint32 | Default 2, max 5 (server-clamped). |
max_nodes | 3 | uint32 | Default 30, max 100 (server-clamped). |
GetGraphContextResponse
| Field | # | Type | Description |
|---|---|---|---|
focus_node | 1 | Node | Unset when the node was not found OR Neo4j is unavailable. The daemon returns this shape (not an error) so chatbot prompts never break. |
neighbors | 2 | repeated NeighborEdge | — |
summary | 3 | string | LLM-friendly text serialization of focus + neighbors. |
GetGraphStatsRequest
No fields.
GetGraphStatsResponse
| Field | # | Type | Description |
|---|---|---|---|
by_label | 1 | repeated NodeCountByLabel | — |
total_nodes | 2 | uint64 | — |
total_edges | 3 | uint64 | — |
last_write_at | 4 | google.protobuf.Timestamp | Zero when the tenant has never written a node. |
GetGraphSummaryRequest
No fields.
GetGraphSummaryResponse
| Field | # | Type | Description |
|---|---|---|---|
summary | 1 | string | LLM-friendly text summary, capped at ~4000 chars. |
stats | 2 | GraphSummaryStats | — |
GetMissionGraphRequest
| Field | # | Type | Description |
|---|---|---|---|
mission_id | 1 | string | — |
GetMissionGraphResponse
| Field | # | Type | Description |
|---|---|---|---|
nodes | 1 | repeated Node | — |
edges | 2 | repeated Edge | — |
GetTenantGraphRequest
| Field | # | Type | Description |
|---|---|---|---|
limit | 1 | uint32 | Optional. Default 1000, max 5000 (server-clamped). |
include_labels | 2 | repeated string | Optional. If non-empty, only nodes carrying ANY of these labels are returned (and their connecting edges). |
GetTenantGraphResponse
| Field | # | Type | Description |
|---|---|---|---|
nodes | 1 | repeated Node | — |
edges | 2 | repeated Edge | — |
truncated | 3 | bool | True when total_node_count exceeded the limit and the response was capped. |
total_node_count | 4 | uint32 | Total node count for the tenant before truncation. UI should surface a "showing N of M" banner when truncated is true. |
GraphSummaryStats
| Field | # | Type | Description |
|---|---|---|---|
hosts | 1 | uint64 | — |
services | 2 | uint64 | — |
findings | 3 | uint64 | — |
vulnerabilities | 4 | uint64 | — |
missions | 5 | uint64 | — |
GraphUpdate
GraphUpdate is one event on the stream. The daemon may drop subscribers that fall behind; clients SHOULD reconcile via a polling fallback.
| Field | # | Type | Description |
|---|---|---|---|
kind | 1 | GraphUpdate.Kind | — |
node | 2 | Node | — |
edge | 3 | Edge | — |
at | 4 | google.protobuf.Timestamp | — |
oneof entity — one of: node, edge.
NeighborEdge
| Field | # | Type | Description |
|---|---|---|---|
node | 1 | Node | — |
relationship | 2 | string | — |
direction | 3 | string | "incoming" or "outgoing" |
Node
Node is a single graph node. Properties are JSON-stringified per value to preserve Neo4j integer/temporal type fidelity through proto3.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
labels | 2 | repeated string | — |
properties | 3 | map<string, string> | — |
first_seen_at | 4 | google.protobuf.Timestamp | — |
severity | 5 | string | Severity tag for finding-class nodes; empty for non-finding labels. Values: "low" | "medium" | "high" | "critical". |
NodeCountByLabel
| Field | # | Type | Description |
|---|---|---|---|
label | 1 | string | — |
count | 2 | uint64 | — |
Path
Path is an ordered sequence of node ids and edge ids that connects two endpoints.
| Field | # | Type | Description |
|---|---|---|---|
node_ids | 1 | repeated string | — |
edge_ids | 2 | repeated string | — |
QueryPathsRequest
| Field | # | Type | Description |
|---|---|---|---|
from_node_id | 1 | string | — |
to_node_id | 2 | string | — |
to_node_kind | 3 | string | — |
max_depth | 4 | uint32 | Optional. Default 5, max 10 (server-clamped). |
oneof to — one of: to_node_id, to_node_kind.
QueryPathsResponse
| Field | # | Type | Description |
|---|---|---|---|
paths | 1 | repeated Path | — |
nodes | 2 | repeated Node | De-duplicated set of nodes referenced by any returned path. |
edges | 3 | repeated Edge | De-duplicated set of edges referenced by any returned path. |
truncated_paths | 4 | bool | True when the daemon's path-count cap was hit and additional paths were not returned. |
TimeSeriesPoint
| Field | # | Type | Description |
|---|---|---|---|
date | 1 | google.protobuf.Timestamp | — |
count | 2 | uint64 | — |
WatchGraphUpdatesRequest
No fields.
Enums
FindingCountGroupBy
| Value | # | Description |
|---|---|---|
FINDING_COUNT_GROUP_BY_UNSPECIFIED | 0 | — |
SEVERITY | 1 | — |
CATEGORY | 2 | — |
GraphUpdate.Kind
| Value | # | Description |
|---|---|---|
KIND_UNSPECIFIED | 0 | — |
NODE_ADDED | 1 | — |
EDGE_ADDED | 2 | — |
NODE_UPDATED | 3 | — |
Package gibson.graphrag.v1
Messages
AttackChain
AttackChain is a multi-hop technique sequence discovered by graph traversal.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
name | 2 | string | — |
steps | 3 | repeated AttackStep | — |
mission_id | 4 | string | — |
confidence | 5 | double | confidence for the chain as a whole. |
severity | 6 | string | — |
created_at | 20 | int64 | — |
updated_at | 21 | int64 | — |
AttackPattern
AttackPattern is a MITRE ATT&CK-shaped technique record from the tenant graph.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
technique_id | 2 | string | technique_id is the ATT&CK identifier, e.g. "T1566". |
name | 3 | string | — |
description | 4 | string | — |
tactics | 5 | repeated string | tactics, e.g. ["Initial Access", "Execution"]. |
platforms | 6 | repeated string | platforms, e.g. ["Windows", "Linux"]. |
data_sources | 7 | repeated string | — |
references | 8 | repeated string | — |
created_at | 20 | int64 | — |
updated_at | 21 | int64 | — |
AttackStep
AttackStep is one hop in an AttackChain.
| Field | # | Type | Description |
|---|---|---|---|
order | 1 | int32 | — |
technique_id | 2 | string | — |
node_id | 3 | string | — |
description | 4 | string | — |
evidence | 5 | repeated string | evidence names the findings supporting this step. |
confidence | 6 | double | — |
Certificate
Certificate discovered.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | optional string | — |
subject | 2 | optional string | — |
issuer | 3 | optional string | — |
serial_number | 4 | optional string | — |
not_before | 5 | optional int64 | — |
not_after | 6 | optional int64 | — |
fingerprint_sha256 | 7 | optional string | — |
san | 8 | optional string | — |
parent_id | 10 | optional string | Parent entity reference (optional - cert can be associated with various entities) |
parent_type | 11 | optional string | — |
CustomNode
CustomNode for entities not in standard taxonomy.
| Field | # | Type | Description |
|---|---|---|---|
node_type | 1 | string | — |
id_properties | 2 | map<string, string> | — |
properties | 3 | map<string, string> | — |
parent_type | 4 | optional string | — |
parent_id | 5 | map<string, string> | — |
relationship_type | 6 | optional string | — |
DiscoveryResult
DiscoveryResult is a standardized container for tool-discovered entities. Tools populate this message and Gibson automatically persists to the graph.
| Field | # | Type | Description |
|---|---|---|---|
hosts | 1 | repeated Host | Asset discoveries |
ports | 2 | repeated Port | — |
services | 3 | repeated Service | — |
endpoints | 4 | repeated Endpoint | — |
domains | 5 | repeated Domain | — |
subdomains | 6 | repeated Subdomain | — |
technologies | 7 | repeated Technology | — |
certificates | 8 | repeated Certificate | — |
findings | 9 | repeated Finding | Security findings |
evidence | 10 | repeated Evidence | — |
custom_nodes | 20 | repeated CustomNode | Custom extensions |
explicit_relationships | 21 | repeated ExplicitRelationship | — |
compliance_signals | 22 | repeated taxonomy.v1.ComplianceSignal | Compliance signals — daemon-emitted observations of harness calls. Populated exclusively by the daemon ComplianceMiddleware (agents and tools never self-report). Routed through the same DiscoveryResult → processor → loader pipeline as asset discoveries so signals land in Neo4j with the EMITTED_SIGNAL parent relationship to the originating agent_run. |
Domain
Domain discovered.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | optional string | — |
name | 2 | string | — |
registrar | 3 | optional string | — |
created_date | 4 | optional int64 | — |
expiry_date | 5 | optional int64 | — |
Endpoint
Endpoint (URL) on a service.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | optional string | — |
service_id | 2 | string | — |
url | 3 | string | — |
method | 4 | optional string | — |
status_code | 5 | optional int32 | — |
content_type | 6 | optional string | — |
content_length | 7 | optional int64 | — |
title | 8 | optional string | — |
Evidence
Evidence for a finding.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | optional string | — |
finding_id | 2 | string | — |
type | 3 | string | — |
content | 4 | optional string | — |
url | 5 | optional string | — |
ExplicitRelationship
ExplicitRelationship for custom connections.
| Field | # | Type | Description |
|---|---|---|---|
from_type | 1 | string | — |
from_id | 2 | map<string, string> | — |
to_type | 3 | string | — |
to_id | 4 | map<string, string> | — |
relationship_type | 5 | string | — |
properties | 6 | map<string, string> | — |
Finding
Finding (vulnerability or security issue).
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | optional string | — |
title | 2 | string | — |
description | 3 | optional string | — |
severity | 4 | string | — |
confidence | 5 | optional double | — |
category | 6 | optional string | — |
remediation | 7 | optional string | — |
cvss_score | 8 | optional double | — |
cve_ids | 9 | optional string | — |
parent_id | 10 | optional string | Parent entity reference (optional - finding can be associated with various entities) |
parent_type | 11 | optional string | — |
FindingNode
FindingNode is a finding as it appears in the knowledge graph.
Distinct from gibson.types.v1.Finding, which is the submission shape. This is the projected node: what the graph knows about a finding, including its mission and target lineage.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
title | 2 | string | — |
description | 3 | string | — |
severity | 4 | string | — |
category | 5 | string | — |
confidence | 6 | double | — |
mission_id | 7 | string | — |
target_id | 8 | string | target_id is empty when the finding is not target-scoped. |
created_at | 20 | int64 | — |
updated_at | 21 | int64 | — |
GraphNode
GraphNode represents a node in the knowledge graph. This is the proto-canonical representation for storage and query operations.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
type | 2 | string | — |
properties | 3 | map<string, Value> | — |
content | 4 | string | Content for semantic search (optional) |
mission_id | 10 | string | Scoping fields (injected by harness) |
mission_run_id | 11 | string | — |
agent_run_id | 12 | string | — |
discovered_by | 13 | string | — |
discovered_at | 14 | int64 | — |
created_at | 20 | int64 | Timestamps |
updated_at | 21 | int64 | — |
parent_id | 30 | optional string | Parent reference |
parent_type | 31 | optional string | — |
parent_relationship | 32 | optional string | — |
GraphQuery
GraphQuery represents a query against the knowledge graph using proto-canonical types.
| Field | # | Type | Description |
|---|---|---|---|
text | 1 | string | — |
embedding | 2 | repeated float | — |
top_k | 3 | int32 | — |
node_types | 4 | repeated string | — |
min_score | 5 | double | — |
max_score | 6 | double | — |
mission_id | 7 | string | — |
mission_run_id | 8 | string | — |
scope | 9 | QueryScope | — |
filters | 10 | map<string, string> | — |
vector_weight | 11 | double | — |
graph_weight | 12 | double | — |
HierarchyDef
HierarchyDef is one subClassOf assertion within an OntologyExtension. It mirrors the SDK's graphrag.HierarchyDef Go struct.
| Field | # | Type | Description |
|---|---|---|---|
node_type | 1 | string | node_type is the GraphRAG node type this entry applies to. |
label | 2 | string | label is the IRI of the child class (prefix:localname form). |
sub_class_of | 3 | string | sub_class_of is the IRI of the parent class. Empty string denotes a root node with no parent in this ontology. |
Host
Host discovered by a tool.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | optional string | — |
ip | 2 | string | — |
hostname | 3 | optional string | — |
state | 4 | optional string | — |
os | 5 | optional string | — |
os_version | 6 | optional string | — |
mac_address | 7 | optional string | — |
IFPDef
IFPDef declares an inverse-functional property within an OntologyExtension. It mirrors the SDK's graphrag.IFPDef Go struct.
| Field | # | Type | Description |
|---|---|---|---|
node_type | 1 | string | node_type is the GraphRAG node type this IFP applies to. |
property | 2 | string | property is the name of the identity-bearing property on that node type. |
ListValue
| Field | # | Type | Description |
|---|---|---|---|
values | 1 | repeated Value | — |
MapValue
| Field | # | Type | Description |
|---|---|---|---|
fields | 1 | map<string, Value> | — |
OntologyExtension
OntologyExtension is the proto-canonical form of a parsed ontology.yaml. Components MAY include one in RegisterComponentRequest to contribute hierarchy, equivalence, and identity assertions to the daemon's reasoner.
Mirrors graphrag.OntologyExtension (Go) — the serve.OntologyContributor interface produces the Go value, and PlatformClient.Register converts it to this message via graphrag.OntologyExtensionToProto.
| Field | # | Type | Description |
|---|---|---|---|
prefixes | 1 | map<string, string> | prefixes maps short prefix names to base IRIs, mirroring the prefixes block of the source ontology YAML. |
hierarchies | 2 | repeated HierarchyDef | hierarchies is the ordered list of subClassOf assertions parsed from the YAML. |
equivalences | 3 | repeated SameAsPair | equivalences is the ordered list of sameAs pairs. |
ifps | 4 | repeated IFPDef | ifps is the ordered list of inverse-functional property declarations. |
raw_triples | 5 | bytes | raw_triples holds optional Turtle (*.ttl) content supplied alongside the ontology YAML by power users. The daemon SHOULD store this verbatim and MAY parse it in a future milestone. SDK callers MUST NOT rely on the daemon having parsed raw_triples. |
Port
Port discovered on a host.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | optional string | — |
host_id | 2 | string | — |
number | 3 | int32 | — |
protocol | 4 | string | — |
state | 5 | optional string | — |
reason | 6 | optional string | — |
QueryResult
QueryResult represents a single result from a graph query.
| Field | # | Type | Description |
|---|---|---|---|
node | 1 | GraphNode | — |
score | 2 | double | — |
vector_score | 3 | double | — |
graph_score | 4 | double | — |
path | 5 | repeated string | — |
distance | 6 | int32 | — |
Relationship
Relationship represents a connection between two nodes.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
from_id | 2 | string | — |
to_id | 3 | string | — |
type | 4 | string | — |
properties | 5 | map<string, Value> | — |
weight | 6 | double | — |
mission_id | 10 | string | Scoping |
mission_run_id | 11 | string | — |
created_at | 20 | int64 | Timestamps |
SameAsPair
SameAsPair is one [iriA, iriB] equivalence assertion in an OntologyExtension. Proto does not have a fixed-length array type, so the pair is modelled as a dedicated message with two named fields to keep the wire shape stable across languages.
| Field | # | Type | Description |
|---|---|---|---|
iri_a | 1 | string | — |
iri_b | 2 | string | — |
Service
Service running on a port.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | optional string | — |
port_id | 2 | string | — |
name | 3 | string | — |
product | 4 | optional string | — |
version | 5 | optional string | — |
extra_info | 6 | optional string | — |
banner | 7 | optional string | — |
cpe | 8 | optional string | — |
Subdomain
Subdomain under a domain.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | optional string | — |
domain_id | 2 | string | — |
name | 3 | string | — |
full_name | 4 | optional string | — |
Technology
Technology detected.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | optional string | — |
name | 2 | string | — |
version | 3 | optional string | — |
category | 4 | optional string | — |
confidence | 5 | optional int32 | — |
cpe | 6 | optional string | — |
parent_id | 10 | optional string | Parent entity reference (optional - tech can be associated with various entities) |
parent_type | 11 | optional string | — |
Value
Value represents a dynamic property value.
| Field | # | Type | Description |
|---|---|---|---|
string_value | 1 | string | — |
int_value | 2 | int64 | — |
double_value | 3 | double | — |
bool_value | 4 | bool | — |
bytes_value | 5 | bytes | — |
timestamp_value | 6 | int64 | — |
list_value | 7 | ListValue | — |
map_value | 8 | MapValue | — |
oneof kind — one of: string_value, int_value, double_value, bool_value, bytes_value, timestamp_value, list_value, map_value.
Enums
QueryScope
QueryScope defines the scope of a graph query.
| Value | # | Description |
|---|---|---|
QUERY_SCOPE_UNSPECIFIED | 0 | — |
QUERY_SCOPE_MISSION | 1 | — |
QUERY_SCOPE_MISSION_RUN | 2 | — |
QUERY_SCOPE_GLOBAL | 3 | — |
Package gibson.harness.v1
Services
HarnessCallbackService
HarnessCallbackService provides the harness interface for agents executing in standalone mode. The SDK's CallbackHarness forwards all harness operations to the orchestrator via this service.
Authorize
AuthorizeRequest → AuthorizeResponse
Authorization Operations Authorize checks whether the calling component's current work execution is permitted to perform action on resource. The daemon resolves the run_id to a (user_id, tenant_id) pair and consults FGA.
CallToolProto
CallToolProtoRequest → CallToolProtoResponse
Tool Operations
CallToolProtoStream
CallToolProtoStreamRequest → stream CallToolProtoStreamResponse
CancelMission
CancelMissionRequest → CancelMissionResponse
CreateMission
CreateMissionRequest → CreateMissionResponse
Mission Management Operations These enable agents to autonomously create, run, and manage missions
DelegateToAgent
DelegateToAgentRequest → DelegateToAgentResponse
Agent Operations
DeleteSessionContext
DeleteSessionContextRequest → DeleteSessionContextResponse
DevboxExec
DevboxExecRequest → stream DevboxExecResponse
DevboxExec runs one command in the caller's session Devbox — a session-lifetime sandbox resolved (and lazily created on first call) by (tenant, session_id), then REUSED across calls in that session. This is deliberately distinct from the per-call SANDBOXED tool path (CallToolProto), which stays one microVM per call; a Devbox holds working state (checkouts, build caches) that per-call isolation would throw away between commands.
FindSimilarAttacks
FindSimilarAttacksRequest → FindSimilarAttacksResponse
FindSimilarFindings
FindSimilarFindingsRequest → FindSimilarFindingsResponse
GenerateNodeID
GenerateNodeIDRequest → GenerateNodeIDResponse
GetAttackChains
GetAttackChainsRequest → GetAttackChainsResponse
GetCredential
GetCredentialRequest → GetCredentialResponse
Credential Operations
GetFindings
GetFindingsRequest → GetFindingsResponse
GetMissionResults
GetMissionResultsRequest → GetMissionResultsResponse
GetMissionRunHistory
GetMissionRunHistoryRequest → GetMissionRunHistoryResponse
GetMissionStatus
GetMissionStatusRequest → GetMissionStatusResponse
GetPlanContext
GetPlanContextRequest → GetPlanContextResponse
Planning Operations
GetRelatedFindings
GetRelatedFindingsRequest → GetRelatedFindingsResponse
GetRunFindings
GetRunFindingsRequest → GetRunFindingsResponse
GetSessionContext
GetSessionContextRequest → GetSessionContextResponse
GetTaxonomySchema
GetTaxonomySchemaRequest → GetTaxonomySchemaResponse
Taxonomy Operations
LLMComplete
LLMCompleteRequest → LLMCompleteResponse
LLM Operations
LLMCompleteStructured
LLMCompleteStructuredRequest → LLMCompleteStructuredResponse
LLMCompleteWithTools
LLMCompleteWithToolsRequest → LLMCompleteWithToolsResponse
LLMStream
LLMStreamRequest → stream LLMStreamResponse
ListAgents
ListAgentsRequest → ListAgentsResponse
ListMissions
ListMissionsRequest → ListMissionsResponse
ListPlugins
ListPluginsRequest → ListPluginsResponse
ListTools
ListToolsRequest → ListToolsResponse
Observe
ObserveRequest → ObserveResponse
Observe emits a typed observation into the World (ADR-0007). The brain resolves identity and topology; scope is derived server-side from context.
PutSessionContext
PutSessionContextRequest → PutSessionContextResponse
Session-context store: an opaque, versioned blob per (tenant, session_id), persisted in the per-tenant dataplane store. The daemon never interprets the bytes — the component owns its own format. This is the TRUSTED home for a session's local context; it must never be written to the untrusted Devbox volume (that invariant is the client's to keep, but this store is why keeping it costs nothing). Writes are guarded by an etag (If-Match) so concurrent writers cannot clobber each other; the server enforces a TTL and a size cap.
QueryNodes
QueryNodesRequest → QueryNodesResponse
Knowledge Operations
The knowledge-graph READ surface. It exists on ComponentService too, and that duplication is deliberate: without it here, a dispatched run holding only its task-scoped callback grant cannot read the tenant graph, and the agent would have to keep a component-scoped grant alive purely to call recall — which defeats the point of scoping the dispatch at all. See zerocool-plugins ADR-0006 and docs/adr/0001-callback-knowledge-reads.md.
Read-only by construction. The write half is NOT mirrored: the projector is the sole graph writer (ADR-0012), and sdk#451 already removed the generic graph-write RPC from ComponentService.
QueryPlugin
QueryPluginRequest → QueryPluginResponse
Plugin Operations
QueueToolWork
QueueToolWorkRequest → QueueToolWorkResponse
Tool Work Queue Operations
RecordSpan
RecordSpanRequest → RecordSpanResponse
Distributed Tracing Operations
RecordSpans
RecordSpansRequest → RecordSpansResponse
ReportStepHints
ReportStepHintsRequest → ReportStepHintsResponse
RunMission
RunMissionRequest → RunMissionResponse
SearchTools
SearchToolsRequest → SearchToolsResponse
SearchTools returns a small, ranked, authz-filtered set of tools matching a query — the meta-tool surface agents use instead of receiving every tool (ADR-0047 facet 5). Per-tool authorization is enforced inside the handler; this RPC-level gate only checks that the caller may use the harness.
SubmitFinding
SubmitFindingRequest → SubmitFindingResponse
Finding Operations
ToolResults
ToolResultsRequest → stream ToolResultsResponse
ValidateFinding
ValidateFindingRequest → ValidateFindingResponse
ValidateGraphNode
ValidateGraphNodeRequest → ValidateGraphNodeResponse
ValidateRelationship
ValidateRelationshipRequest → ValidateRelationshipResponse
WaitForMission
WaitForMissionRequest → WaitForMissionResponse
WorkspaceCommit
WorkspaceCommitRequest → WorkspaceCommitResponse
WorkspaceCommit stages all changes in the workspace and creates a commit with the given message. Returns the commit SHA.
WorkspaceGetInfo
WorkspaceGetInfoRequest → WorkspaceGetInfoResponse
WorkspaceGetInfo returns name + path for a single workspace. An empty name resolves to the mission's primary workspace (single-repo case). Returns NOT_FOUND when no workspace with that name exists.
WorkspaceList
WorkspaceListRequest → WorkspaceListResponse
WorkspaceList returns metadata for every workspace configured for the calling component's active mission. Returns an empty list when the mission has no workspaces.
WorkspaceListFiles
WorkspaceListFilesRequest → WorkspaceListFilesResponse
WorkspaceListFiles returns paths matching the given glob pattern, relative to the workspace root. Result sets larger than 10,000 paths are truncated to the first 10,000 with truncated=true on the response.
WorkspacePush
WorkspacePushRequest → WorkspacePushResponse
WorkspacePush pushes committed changes to the remote configured for the workspace. Returns PERMISSION_DENIED on auth failure against the remote.
WorkspaceReadFile
WorkspaceReadFileRequest → WorkspaceReadFileResponse
WorkspaceReadFile reads a file from the named workspace. Path is relative to the workspace root. Files larger than 16 MB return RESOURCE_EXHAUSTED; a streaming variant is deferred to a follow-on spec.
WorkspaceWriteFile
WorkspaceWriteFileRequest → WorkspaceWriteFileResponse
WorkspaceWriteFile writes content to a file in the named workspace. Path is relative to the workspace root. Content larger than 16 MB returns RESOURCE_EXHAUSTED; a streaming variant is deferred.
WorldView
WorldViewRequest → WorldViewResponse
WorldView returns the caller's server-projected slice of the tenant World (ADR-0012, sdk#341's read half). It is the counterpart to Observe: Observe is the agent's only write, WorldView its only read.
The slice is projected by the daemon from the mission record it created — the tenant that owns the World and the scope that bounds the slice are read there, never from this request. WorldViewRequest carries no tenant field and no scope field, so an agent cannot name another tenant's World or a wider slice: both are unrepresentable rather than rejected.
Messages
AccountObservation
AccountObservation reports a discovered account/principal (identity: identifier).
| Field | # | Type | Description |
|---|---|---|---|
identifier | 1 | string | — |
kind | 2 | string | — |
AnyValue
AnyValue represents a dynamically typed value used in attributes.
| Field | # | Type | Description |
|---|---|---|---|
string_value | 1 | string | — |
bool_value | 2 | bool | — |
int_value | 3 | int64 | — |
double_value | 4 | double | — |
bytes_value | 5 | bytes | — |
oneof value — one of: string_value, bool_value, int_value, double_value, bytes_value.
AttackChain
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
name | 2 | string | — |
severity | 3 | string | — |
steps | 4 | repeated AttackStep | — |
AttackPattern
| Field | # | Type | Description |
|---|---|---|---|
technique_id | 1 | string | — |
name | 2 | string | — |
description | 3 | string | — |
tactics | 4 | repeated string | — |
platforms | 5 | repeated string | — |
similarity | 6 | double | — |
AttackStep
| Field | # | Type | Description |
|---|---|---|---|
order | 1 | int32 | — |
technique_id | 2 | string | — |
node_id | 3 | string | — |
description | 4 | string | — |
confidence | 5 | double | — |
AuthorizeRequest
AuthorizeRequest asks the daemon whether the current work execution is permitted to perform action on resource. The daemon resolves run_id to the (user_id, tenant_id) that owns this mission run, then calls FGA.
| Field | # | Type | Description |
|---|---|---|---|
run_id | 1 | string | run_id is the mission run ID embedded in the work envelope's AuthzContext. The daemon uses it to look up the active mission's user and tenant. |
action | 2 | string | action is one of: execute, configure, read, write. Maps to FGA relation "can_{action}" in the authorization model. |
resource | 3 | string | resource is the FGA object in "<type>:<name>" format, e.g. "tool:mytool". |
AuthorizeResponse
AuthorizeResponse returns the authorization decision.
| Field | # | Type | Description |
|---|---|---|---|
allowed | 1 | bool | allowed is true if the action is permitted, false if denied. |
reason | 2 | string | reason is a human-readable explanation, populated only on deny. It does not expose internal FGA object names or user IDs. |
BasicAuth
BasicAuth represents username/password credentials
| Field | # | Type | Description |
|---|---|---|---|
username | 1 | string | — |
password | 2 | string | — |
CallToolProtoRequest
CallToolProtoRequest invokes a tool using proto-serialized JSON input/output.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
name | 2 | string | — |
input_json | 3 | bytes | JSON-serialized proto request message |
input_type | 4 | string | Fully qualified proto message type name for input (e.g., "gibson.tool.mytool.MyRequest") |
output_type | 5 | string | Fully qualified proto message type name for output (e.g., "gibson.tool.mytool.MyResponse") |
CallToolProtoResponse
CallToolProtoResponse returns the tool output as proto-serialized JSON.
| Field | # | Type | Description |
|---|---|---|---|
output_json | 1 | bytes | JSON-serialized proto response message |
error | 2 | HarnessError | — |
CallToolProtoStreamRequest
CallToolProtoStreamRequest initiates a streaming tool execution.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
name | 2 | string | — |
input_json | 3 | bytes | JSON-serialized proto request message |
input_type | 4 | string | Fully qualified proto message type name for input (e.g., "gibson.tool.mytool.MyRequest") |
output_type | 5 | string | Fully qualified proto message type name for output (e.g., "gibson.tool.mytool.MyResponse") |
timeout_ms | 6 | int64 | Optional timeout in milliseconds |
CallToolProtoStreamResponse
CallToolProtoStreamResponse streams tool execution events back to the agent.
| Field | # | Type | Description |
|---|---|---|---|
progress | 1 | ToolProgressEvent | — |
partial | 2 | ToolPartialResultEvent | — |
warning | 3 | ToolWarningEvent | — |
complete | 4 | ToolCompleteEvent | — |
error | 5 | ToolErrorEvent | — |
trace_id | 10 | string | — |
span_id | 11 | string | — |
sequence | 12 | int64 | — |
timestamp_ms | 13 | int64 | — |
oneof payload — one of: progress, partial, warning, complete, error.
CancelMissionRequest
CancelMissionRequest requests cancellation of a running mission.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
mission_id | 2 | string | — |
CancelMissionResponse
CancelMissionResponse confirms cancellation request.
| Field | # | Type | Description |
|---|---|---|---|
error | 1 | HarnessError | — |
CertificateObservation
CertificateObservation is a TLS certificate served on a port (identity: fingerprint).
| Field | # | Type | Description |
|---|---|---|---|
fingerprint | 1 | string | — |
subject | 2 | string | — |
issuer | 3 | string | — |
not_after | 4 | string | — |
ContextInfo
| Field | # | Type | Description |
|---|---|---|---|
task_id | 1 | string | — |
agent_name | 2 | string | — |
trace_id | 3 | string | — |
span_id | 4 | string | — |
mission_id | 5 | string | — |
mission_run_id | 6 | string | Mission run ID - unique identifier for this specific mission execution. Created by MissionGraphManager.CreateMissionRunNode at mission start. Used for mission-scoped GraphRAG storage (nodes BELONGS_TO mission_run). |
agent_run_id | 7 | string | Agent run ID - unique identifier for this specific agent execution. Used for DISCOVERED relationships and provenance tracking. |
run_number | 8 | int32 | Run number - sequential number for this mission (1, 2, 3...). Used for mission memory queries and historical comparisons. |
tool_execution_id | 9 | string | Tool execution ID - unique identifier for tool execution provenance. Used to create PRODUCED relationships from tool executions to nodes. |
CreateMissionRequest
CreateMissionRequest creates a new mission from a mission definition.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
mission_definition_json | 2 | bytes | — |
target_id | 3 | string | — |
name | 4 | string | — |
constraints | 5 | MissionConstraints | Deprecated: use canonical_constraints (field 8) instead. constraints uses the harness-local MissionConstraints shape which only carries max_duration_ms (int64 ms), max_tokens, max_cost, and max_findings. It will be removed in a follow-up release once all microVM consumers have migrated to canonical_constraints. See sdk#64 migration plan. |
metadata | 6 | map<string, gibson.common.v1.TypedValue> | — |
tags | 7 | repeated string | — |
canonical_constraints | 8 | gibson.mission.v1.MissionConstraints | canonical_constraints carries the platform-canonical gibson.mission.v1.MissionConstraints type (sdk#47 / ADR 0004). Prefer this field over the deprecated constraints (field 5). The daemon merges canonical_constraints with any constraints baked into the mission definition (dispatch wins on conflict). Absent means no dispatch-time constraint overrides. |
CreateMissionResponse
CreateMissionResponse returns the created mission info.
| Field | # | Type | Description |
|---|---|---|---|
mission | 1 | MissionInfo | — |
error | 2 | HarnessError | — |
Credential
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | — |
type | 2 | CredentialType | — |
api_key | 3 | string | — |
bearer_token | 4 | string | — |
basic | 5 | BasicAuth | — |
oauth | 6 | OAuthCredential | — |
custom_secret | 7 | string | — |
metadata | 8 | map<string, gibson.common.v1.TypedValue> | — |
oneof secret_data — one of: api_key, bearer_token, basic, oauth, custom_secret.
CredentialObservation
CredentialObservation reports a discovered credential (identity: secret hash).
| Field | # | Type | Description |
|---|---|---|---|
secret_hash | 1 | string | — |
username | 2 | string | — |
kind | 3 | string | — |
DelegateToAgentRequest
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
name | 2 | string | — |
task | 3 | gibson.types.v1.Task | — |
DelegateToAgentResponse
| Field | # | Type | Description |
|---|---|---|---|
result | 1 | gibson.types.v1.Result | — |
error | 2 | HarnessError | — |
DeleteSessionContextRequest
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
session_id | 2 | string | — |
DeleteSessionContextResponse
DeleteSessionContextResponse is empty on success; deleting a session that has no blob is a no-op, not an error.
| Field | # | Type | Description |
|---|---|---|---|
error | 1 | HarnessError | — |
DevboxExecExit
DevboxExecExit is the terminal event of a completed command.
| Field | # | Type | Description |
|---|---|---|---|
exit_code | 1 | int32 | — |
DevboxExecRequest
DevboxExecRequest names the session and the command. No tenant field, no sandbox handle: the Devbox is addressed purely by the server-derived (tenant, session_id) pair.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
session_id | 2 | string | session_id is the agent-chosen opaque session identity shared with the session-context store. Required, non-empty. |
argv | 3 | repeated string | argv is the command to run, exec-style (argv[0] is the binary). The server does not shell-interpret it; a caller that wants a shell asks for one explicitly (argv = ["sh", "-c", …]). |
stdin | 4 | bytes | stdin is written to the process's standard input and closed. Empty means an immediately-closed stdin, not an open pipe. |
DevboxExecResponse
DevboxExecResponse streams interleaved stdio and ends with the exit event. Exactly one exit event terminates a successful stream; a stream that ends without one was cut by transport or server failure and the caller must not assume the command completed.
| Field | # | Type | Description |
|---|---|---|---|
stdout | 1 | bytes | stdout/stderr carry raw chunks in arrival order. Chunk boundaries are transport artifacts, not line boundaries. |
stderr | 2 | bytes | — |
exit | 3 | DevboxExecExit | — |
error | 4 | HarnessError | — |
oneof payload — one of: stdout, stderr, exit, error.
DomainObservation
DomainObservation reports a registrable domain seen in scope.
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | — |
EndpointObservation
EndpointObservation is a path observed on a service.
| Field | # | Type | Description |
|---|---|---|---|
path | 1 | string | — |
status | 2 | int32 | — |
FindSimilarAttacksRequest
FindSimilarAttacksRequest searches for attack patterns similar to the given content.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
content | 2 | string | — |
top_k | 3 | int32 | — |
FindSimilarAttacksResponse
FindSimilarAttacksResponse carries matching attack patterns.
| Field | # | Type | Description |
|---|---|---|---|
results | 1 | repeated gibson.graphrag.v1.AttackPattern | — |
error | 2 | HarnessError | — |
FindSimilarFindingsRequest
FindSimilarFindingsRequest searches for findings similar to the given one.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
finding_id | 2 | string | — |
top_k | 3 | int32 | — |
FindSimilarFindingsResponse
FindSimilarFindingsResponse carries matching findings.
| Field | # | Type | Description |
|---|---|---|---|
results | 1 | repeated gibson.graphrag.v1.FindingNode | — |
error | 2 | HarnessError | — |
FindingFilter
FindingFilter represents filtering criteria for findings
| Field | # | Type | Description |
|---|---|---|---|
mission_id | 1 | string | — |
agent_name | 2 | string | — |
severity | 3 | gibson.types.v1.FindingSeverity | — |
status | 4 | gibson.types.v1.FindingStatus | — |
tags | 5 | repeated string | — |
FindingNode
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
title | 2 | string | — |
description | 3 | string | — |
severity | 4 | string | — |
category | 5 | string | — |
confidence | 6 | double | — |
similarity | 7 | double | — |
GenerateNodeIDRequest
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
node_type | 2 | string | — |
properties | 3 | map<string, gibson.common.v1.TypedValue> | — |
GenerateNodeIDResponse
| Field | # | Type | Description |
|---|---|---|---|
node_id | 1 | string | — |
error | 2 | HarnessError | — |
GetAttackChainsRequest
GetAttackChainsRequest requests multi-hop attack paths from a technique.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
technique_id | 2 | string | — |
max_depth | 3 | int32 | — |
GetAttackChainsResponse
GetAttackChainsResponse carries attack chain results.
| Field | # | Type | Description |
|---|---|---|---|
results | 1 | repeated gibson.graphrag.v1.AttackChain | — |
error | 2 | HarnessError | — |
GetCredentialRequest
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
name | 2 | string | — |
GetCredentialResponse
| Field | # | Type | Description |
|---|---|---|---|
credential | 1 | Credential | — |
error | 2 | HarnessError | — |
GetFindingsRequest
GetFindingsRequest queries previously submitted findings.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
filter | 2 | FindingFilter | filter is typed for the same reason the responses are: a JSON blob whose schema lives in a comment is a contract nothing checks. |
GetFindingsResponse
GetFindingsResponse carries matching findings.
| Field | # | Type | Description |
|---|---|---|---|
findings | 1 | repeated gibson.types.v1.Finding | — |
error | 2 | HarnessError | — |
GetMissionResultsRequest
GetMissionResultsRequest retrieves completed mission results.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
mission_id | 2 | string | — |
GetMissionResultsResponse
GetMissionResultsResponse returns mission results.
| Field | # | Type | Description |
|---|---|---|---|
result | 1 | MissionResult | — |
error | 2 | HarnessError | — |
GetMissionRunHistoryRequest
GetMissionRunHistoryRequest asks for every run of the caller's mission.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
GetMissionRunHistoryResponse
GetMissionRunHistoryResponse carries the run summaries.
| Field | # | Type | Description |
|---|---|---|---|
runs | 1 | repeated gibson.types.v1.MissionRunSummary | — |
error | 2 | HarnessError | — |
GetMissionStatusRequest
GetMissionStatusRequest retrieves current mission status.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
mission_id | 2 | string | — |
GetMissionStatusResponse
GetMissionStatusResponse returns detailed status info.
| Field | # | Type | Description |
|---|---|---|---|
status | 1 | MissionStatusInfo | — |
error | 2 | HarnessError | — |
GetPlanContextRequest
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
GetPlanContextResponse
| Field | # | Type | Description |
|---|---|---|---|
plan_context | 1 | PlanContext | — |
error | 2 | HarnessError | — |
GetRelatedFindingsRequest
GetRelatedFindingsRequest requests findings related via graph relationships.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
finding_id | 2 | string | — |
GetRelatedFindingsResponse
GetRelatedFindingsResponse carries related findings.
| Field | # | Type | Description |
|---|---|---|---|
results | 1 | repeated gibson.graphrag.v1.FindingNode | — |
error | 2 | HarnessError | — |
GetRunFindingsRequest
GetRunFindingsRequest queries findings scoped to mission runs.
One RPC with a scope, not one RPC per scope. gibson's harness carried GetPreviousRunFindings and GetAllRunFindings as separate methods; the scope is data, and modelling it as data is what lets a caller pass it through.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
scope | 2 | RunScope | — |
filter | 3 | FindingFilter | — |
GetRunFindingsResponse
GetRunFindingsResponse carries findings from the selected runs.
| Field | # | Type | Description |
|---|---|---|---|
findings | 1 | repeated gibson.types.v1.Finding | — |
error | 2 | HarnessError | — |
GetSessionContextRequest
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
session_id | 2 | string | — |
GetSessionContextResponse
| Field | # | Type | Description |
|---|---|---|---|
error | 1 | HarnessError | — |
data | 2 | bytes | data is empty and etag "" when no blob exists for the session (a fresh session is not an error). |
etag | 3 | string | — |
GetTaxonomySchemaRequest
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
GetTaxonomySchemaResponse
| Field | # | Type | Description |
|---|---|---|---|
version | 1 | string | — |
node_types | 2 | repeated TaxonomyNodeType | — |
relationship_types | 3 | repeated TaxonomyRelationshipType | — |
techniques | 4 | repeated TaxonomyTechnique | — |
target_types | 5 | repeated TaxonomyTargetType | — |
technique_types | 6 | repeated TaxonomyTechniqueType | — |
capabilities | 7 | repeated TaxonomyCapability | — |
error | 8 | HarnessError | — |
GraphNode
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
type | 2 | string | — |
properties | 3 | map<string, gibson.common.v1.TypedValue> | — |
content | 4 | string | — |
mission_id | 5 | string | — |
agent_name | 6 | string | — |
created_at | 7 | int64 | — |
updated_at | 8 | int64 | — |
GraphRAGResult
| Field | # | Type | Description |
|---|---|---|---|
node | 1 | GraphNode | — |
score | 2 | double | — |
vector_score | 3 | double | — |
graph_score | 4 | double | — |
path | 5 | repeated string | — |
distance | 6 | int32 | — |
HarnessAgentDescriptor
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | — |
version | 2 | string | — |
description | 3 | string | — |
capabilities | 4 | repeated string | — |
target_types | 5 | repeated string | — |
technique_types | 6 | repeated string | — |
HarnessError
Error represents an error response from a callback operation.
| Field | # | Type | Description |
|---|---|---|---|
code | 1 | gibson.common.v1.ErrorCode | — |
message | 2 | string | — |
retryable | 3 | bool | — |
HarnessHealthStatus
HealthStatus represents the health status of a service.
| Field | # | Type | Description |
|---|---|---|---|
state | 1 | string | — |
message | 2 | string | — |
checked_at | 3 | int64 | — |
HarnessPluginDescriptor
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | — |
description | 2 | string | — |
version | 3 | string | — |
methods | 4 | repeated string | — |
HarnessToolDescriptor
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | — |
description | 2 | string | — |
input_schema | 5 | JSONSchemaNode | Structured schemas with full taxonomy support |
output_schema | 6 | JSONSchemaNode | — |
HistoricalValueItem
| Field | # | Type | Description |
|---|---|---|---|
value | 1 | gibson.common.v1.TypedValue | — |
run_number | 2 | int32 | — |
mission_id | 3 | string | — |
stored_at | 4 | string | — |
HostObservation
HostObservation reports a host seen at address with optional strong identity signals and the ports observed open in this sighting.
| Field | # | Type | Description |
|---|---|---|---|
address | 1 | string | — |
ssh_host_key | 2 | string | — |
cloud_id | 3 | string | — |
ports | 4 | repeated PortObservation | — |
JSONSchemaNode
JSONSchemaNode represents a JSON Schema node with taxonomy support. Used for structured schema transmission that preserves taxonomy mappings.
| Field | # | Type | Description |
|---|---|---|---|
type | 1 | string | — |
description | 2 | string | — |
properties | 3 | map<string, JSONSchemaNode> | — |
required | 4 | repeated string | — |
items | 5 | JSONSchemaNode | — |
enum_values | 6 | repeated string | — |
format | 7 | string | — |
minimum | 8 | optional double | — |
maximum | 9 | optional double | — |
min_length | 10 | optional int32 | — |
max_length | 11 | optional int32 | — |
min_items | 12 | optional int32 | — |
max_items | 13 | optional int32 | — |
pattern | 14 | optional string | — |
default_value | 15 | optional string | — |
nullable | 16 | bool | — |
taxonomy | 17 | TaxonomyMapping | — |
KeyValue
KeyValue represents a key-value pair used in span attributes.
| Field | # | Type | Description |
|---|---|---|---|
key | 1 | string | — |
value | 2 | AnyValue | — |
LLMCompleteRequest
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
slot | 2 | string | — |
messages | 3 | repeated LLMMessage | — |
temperature | 4 | optional double | Completion options |
max_tokens | 5 | optional int32 | — |
top_p | 6 | optional double | — |
stop | 7 | repeated string | — |
LLMCompleteResponse
| Field | # | Type | Description |
|---|---|---|---|
content | 1 | string | — |
tool_calls | 2 | repeated ToolCall | — |
finish_reason | 3 | string | — |
usage | 4 | TokenUsage | — |
error | 5 | HarnessError | — |
LLMCompleteStructuredRequest
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
slot | 2 | string | — |
messages | 3 | repeated LLMMessage | — |
schema_json | 4 | string | — |
LLMCompleteStructuredResponse
| Field | # | Type | Description |
|---|---|---|---|
result | 1 | gibson.common.v1.TypedValue | — |
usage | 3 | TokenUsage | — |
error | 4 | HarnessError | — |
LLMCompleteWithToolsRequest
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
slot | 2 | string | — |
messages | 3 | repeated LLMMessage | — |
tools | 4 | repeated ToolDef | — |
LLMCompleteWithToolsResponse
| Field | # | Type | Description |
|---|---|---|---|
content | 1 | string | — |
tool_calls | 2 | repeated ToolCall | — |
finish_reason | 3 | string | — |
usage | 4 | TokenUsage | — |
error | 5 | HarnessError | — |
LLMMessage
| Field | # | Type | Description |
|---|---|---|---|
role | 1 | string | — |
content | 2 | string | — |
tool_calls | 3 | repeated ToolCall | — |
tool_results | 4 | repeated ToolResult | — |
name | 5 | string | — |
LLMStreamRequest
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
slot | 2 | string | — |
messages | 3 | repeated LLMMessage | — |
temperature | 4 | optional double | Completion options |
max_tokens | 5 | optional int32 | — |
top_p | 6 | optional double | — |
stop | 7 | repeated string | — |
LLMStreamResponse
| Field | # | Type | Description |
|---|---|---|---|
delta | 1 | string | — |
tool_calls | 2 | repeated ToolCall | — |
finish_reason | 3 | string | — |
usage | 4 | TokenUsage | — |
error | 5 | HarnessError | — |
ListAgentsRequest
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
ListAgentsResponse
| Field | # | Type | Description |
|---|---|---|---|
agents | 1 | repeated HarnessAgentDescriptor | — |
error | 2 | HarnessError | — |
ListMissionsRequest
ListMissionsRequest queries missions matching filter criteria.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
filter | 2 | MissionFilter | — |
ListMissionsResponse
ListMissionsResponse returns matching missions.
| Field | # | Type | Description |
|---|---|---|---|
missions | 1 | repeated MissionInfo | — |
error | 2 | HarnessError | — |
ListPluginsRequest
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
ListPluginsResponse
| Field | # | Type | Description |
|---|---|---|---|
plugins | 1 | repeated HarnessPluginDescriptor | — |
error | 2 | HarnessError | — |
ListToolsRequest
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
ListToolsResponse
| Field | # | Type | Description |
|---|---|---|---|
tools | 1 | repeated HarnessToolDescriptor | — |
error | 2 | HarnessError | — |
LongTermMemoryResult
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
content | 2 | string | — |
metadata | 3 | map<string, gibson.common.v1.TypedValue> | — |
score | 4 | double | — |
created_at | 5 | string | — |
MissionConstraints
MissionConstraints limits mission execution to prevent resource exhaustion.
Deprecated: use gibson.mission.v1.MissionConstraints via the canonical_constraints field on CreateMissionRequest instead. This type will be removed in a follow-up release after all microVM consumers have migrated (see sdk#64 migration plan).
| Field | # | Type | Description |
|---|---|---|---|
max_duration_ms | 1 | int64 | — |
max_tokens | 2 | int64 | — |
max_cost | 3 | double | — |
max_findings | 4 | int32 | — |
MissionFilter
MissionFilter specifies criteria for listing missions.
| Field | # | Type | Description |
|---|---|---|---|
status | 1 | MissionStatus | — |
target_id | 2 | string | — |
parent_mission_id | 3 | string | — |
created_after | 4 | int64 | — |
created_before | 5 | int64 | — |
tags | 6 | repeated string | — |
limit | 7 | int32 | — |
offset | 8 | int32 | — |
MissionInfo
MissionInfo provides metadata about a mission.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
name | 2 | string | — |
status | 3 | MissionStatus | — |
target_id | 4 | string | — |
parent_mission_id | 5 | string | — |
created_at | 6 | int64 | — |
tags | 7 | repeated string | — |
MissionMemoryItem
| Field | # | Type | Description |
|---|---|---|---|
key | 1 | string | — |
value | 2 | gibson.common.v1.TypedValue | — |
metadata | 3 | map<string, gibson.common.v1.TypedValue> | — |
created_at | 4 | string | — |
updated_at | 5 | string | — |
MissionMemoryResult
| Field | # | Type | Description |
|---|---|---|---|
key | 1 | string | — |
value | 2 | gibson.common.v1.TypedValue | — |
metadata | 3 | map<string, gibson.common.v1.TypedValue> | — |
score | 4 | double | — |
created_at | 5 | string | — |
updated_at | 6 | string | — |
MissionMetrics
MissionMetrics aggregates execution statistics.
| Field | # | Type | Description |
|---|---|---|---|
duration_ms | 1 | int64 | — |
tokens_used | 2 | int64 | — |
tool_calls | 3 | int32 | — |
agent_calls | 4 | int32 | — |
findings_count | 5 | int32 | — |
MissionResult
MissionResult contains final results of a completed mission.
| Field | # | Type | Description |
|---|---|---|---|
mission_id | 1 | string | — |
status | 2 | MissionStatus | — |
findings | 3 | repeated gibson.types.v1.Finding | — |
output | 4 | map<string, gibson.common.v1.TypedValue> | — |
metrics | 5 | MissionMetrics | — |
error | 6 | string | — |
completed_at | 7 | int64 | — |
MissionRunSummary
MissionRunSummary is the proto wire type for types.MissionRunSummary, used by GetMissionRunHistory to return chronological run records to the SDK CallbackHarness.
Spec: headline-feature-completion R6.1.
| Field | # | Type | Description |
|---|---|---|---|
mission_id | 1 | string | mission_id uniquely identifies this run. |
run_number | 2 | int32 | run_number is the sequential run number for this mission name (1-based). |
status | 3 | string | status is the final status string (running, completed, failed, cancelled, paused). |
findings_count | 4 | int32 | findings_count is the number of findings discovered in this run. |
created_at_unix | 5 | int64 | created_at is when the run was created (Unix epoch seconds). |
completed_at_unix | 6 | int64 | completed_at_unix is when the run completed (Unix epoch seconds, 0 if still running). |
MissionStatusInfo
MissionStatusInfo provides detailed status of a running mission.
| Field | # | Type | Description |
|---|---|---|---|
status | 1 | MissionStatus | — |
progress | 2 | double | — |
phase | 3 | string | — |
finding_counts | 4 | map<string, int32> | — |
token_usage | 5 | int64 | — |
duration_ms | 6 | int64 | — |
error | 7 | string | — |
NodeReference
NodeReference identifies a node by type and property mappings. Use type="self" to reference the current node being mapped.
| Field | # | Type | Description |
|---|---|---|---|
type | 1 | string | — |
properties | 2 | map<string, string> | — |
OAuthCredential
OAuthCredential represents OAuth tokens
| Field | # | Type | Description |
|---|---|---|---|
access_token | 1 | string | — |
refresh_token | 2 | string | — |
token_type | 3 | string | — |
expires_at | 4 | int64 | — |
ObserveRequest
ObserveRequest carries a typed observation (ADR-0007). Scope is NOT carried — the daemon derives it from the mission context.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
host | 2 | HostObservation | — |
domain | 3 | DomainObservation | — |
subdomain | 4 | SubdomainObservation | — |
credential | 5 | CredentialObservation | — |
account | 6 | AccountObservation | — |
oneof observation — one of: host, domain, subdomain, credential, account.
ObserveResponse
ObserveResponse acknowledges an observation.
| Field | # | Type | Description |
|---|---|---|---|
error | 1 | HarnessError | — |
PlanContext
| Field | # | Type | Description |
|---|---|---|---|
current_step_index | 1 | int32 | — |
total_steps | 2 | int32 | — |
remaining_steps | 3 | repeated string | — |
step_budget | 4 | int32 | — |
mission_budget_remaining | 5 | int32 | — |
PortObservation
PortObservation is an observed open port and its optional service detail.
| Field | # | Type | Description |
|---|---|---|---|
number | 1 | int32 | — |
protocol | 2 | string | — |
service | 3 | string | — |
product | 4 | string | — |
version | 5 | string | — |
endpoints | 6 | repeated EndpointObservation | — |
technologies | 7 | repeated TechnologyObservation | — |
certificate | 8 | CertificateObservation | — |
PropertyMapping
PropertyMapping maps a source field to a target property.
| Field | # | Type | Description |
|---|---|---|---|
source | 1 | string | — |
target | 2 | string | — |
default_value | 3 | string | — |
transform | 4 | string | — |
PutSessionContextRequest
PutSessionContextRequest writes the session's context blob.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
session_id | 2 | string | session_id — see DevboxExecRequest.session_id; the same identity. |
data | 3 | bytes | data is the opaque blob. The server enforces a size cap (~8 MB); larger working state belongs in the Devbox, not here. |
if_match | 4 | string | if_match carries the etag of the version this write is based on. Empty string means "create": the write succeeds only if no blob exists for this session yet. A non-empty etag succeeds only if it names the current version. Either mismatch is rejected — a stale writer learns it lost the race instead of clobbering the winner. |
PutSessionContextResponse
| Field | # | Type | Description |
|---|---|---|---|
error | 1 | HarnessError | — |
etag | 2 | string | etag names the version this write produced; pass it as if_match on the next write. |
QueryNodesRequest
QueryNodesRequest searches the knowledge graph with hybrid vector + graph scoring.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
query | 2 | gibson.graphrag.v1.GraphQuery | — |
QueryNodesResponse
QueryNodesResponse carries knowledge graph query results.
| Field | # | Type | Description |
|---|---|---|---|
results | 1 | repeated gibson.graphrag.v1.QueryResult | — |
error | 2 | HarnessError | — |
QueryPluginRequest
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
name | 2 | string | — |
method | 3 | string | — |
params | 4 | map<string, gibson.common.v1.TypedValue> | — |
QueryPluginResponse
| Field | # | Type | Description |
|---|---|---|---|
result | 1 | gibson.common.v1.TypedValue | — |
error | 2 | HarnessError | — |
QueueToolWorkRequest
QueueToolWorkRequest initiates parallel execution of multiple tool invocations.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
tool_name | 2 | string | — |
input_jsons | 3 | repeated string | — |
input_type | 4 | string | — |
output_type | 5 | string | — |
QueueToolWorkResponse
QueueToolWorkResponse returns a job ID for tracking the work queue.
| Field | # | Type | Description |
|---|---|---|---|
job_id | 1 | string | — |
error | 2 | HarnessError | — |
RecordSpanRequest
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
span | 2 | Span | — |
RecordSpanResponse
| Field | # | Type | Description |
|---|---|---|---|
error | 1 | HarnessError | — |
RecordSpansRequest
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
spans | 2 | repeated Span | — |
RecordSpansResponse
| Field | # | Type | Description |
|---|---|---|---|
error | 1 | HarnessError | — |
Relationship
| Field | # | Type | Description |
|---|---|---|---|
from_id | 1 | string | — |
to_id | 2 | string | — |
type | 3 | string | — |
properties | 4 | map<string, gibson.common.v1.TypedValue> | — |
bidirectional | 5 | bool | — |
RelationshipMapping
RelationshipMapping defines relationships between nodes using typed references.
| Field | # | Type | Description |
|---|---|---|---|
type | 1 | string | — |
from | 2 | NodeReference | — |
to | 3 | NodeReference | — |
condition | 4 | string | — |
rel_properties | 5 | repeated PropertyMapping | — |
ReportStepHintsRequest
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
hints | 2 | StepHints | — |
ReportStepHintsResponse
| Field | # | Type | Description |
|---|---|---|---|
error | 1 | HarnessError | — |
RunMissionRequest
RunMissionRequest queues a mission for execution.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
mission_id | 2 | string | — |
wait | 3 | bool | — |
timeout_ms | 4 | int64 | — |
RunMissionResponse
RunMissionResponse confirms mission execution started.
| Field | # | Type | Description |
|---|---|---|---|
error | 1 | HarnessError | — |
SearchToolsCandidate
SearchToolsCandidate is one authorized tool the agent may invoke via its canonical id.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | id is the canonical tool id (mcp:<connector>:<tool> or native:<tool>) the agent passes to invoke the tool. |
source | 2 | string | — |
connector | 3 | string | — |
tool | 4 | string | — |
description | 5 | string | — |
input_schema_json | 6 | string | input_schema_json is the JSON-Schema input document, when known. |
SearchToolsRequest
SearchToolsRequest carries a tool-discovery query: free text plus structured filters. The daemon returns only tools the caller is authorized to invoke.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
query | 2 | string | query is matched (case-insensitively) against tool names and descriptions. Empty matches everything. |
sources | 3 | repeated string | sources optionally restricts results by source ("mcp", "native"). Empty = all. |
connector | 4 | string | connector optionally restricts results to a single connector instance. |
limit | 5 | int32 | limit caps the candidate count; zero uses the daemon default. |
SearchToolsResponse
SearchToolsResponse is the authz-filtered candidate set.
| Field | # | Type | Description |
|---|---|---|---|
candidates | 1 | repeated SearchToolsCandidate | — |
error | 2 | HarnessError | — |
Span
Span represents a single span in a distributed trace.
| Field | # | Type | Description |
|---|---|---|---|
trace_id | 1 | string | — |
span_id | 2 | string | — |
parent_span_id | 3 | string | — |
start_time_unix_nano | 4 | int64 | — |
end_time_unix_nano | 5 | int64 | — |
name | 6 | string | — |
kind | 7 | SpanKind | — |
status_code | 8 | StatusCode | — |
status_message | 9 | string | — |
attributes | 10 | repeated KeyValue | — |
events | 11 | repeated SpanEvent | — |
SpanEvent
SpanEvent represents a single event within a span.
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | — |
time_unix_nano | 2 | int64 | — |
attributes | 3 | repeated KeyValue | — |
StepHints
| Field | # | Type | Description |
|---|---|---|---|
confidence | 1 | double | — |
suggested_next | 2 | repeated string | — |
replan_reason | 3 | string | — |
key_findings | 4 | repeated string | — |
SubdomainObservation
SubdomainObservation reports an FQDN, its parent domain, and resolved addresses.
| Field | # | Type | Description |
|---|---|---|---|
fqdn | 1 | string | — |
domain | 2 | string | — |
addresses | 3 | repeated string | — |
SubmitFindingRequest
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
finding | 2 | gibson.types.v1.Finding | — |
SubmitFindingResponse
| Field | # | Type | Description |
|---|---|---|---|
error | 1 | HarnessError | — |
TaxonomyCapability
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
name | 2 | string | — |
description | 3 | string | — |
technique_types | 4 | repeated string | — |
TaxonomyMapping
TaxonomyMapping defines how tool output maps to knowledge graph nodes. Uses deterministic ID generation based on identifying properties instead of templates.
| Field | # | Type | Description |
|---|---|---|---|
node_type | 1 | string | — |
identifying_properties | 2 | map<string, string> | — |
properties | 3 | repeated PropertyMapping | — |
relationships | 4 | repeated RelationshipMapping | — |
TaxonomyNodeType
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
name | 2 | string | — |
type | 3 | string | — |
category | 4 | string | — |
description | 5 | string | — |
identifying_properties | 6 | repeated string | — |
properties | 7 | repeated TaxonomyProperty | — |
TaxonomyProperty
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | — |
type | 2 | string | — |
required | 3 | bool | — |
description | 4 | string | — |
enum_values | 5 | repeated string | — |
default_value | 6 | string | — |
TaxonomyRelationshipType
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
name | 2 | string | — |
type | 3 | string | — |
category | 4 | string | — |
description | 5 | string | — |
from_types | 6 | repeated string | — |
to_types | 7 | repeated string | — |
properties | 8 | repeated TaxonomyProperty | — |
bidirectional | 9 | bool | — |
TaxonomyTargetType
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
type | 2 | string | — |
name | 3 | string | — |
category | 4 | string | — |
description | 5 | string | — |
required_fields | 6 | repeated string | — |
optional_fields | 7 | repeated string | — |
TaxonomyTechnique
| Field | # | Type | Description |
|---|---|---|---|
technique_id | 1 | string | — |
name | 2 | string | — |
taxonomy | 3 | string | — |
category | 4 | string | — |
description | 5 | string | — |
tactic | 6 | string | — |
platforms | 7 | repeated string | — |
mitre_mapping | 8 | repeated string | — |
TaxonomyTechniqueType
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
type | 2 | string | — |
name | 3 | string | — |
category | 4 | string | — |
description | 5 | string | — |
mitre_ids | 6 | repeated string | — |
default_severity | 7 | string | — |
TechnologyObservation
TechnologyObservation is a technology fingerprinted on a service.
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | — |
version | 2 | string | — |
TokenUsage
| Field | # | Type | Description |
|---|---|---|---|
input_tokens | 1 | int32 | — |
output_tokens | 2 | int32 | — |
total_tokens | 3 | int32 | — |
ToolCall
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
name | 2 | string | — |
arguments | 3 | string | — |
ToolCompleteEvent
ToolCompleteEvent signals successful completion with final output
| Field | # | Type | Description |
|---|---|---|---|
output_json | 1 | bytes | — |
ToolDef
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | — |
description | 2 | string | — |
parameters | 3 | JSONSchemaNode | — |
ToolErrorEvent
ToolErrorEvent signals an error during execution
| Field | # | Type | Description |
|---|---|---|---|
error | 1 | HarnessError | — |
fatal | 2 | bool | — |
ToolPartialResultEvent
ToolPartialResultEvent contains partial results during execution
| Field | # | Type | Description |
|---|---|---|---|
output_json | 1 | bytes | — |
description | 2 | string | — |
ToolProgressEvent
ToolProgressEvent indicates progress during tool execution
| Field | # | Type | Description |
|---|---|---|---|
percent | 1 | int32 | — |
stage | 2 | string | — |
message | 3 | string | — |
ToolResult
| Field | # | Type | Description |
|---|---|---|---|
tool_call_id | 1 | string | — |
content | 2 | string | — |
is_error | 3 | bool | — |
ToolResultsRequest
ToolResultsRequest requests streaming results for a queued job.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
job_id | 2 | string | — |
ToolResultsResponse
ToolResultsResponse streams individual results as tool executions complete.
| Field | # | Type | Description |
|---|---|---|---|
index | 1 | int32 | — |
output_json | 2 | string | — |
output_type | 3 | string | — |
error | 4 | HarnessError | — |
is_final | 5 | bool | — |
ToolWarningEvent
ToolWarningEvent contains non-fatal warnings during execution
| Field | # | Type | Description |
|---|---|---|---|
message | 1 | string | — |
code | 2 | string | — |
TraversalOptions
| Field | # | Type | Description |
|---|---|---|---|
max_depth | 1 | int32 | — |
relationship_types | 2 | repeated string | — |
node_types | 3 | repeated string | — |
direction | 4 | string | — |
TraversalResult
| Field | # | Type | Description |
|---|---|---|---|
node | 1 | GraphNode | — |
path | 2 | repeated string | — |
distance | 3 | int32 | — |
ValidateFindingRequest
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
finding | 2 | gibson.types.v1.Finding | — |
ValidateFindingResponse
| Field | # | Type | Description |
|---|---|---|---|
valid | 1 | bool | — |
errors | 2 | repeated ValidationError | — |
warnings | 3 | repeated string | — |
error | 4 | HarnessError | — |
ValidateGraphNodeRequest
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
node_type | 2 | string | — |
properties | 3 | map<string, gibson.common.v1.TypedValue> | — |
ValidateGraphNodeResponse
| Field | # | Type | Description |
|---|---|---|---|
valid | 1 | bool | — |
errors | 2 | repeated ValidationError | — |
warnings | 3 | repeated string | — |
error | 4 | HarnessError | — |
ValidateRelationshipRequest
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
relationship_type | 2 | string | — |
from_node_type | 3 | string | — |
to_node_type | 4 | string | — |
properties | 5 | map<string, gibson.common.v1.TypedValue> | — |
ValidateRelationshipResponse
| Field | # | Type | Description |
|---|---|---|---|
valid | 1 | bool | — |
errors | 2 | repeated ValidationError | — |
warnings | 3 | repeated string | — |
error | 4 | HarnessError | — |
ValidationError
| Field | # | Type | Description |
|---|---|---|---|
field | 1 | string | — |
message | 2 | string | — |
code | 3 | string | — |
ValidationResponse
| Field | # | Type | Description |
|---|---|---|---|
valid | 1 | bool | — |
errors | 2 | repeated ValidationError | — |
warnings | 3 | repeated string | — |
error | 4 | HarnessError | — |
WaitForMissionRequest
WaitForMissionRequest blocks until mission completion.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
mission_id | 2 | string | — |
timeout_ms | 3 | int64 | — |
WaitForMissionResponse
WaitForMissionResponse returns final mission result.
| Field | # | Type | Description |
|---|---|---|---|
result | 1 | MissionResult | — |
error | 2 | HarnessError | — |
WorkspaceCommitRequest
WorkspaceCommitRequest stages all changes and creates a commit.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
workspace_name | 2 | string | Empty workspace_name resolves to the primary workspace. |
message | 3 | string | message is the commit message. Required. |
WorkspaceCommitResponse
WorkspaceCommitResponse carries the new commit's SHA.
| Field | # | Type | Description |
|---|---|---|---|
commit_sha | 1 | string | — |
WorkspaceGetInfoRequest
WorkspaceGetInfoRequest fetches metadata for a single workspace.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
name | 2 | string | Empty name resolves to the mission's primary workspace (single-repository missions). |
WorkspaceGetInfoResponse
WorkspaceGetInfoResponse carries the requested workspace metadata.
| Field | # | Type | Description |
|---|---|---|---|
workspace | 1 | WorkspaceInfo | Absent on NOT_FOUND. |
WorkspaceInfo
WorkspaceInfo is the minimal name + path projection of a workspace.
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | name is the repository identifier from the mission's WorkspaceConfig. |
path | 2 | string | path is the absolute path to the workspace root on the daemon. Useful for log attribution; the callback agent does not access this path. |
WorkspaceListFilesRequest
WorkspaceListFilesRequest enumerates workspace files matching a glob.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
workspace_name | 2 | string | Empty workspace_name resolves to the primary workspace. |
pattern | 3 | string | pattern is a glob matched relative to the workspace root. Examples: ".go", "**/.py", "src/**/*.ts". |
WorkspaceListFilesResponse
WorkspaceListFilesResponse carries the matched paths, with a truncation flag when the result set exceeded the 10,000-path cap.
| Field | # | Type | Description |
|---|---|---|---|
paths | 1 | repeated string | — |
truncated | 2 | bool | truncated is true when the result was capped at 10,000 paths and more matches exist. Refine the pattern to drill in. |
WorkspaceListRequest
WorkspaceListRequest enumerates workspaces for the calling mission. The mission scope is derived from the request context (set by the SDK CallbackClient via contextInfo — same pattern as the memory RPCs).
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
WorkspaceListResponse
WorkspaceListResponse carries every workspace in the mission.
| Field | # | Type | Description |
|---|---|---|---|
workspaces | 1 | repeated WorkspaceInfo | — |
WorkspacePushRequest
WorkspacePushRequest pushes committed changes to the workspace's remote.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
workspace_name | 2 | string | Empty workspace_name resolves to the primary workspace. |
WorkspacePushResponse
WorkspacePushResponse is empty on success.
No fields.
WorkspaceReadFileRequest
WorkspaceReadFileRequest reads a file from a workspace.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
workspace_name | 2 | string | Empty workspace_name resolves to the primary workspace. |
path | 3 | string | Path is relative to the workspace root. |
WorkspaceReadFileResponse
WorkspaceReadFileResponse carries the file's full content.
| Field | # | Type | Description |
|---|---|---|---|
content | 1 | bytes | — |
WorkspaceWriteFileRequest
WorkspaceWriteFileRequest writes content to a file in a workspace.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
workspace_name | 2 | string | Empty workspace_name resolves to the primary workspace. |
path | 3 | string | Path is relative to the workspace root. |
content | 4 | bytes | Content is the new file body. RESOURCE_EXHAUSTED if > 16 MB. |
WorkspaceWriteFileResponse
WorkspaceWriteFileResponse is empty on success.
No fields.
WorldEntity
WorldEntity is one entity in the slice.
| Field | # | Type | Description |
|---|---|---|---|
handle | 1 | string | handle is the ONLY name the agent has for this entity: an opaque, server-minted, non-constructible reference, valid within the slice it was issued to and nowhere else. It carries no brain id an agent could iterate, so enumerating past the slice boundary is unrepresentable (ADR-0012). A handle stays stable across re-projections of the same slice: the entity it names does not change, so refreshing the view never invalidates a reference the agent is holding. |
kind | 2 | WorldEntityKind | — |
label | 3 | string | label is the entity's coordinate as observed — an address, an FQDN, a finding title. Human- and LLM-readable; not a reference (only handle is). |
attributes | 4 | map<string, string> | attributes is the projected detail, level-of-detail summarized for the unfocused slice and complete for a focused one. Keys are server-chosen. |
WorldViewRequest
WorldViewRequest asks for the caller's slice of the tenant World.
There is deliberately no tenant field and no scope field. The daemon reads both off the mission record it created, reached through the harness registered for (mission_id, agent_name); context is an address that selects which harness to consult, never an authority over what the slice contains. An agent therefore cannot express "another tenant's World" or "a wider scope" at all.
| Field | # | Type | Description |
|---|---|---|---|
context | 1 | ContextInfo | — |
focus | 2 | repeated string | focus narrows the response to entities the caller was already shown, by their handles, and returns those at full detail instead of the summary level the unfocused slice carries. A handle that was not issued to this caller is refused — focus can never widen a slice, only zoom into one. |
WorldViewResponse
WorldViewResponse carries the projected slice.
| Field | # | Type | Description |
|---|---|---|---|
error | 1 | HarnessError | — |
entities | 2 | repeated WorldEntity | — |
truncated | 3 | bool | truncated is true when the slice exceeded the projection cap and entities were dropped. The cap is a server-side budget, not something the caller can raise; a truncated slice is still a valid one. |
Enums
CredentialType
CredentialType represents the type of credential.
| Value | # | Description |
|---|---|---|
CREDENTIAL_TYPE_UNSPECIFIED | 0 | — |
CREDENTIAL_TYPE_API_KEY | 1 | — |
CREDENTIAL_TYPE_BEARER | 2 | — |
CREDENTIAL_TYPE_BASIC | 3 | — |
CREDENTIAL_TYPE_OAUTH | 4 | — |
CREDENTIAL_TYPE_CUSTOM | 5 | — |
MemoryTier
MemoryTier specifies which memory tier to use for an operation.
| Value | # | Description |
|---|---|---|
MEMORY_TIER_UNSPECIFIED | 0 | — |
MEMORY_TIER_WORKING | 1 | — |
MEMORY_TIER_MISSION | 2 | — |
MEMORY_TIER_LONG_TERM | 3 | — |
MissionStatus
MissionStatus represents the current state of a mission.
| Value | # | Description |
|---|---|---|
MISSION_STATUS_UNSPECIFIED | 0 | — |
MISSION_STATUS_PENDING | 1 | — |
MISSION_STATUS_RUNNING | 2 | — |
MISSION_STATUS_PAUSED | 3 | — |
MISSION_STATUS_COMPLETED | 4 | — |
MISSION_STATUS_FAILED | 5 | — |
MISSION_STATUS_CANCELLED | 6 | — |
RunScope
RunScope selects which mission runs GetRunFindings reads.
| Value | # | Description |
|---|---|---|
RUN_SCOPE_UNSPECIFIED | 0 | — |
RUN_SCOPE_PREVIOUS | 1 | RUN_SCOPE_PREVIOUS reads the run immediately before the current one. |
RUN_SCOPE_ALL | 2 | RUN_SCOPE_ALL reads every run of this mission. |
SpanKind
SpanKind represents the role of a span in a distributed trace.
| Value | # | Description |
|---|---|---|
SPAN_KIND_UNSPECIFIED | 0 | — |
SPAN_KIND_INTERNAL | 1 | — |
SPAN_KIND_SERVER | 2 | — |
SPAN_KIND_CLIENT | 3 | — |
SPAN_KIND_PRODUCER | 4 | — |
SPAN_KIND_CONSUMER | 5 | — |
StatusCode
StatusCode represents the status of a span.
| Value | # | Description |
|---|---|---|
STATUS_CODE_UNSPECIFIED | 0 | — |
STATUS_CODE_OK | 1 | — |
STATUS_CODE_ERROR | 2 | — |
WorldEntityKind
WorldEntityKind names what an entity in the slice is.
| Value | # | Description |
|---|---|---|
WORLD_ENTITY_KIND_UNSPECIFIED | 0 | — |
WORLD_ENTITY_KIND_HOST | 1 | — |
WORLD_ENTITY_KIND_DOMAIN | 2 | — |
WORLD_ENTITY_KIND_SUBDOMAIN | 3 | — |
WORLD_ENTITY_KIND_CREDENTIAL | 4 | — |
WORLD_ENTITY_KIND_ACCOUNT | 5 | — |
WORLD_ENTITY_KIND_FINDING | 6 | — |
Package gibson.identity.v1
Package gibson.identity.v1 — caller-side identity inspection.
IdentityService.WhoAmI is the canonical "what can I do?" RPC. Every authenticated principal may call it for themselves; tenant_admins may pass target_principal_id to inspect another agent in their tenant. The response carries the caller's effective FGA grants (component reads/writes/executes, plugin invocations) and any active capability grants.
Spec: component-bootstrap-e2e Requirement 10.
Services
IdentityService
IdentityService exposes the "describe me" RPC.
WhoAmI
WhoAmIRequest → WhoAmIResponse
WhoAmI returns the caller's effective FGA grants. When target_principal_id is set, the caller MUST be tenant_admin on the target's tenant — otherwise the daemon returns PermissionDenied. Identity is derived from ext-authz-emitted headers, never from the request body.
Messages
ComponentGrantEffective
ComponentGrantEffective describes the principal's per-action access to one component (FGA type "component"). The three booleans reflect the per-action FGA relations as composed by model.fga's deny-wins rules: each is true iff the principal can perform that action right now after all denies are subtracted.
| Field | # | Type | Description |
|---|---|---|---|
component_ref | 1 | string | component_ref is the FGA object identifier, e.g. "component:gitlab". |
can_read | 2 | bool | — |
can_configure | 3 | bool | — |
can_execute | 4 | bool | — |
sources | 5 | repeated GrantSource | sources enumerates how the principal got each granted action. For UI legibility — multiple sources may stack (direct grant plus tenant-member inheritance, etc.). |
GrantSource
GrantSource attributes a single grant to its origin in the FGA model. Used by the dashboard's Permissions tab to render inheritance and by gibson inspect to show the operator where a permission came from.
| Field | # | Type | Description |
|---|---|---|---|
kind | 1 | GrantSource.Kind | — |
source_object | 2 | string | source_object is the FGA object the inheritance flowed from (e.g. "tenant:zeroroot-ai", "team:red"). Empty for KIND_DIRECT. |
PluginGrantEffective
PluginGrantEffective describes the principal's invocation access to one plugin (FGA type "plugin", binary can_invoke).
| Field | # | Type | Description |
|---|---|---|---|
plugin_ref | 1 | string | — |
sources | 2 | repeated GrantSource | — |
WhoAmIRequest
WhoAmIRequest carries an optional target_principal_id for admin inspection. When empty, the caller's own identity (from ext-authz headers) is used.
| Field | # | Type | Description |
|---|---|---|---|
target_principal_id | 1 | string | target_principal_id is OPTIONAL. When set, the caller MUST be tenant_admin on the target's tenant. Format matches the FGA user form: "agent_principal:<uuid>" / "tool_principal:<uuid>" / "plugin_principal:<uuid>". |
WhoAmIResponse
WhoAmIResponse carries the principal's effective grants.
| Field | # | Type | Description |
|---|---|---|---|
principal_id | 1 | string | principal_id is the FGA principal identifier of the principal this response describes. |
kind | 2 | PrincipalKind | — |
name | 3 | string | name is the human-readable name the principal was registered with (e.g. "scanner-bot"). Used for display; not used for authz. |
tenant_id | 4 | string | tenant_id is the tenant the principal belongs to. |
component_grants | 5 | repeated ComponentGrantEffective | component_grants is one entry per component the principal can touch in any way (read, configure, or execute). Components the principal cannot touch are NOT included. |
plugin_grants | 6 | repeated PluginGrantEffective | plugin_grants is one entry per plugin the principal can invoke. For agent_principals this is empty by FGA model design (agents do not directly invoke plugins; tools do). |
active_capability_grants | 7 | repeated gibson.capability.v1.CapabilityGrantInfo | active_capability_grants is the principal's currently-issued CG-JWTs (mission-scoped) at the time of the call. Reuses the public CapabilityGrantInfo message from gibson.capability.v1 (extracted from gibson.admin.v1 in slice #108) rather than minting a parallel type. |
truncated | 8 | bool | truncated is true when the response had to drop entries to fit within the 1000-grant safety bound documented in component-bootstrap-e2e Requirement 10.4. Callers seeing this flag should treat the listing as incomplete and surface a UI warning. |
can_revoke_sessions | 9 | bool | can_revoke_sessions is a COARSE capability flag: true when the principal holds a tenant/team admin role that lets it revoke the sessions of at least some members (composed from self + tenant#admin-over-member + team#admin-over-member; see RevokeUserSessions / gibson#622). It exists so admin UIs (dashboard#717) can gate "revoke sessions" button visibility without a trial-and-error RPC. It is deliberately NOT per-target: the authoritative, per-(caller,target) decision is still made inside RevokeUserSessions, which fails closed for targets the caller may not revoke. A false value means "show no revoke UI"; a true value means "this principal can revoke someone — let the RPC enforce who." |
Enums
GrantSource.Kind
| Value | # | Description |
|---|---|---|
KIND_UNSPECIFIED | 0 | — |
KIND_DIRECT | 1 | KIND_DIRECT — tuple writes the principal directly. |
KIND_TENANT_MEMBER | 2 | KIND_TENANT_MEMBER — inherited via tenant#member. |
KIND_TEAM_MEMBER | 3 | KIND_TEAM_MEMBER — inherited via team#member. |
KIND_OWNER | 4 | KIND_OWNER — granted because the principal's tenant owns the component (admin-from-owner FGA path). |
PrincipalKind
PrincipalKind identifies the runtime kind of a Gibson principal.
Canonical home: this enum is the SDK-published source of truth. The daemon's local tenant_admin proto and the SDK's RecipientClass enum in gibson.admin.v1.grants are duplicates that pre-date the component-bootstrap-e2e consolidation; both should migrate to importing PrincipalKind from this package over time.
| Value | # | Description |
|---|---|---|
PRINCIPAL_KIND_UNSPECIFIED | 0 | — |
PRINCIPAL_KIND_AGENT | 1 | — |
PRINCIPAL_KIND_TOOL | 2 | — |
PRINCIPAL_KIND_PLUGIN | 3 | — |
Package gibson.manifest.v1
Messages
AgentContract
AgentContract describes an agent's LLM slot surface and declared tool/plugin dependencies. The daemon composes this from the agent's descriptor RPC at registration time.
| Field | # | Type | Description |
|---|---|---|---|
llm_slot_names | 1 | repeated string | — |
declared_tool_dependencies | 2 | repeated string | — |
declared_plugin_dependencies | 3 | repeated string | — |
CapabilityManifest
CapabilityManifest is the single, signed, versioned snapshot of every component, permission, cross-component rule, and runtime context that applies to the calling principal in their resolved tenant. Both SDKs (runtime) and the ADK (scaffold-time) consume this shape.
| Field | # | Type | Description |
|---|---|---|---|
manifest_id | 1 | string | — |
manifest_version | 2 | uint64 | — |
tenant_id | 3 | string | — |
subject | 4 | string | — |
issued_at | 5 | google.protobuf.Timestamp | — |
expires_at | 6 | google.protobuf.Timestamp | — |
ttl_seconds | 7 | uint32 | — |
tenant_context | 10 | TenantContext | — |
agents | 11 | repeated ComponentCapability | — |
tools | 12 | repeated ComponentCapability | — |
plugins | 13 | repeated ComponentCapability | — |
cross_component_rules | 20 | repeated CrossComponentRule | — |
cross_component_rules_truncated | 21 | bool | — |
limits | 30 | LimitsAndQuotas | — |
available_llm_slots | 31 | repeated string | — |
memory | 32 | MemoryPermissions | — |
signature | 200 | bytes | Signature payload (Ed25519 over body with signature/kid cleared). |
signing_key_id | 201 | string | — |
ComponentCapability
ComponentCapability is a single discoverable component (agent, tool, plugin) enriched with the permissions the subject holds against it, plus a typed contract describing how to invoke it.
Kind discriminator (component-bootstrap-e2e R12): the typed
principal_kind field is the canonical way to branch on
agent/tool/plugin. The legacy string kind = 2 is retained for
backward compatibility during the one-minor-release deprecation
window — readers SHOULD prefer principal_kind and SHOULD validate
that the populated contract oneof matches the kind.
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | — |
kind | 2 | string | DEPRECATED: prefer principal_kind. String-form kind for legacy consumers; one-minor-release deprecation window. |
component_ref | 3 | string | — |
version | 4 | string | — |
description | 5 | string | — |
is_system | 6 | bool | — |
owner_tenant | 7 | string | — |
permissions | 10 | repeated string | — |
agent_contract | 20 | AgentContract | — |
tool_contract | 21 | ToolContract | — |
plugin_contract | 22 | PluginContract | — |
liveness | 30 | ComponentLiveness | — |
principal_kind | 40 | gibson.identity.v1.PrincipalKind | principal_kind is the typed kind discriminator. Populated by the daemon at manifest-resolution time; set by the SDK loader when converting YAML manifests. Must agree with the populated contract oneof (PRINCIPAL_KIND_AGENT ↔ agent_contract, etc.) — mismatches are rejected by the daemon's RegisterPlugin / CreateAgentIdentity validators. Spec: component-bootstrap-e2e Requirement 12. |
oneof contract — one of: agent_contract, tool_contract, plugin_contract.
ComponentLiveness
ComponentLiveness is a snapshot of the component's runtime health at manifest issuance time. It is advisory only; the daemon remains the source of truth for live execution decisions.
| Field | # | Type | Description |
|---|---|---|---|
status | 1 | string | — |
last_heartbeat | 2 | google.protobuf.Timestamp | — |
instance_count | 3 | uint32 | — |
CrossComponentRule
CrossComponentRule expresses an explicit override on the default can_execute evaluation for a (source_component, target_component) pair. Only rules that override the default are emitted, keeping payload bounded.
| Field | # | Type | Description |
|---|---|---|---|
source_component_ref | 1 | string | — |
target_component_ref | 2 | string | — |
effect | 3 | CrossComponentRule.Effect | — |
reason | 4 | string | — |
GetCapabilityManifestRequest
GetCapabilityManifestRequest identifies the subject whose manifest is requested. agent_principal_id is only honored for tenant admins and enables scaffold-time impersonation previews.
| Field | # | Type | Description |
|---|---|---|---|
agent_principal_id | 1 | string | — |
GetCapabilityManifestResponse
GetCapabilityManifestResponse wraps the signed manifest. Wrapping keeps the RPC Buf-STANDARD compliant and leaves room for envelope metadata (e.g. server-side issuance metrics) to be added without breaking the wire format of the manifest body itself.
| Field | # | Type | Description |
|---|---|---|---|
manifest | 1 | CapabilityManifest | — |
LimitsAndQuotas
LimitsAndQuotas carries the tier-derived resource ceilings applied to the subject's session. max_spend_usd is a decimal string to avoid floating-point rounding at quota boundaries.
| Field | # | Type | Description |
|---|---|---|---|
max_tokens_per_call | 1 | uint64 | — |
max_tokens_per_session | 2 | uint64 | — |
rate_limit_per_minute | 3 | uint32 | — |
max_spend_usd | 4 | string | — |
ManifestInvalidationEvent
ManifestInvalidationEvent is delivered when the subject's manifest should be considered stale. HEARTBEAT events indicate the stream is alive; INVALIDATED events indicate a refresh is warranted.
| Field | # | Type | Description |
|---|---|---|---|
event_type | 1 | ManifestInvalidationEvent.EventType | — |
tenant_id | 2 | string | — |
reason | 3 | string | — |
new_manifest_version | 4 | uint64 | — |
emitted_at | 5 | google.protobuf.Timestamp | — |
MemoryPermissions
MemoryPermissions expresses per-tier memory access (e.g. "ro", "rw", "").
| Field | # | Type | Description |
|---|---|---|---|
working | 1 | string | — |
mission | 2 | string | — |
longterm | 3 | string | — |
PluginContract
PluginContract enumerates a plugin's callable methods with per-method schemas and per-method FGA-derived invocation permission.
| Field | # | Type | Description |
|---|---|---|---|
methods | 1 | repeated PluginMethod | — |
PluginMethod
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | — |
params_schema_json | 2 | string | — |
result_schema_json | 3 | string | — |
can_invoke | 4 | bool | — |
TenantContext
TenantContext surfaces the tenant identity and team memberships that gate the manifest's scope.
| Field | # | Type | Description |
|---|---|---|---|
tenant_id | 1 | string | — |
tenant_display_name | 2 | string | — |
team_memberships | 3 | repeated string | — |
is_admin | 4 | bool | — |
ToolContract
ToolContract describes the proto envelope a tool accepts and emits. input_schema_json and output_schema_json are derived from the FileDescriptor and rendered to JSON Schema for SDK/ADK consumption.
| Field | # | Type | Description |
|---|---|---|---|
input_proto_name | 1 | string | — |
output_proto_name | 2 | string | — |
input_schema_json | 3 | string | — |
output_schema_json | 4 | string | — |
idempotency | 5 | ToolIdempotency | see ToolIdempotency enum; UNSPECIFIED is treated as AT_LEAST_ONCE |
WatchManifestInvalidationsRequest
WatchManifestInvalidationsRequest opens a server-streaming channel emitting ManifestInvalidationEvent for the caller's resolved tenant.
No fields.
WatchManifestInvalidationsResponse
WatchManifestInvalidationsResponse wraps a single invalidation event so the RPC's streaming response type satisfies Buf STANDARD naming.
| Field | # | Type | Description |
|---|---|---|---|
event | 1 | ManifestInvalidationEvent | — |
Enums
CrossComponentRule.Effect
| Value | # | Description |
|---|---|---|
EFFECT_UNSPECIFIED | 0 | — |
EFFECT_ALLOW | 1 | — |
EFFECT_DENY | 2 | — |
ManifestInvalidationEvent.EventType
| Value | # | Description |
|---|---|---|
EVENT_TYPE_UNSPECIFIED | 0 | — |
EVENT_TYPE_HEARTBEAT | 1 | — |
EVENT_TYPE_INVALIDATED | 2 | — |
ToolIdempotency
ToolIdempotency declares the at-most-once / at-least-once / exactly-once delivery semantics a tool guarantees. Read by the resume-from-checkpoint logic: tools at AT_LEAST_ONCE are safely retried on resume; tools at AT_MOST_ONCE are skipped if their pre-checkpoint invocation status is ambiguous; tools at EXACTLY_ONCE require the orchestrator to consult the idempotency journal before re-issuing. UNSPECIFIED is treated as AT_LEAST_ONCE for backward compatibility.
Spec: mission-checkpointing R6.
| Value | # | Description |
|---|---|---|
TOOL_IDEMPOTENCY_UNSPECIFIED | 0 | — |
TOOL_IDEMPOTENCY_AT_MOST_ONCE | 1 | — |
TOOL_IDEMPOTENCY_AT_LEAST_ONCE | 2 | — |
TOOL_IDEMPOTENCY_EXACTLY_ONCE | 3 | — |
Package gibson.mission.v1
Schema evolution policy (mission-schema-canonicalization Requirement 7):
- NodeType, Language, BackoffStrategy, and any future enum values are append-only. Existing values are NEVER renumbered or removed.
- Deprecated values are marked
[deprecated = true]and accompanied by a// reservedcomment explaining the supersession. - MissionNode.config oneof variants are append-only with the same discipline; reuse of a tag number is forbidden.
- Adding a new node type or expression language requires the
controlled-extension contract defined in
mission-verb-noun-registry: a matching *NodeConfig message in the oneof, a registered handler in the daemon, and a conformance test exercising the new type end-to-end. CI enforces all four.
The proto under this package is the single source of truth for the
mission schema. The daemon, the gibson CLI (ADK), and the
dashboard all consume the generated bindings of this file.
Hand-written parallel representations are forbidden.
Messages
AgentNodeConfig
AgentNodeConfig contains configuration for agent nodes. AGENT = LLM-driven worker that calls tools and plugins on the author's behalf. The executor selects an agent component by name and dispatches the configured Task.
| Field | # | Type | Description |
|---|---|---|---|
agent_name | 1 | string | AgentName is the name of the agent to execute |
task | 2 | gibson.types.v1.Task | Task is the agent task configuration |
max_tokens_per_call | 3 | optional int32 | max_tokens_per_call is the per-node override of MissionConstraints.max_tokens_per_call for this agent node only. When present (non-nil), this value is used as the effective cap for all LLM calls made by this node, regardless of the mission-level MissionConstraints.max_tokens_per_call value. Setting this to 0 explicitly disables the cap for this node (the mission-level cap is NOT applied as a fallback when this field is explicitly set to 0). When absent (nil / proto3 optional not set), the mission-level MissionConstraints.max_tokens_per_call applies instead. 0 = inherit from mission-level (when this field is absent). Spec: mission-schema-canonicalization Requirement 5; gibson#133. |
llm_slots | 5 | repeated LLMSlotConfig | llm_slots pins LLM provider/model bindings per named slot for this agent node. Each entry maps a slot name to a specific provider+model. Multiple entries allow different slots to use different providers/models on the same node. Empty list → the node inherits the tenant's default provider for all slots. Absent slot entries fall through to tenant default + constraint search over the tenant's permitted providers. Empty provider or model within an entry is a valid fall-through marker: the daemon resolves it against the tenant's configured defaults. Precedence at resolution per slot: explicit binding in llm_slots > tenant default > constraint search over the tenant's permitted providers. Spec: sdk#260 (multi-slot LLM binding contract); consumer: gibson#524. |
ConditionNodeConfig
ConditionNodeConfig contains configuration for condition nodes
| Field | # | Type | Description |
|---|---|---|---|
expression | 1 | string | Expression to evaluate (e.g., "result.status == 'success'") |
true_branch | 2 | repeated string | TrueBranch contains node IDs to execute if condition is true |
false_branch | 3 | repeated string | FalseBranch contains node IDs to execute if condition is false |
language | 4 | Language | Language declares the expression language. Defaults to LANGUAGE_CEL; LANGUAGE_UNSPECIFIED is treated as CEL for backwards compatibility with pre-Language-field documents. |
DataPolicy
DataPolicy defines how data is handled for a node.
Deprecated: superseded by the ECS brain (gibson#851, ADR-0008). Data handling (reuse + scoping) is now implicit in the event-sourced World and scope-relative identity (ADR-0002) + ambient projection. Retained wire-compatibly; ignored by the engine.
| Field | # | Type | Description |
|---|---|---|---|
store_input | 1 | bool | StoreInput determines whether to store input data in GraphRAG |
store_output | 2 | bool | StoreOutput determines whether to store output data in GraphRAG |
retention | 3 | google.protobuf.Duration | Retention specifies how long to retain data (0 = forever) |
encryption | 4 | bool | Encryption determines whether data should be encrypted at rest |
access_control | 5 | repeated string | AccessControl specifies who can access this data |
JoinNodeConfig
JoinNodeConfig blocks until every node ID in wait_for has
completed (success or final failure), then merges their results
per strategy. JOIN is a first-class noun separable from
PARALLEL — a JOIN can merge results from non-parallel branches.
Spec: mission-verb-noun-registry Requirement 7.
| Field | # | Type | Description |
|---|---|---|---|
wait_for | 1 | repeated string | wait_for lists the upstream node IDs whose completion is required before this JOIN runs. Must be non-empty; submit-time validation rejects empty wait_for. |
strategy | 2 | MergeStrategy | strategy selects how upstream results are combined. |
aggregator | 3 | string | aggregator carries a CEL expression used when strategy is MERGE_STRATEGY_CUSTOM. The expression sees sources (a map from node ID to that node's result) and returns the merged value. Empty when strategy is not CUSTOM. |
LLMSlotConfig
LLMSlotConfig pins the provider/model for an agent node's LLM slot. It is a tenant-scoped reference: the provider name must be one the tenant has configured (gibson.tenant provider config); model is the provider's model id (empty = the provider's default model). Leave the whole message unset to inherit the tenant default.
| Field | # | Type | Description |
|---|---|---|---|
slot | 1 | string | slot is the slot name this binding targets. Empty defaults to "primary". |
provider | 2 | string | provider is the configured provider's name for the calling tenant. |
model | 3 | string | model is the model id; empty uses the provider's default model. |
MissionConstraints
MissionConstraints declares the operational limits baked into a mission definition. Making constraints part of the schema lets mission authors publish self-describing missions (e.g., "stop after 50 findings") without requiring callers to supply limits out-of-band at dispatch time.
Semantics (zero means unlimited):
- max_duration: 0 duration → no time limit
- max_tokens: 0 → no token budget
- max_cost: 0.0 → no cost ceiling
- max_findings: 0 → no finding count limit
Spec: sdk#47 (MissionConstraints proto promotion).
| Field | # | Type | Description |
|---|---|---|---|
max_duration | 1 | google.protobuf.Duration | max_duration is the wall-clock limit for the entire mission. Uses google.protobuf.Duration for sub-second precision. Absent or zero-value means no time limit. |
max_tokens | 2 | int64 | max_tokens is the cumulative LLM token budget across the entire mission (all agent nodes combined). The daemon accumulates usage on every LLM invocation and stops the mission when the budget is exceeded. 0 means unlimited. This is a mission-wide budget, not a per-call limit; use max_tokens_per_call to cap individual invocations. |
max_cost | 3 | double | max_cost is the cumulative LLM cost ceiling in USD across all agent nodes. 0.0 means unlimited. |
max_findings | 4 | int32 | max_findings is the maximum number of findings to collect before the mission stops. 0 means unlimited. |
severity_threshold | 5 | string | severity_threshold is the minimum severity level required to record a finding. Common values: "low", "medium", "high", "critical". Empty string means accept all severities. |
require_evidence | 6 | bool | require_evidence indicates whether all findings must include proof-of-concept evidence before being recorded. |
blocked_tools | 7 | repeated string | blocked_tools lists tool names that must not be invoked during this mission. The daemon enforces this at dispatch time. |
blocked_domains | 8 | repeated string | blocked_domains lists network domains (e.g., "prod.example.com") that agents must not contact. Enforcement is best-effort at the tool level. |
max_turns_per_agent | 9 | int32 | max_turns_per_agent caps the number of agent turns (Observe→Think→Act iterations) for any single agent node in the mission. 0 means unlimited. |
allowed_techniques | 10 | repeated string | allowed_techniques is the allowlist of attack technique IDs (taxonomy) that agents may use during the mission. Empty list means no allowlist (any technique may be used unless blocked). |
blocked_techniques | 11 | repeated string | blocked_techniques is the blocklist of attack technique IDs that agents must not use, regardless of allowed_techniques. Empty list means no blocklist. |
max_tokens_per_call | 12 | int32 | max_tokens_per_call is the per-invocation cap on LLM tokens for any single LLM call within this mission. Applied by the daemon before every provider call; the provider never sees more than this many output tokens. Precedence cascade (highest → lowest): 1. Per-node *NodeConfig.max_tokens_per_call (when set on a specific node) 2. This field (mission-level default) 3. 0 — no cap from this mechanism When a per-node override is set it completely supersedes this field for that node (including 0, which explicitly disables the cap for that node while this field may still apply to all other nodes). This field is different from max_tokens: max_tokens is a cumulative budget for the entire mission; max_tokens_per_call is a ceiling on each individual LLM call. 0 means unlimited at this level. Spec: mission-schema-canonicalization Requirement 5. Enforced by EffectivePerCallCap (wired in M4, gibson#133). |
MissionDefinition
MissionDefinition represents a mission template/definition. This is the shareable mission specification that can be created via the CreateMissionDefinition API and referenced by mission runs.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | ID is the unique identifier for this mission definition |
name | 2 | string | Name is a human-readable name for the mission |
description | 3 | string | Description provides additional context about what this mission does |
version | 4 | string | Version is the semantic version of the mission definition |
target_ref | 5 | string | TargetRef is a reference to the target (name or ID) This needs to be resolved to a TargetID when creating a mission instance |
nodes | 6 | map<string, MissionNode> | Nodes contains all the nodes in the mission, indexed by node ID |
edges | 7 | repeated MissionEdge | Edges contains all the directed edges connecting nodes in the mission |
entry_points | 8 | repeated string | EntryPoints contains the IDs of nodes that can serve as entry points to the mission These are nodes with no incoming edges |
exit_points | 9 | repeated string | ExitPoints contains the IDs of nodes that can serve as exit points from the mission These are nodes with no outgoing edges |
metadata | 10 | map<string, string> | Metadata contains additional custom metadata for the mission |
dependencies | 11 | MissionDependencies | Dependencies specifies required agents and tools for this mission |
source | 12 | string | Source is the git URL this mission was installed from (if applicable) |
installed_at | 13 | google.protobuf.Timestamp | InstalledAt is the timestamp when this mission was installed |
created_at | 14 | google.protobuf.Timestamp | CreatedAt is the timestamp when the mission definition was created |
workspace | 15 | WorkspaceConfig | Workspace configures repository cloning + workspace management for agents that need code access. Optional; missions without code interaction omit this field. Spec: mission-schema-canonicalization (mirror migration). |
constraints | 16 | optional MissionConstraints | Constraints declares mission-level operational limits. When present, these are the authoritative constraints for the mission DAG — they make the mission self-describing so authors do not have to supply limits out-of-band at dispatch time. The daemon merges these with any dispatch-time overrides (dispatch wins on conflict). Optional: absent means no constraints are baked into the definition. Spec: sdk#47 (MissionConstraints proto promotion). |
decider_slot | 17 | optional LLMSlotConfig | DeciderSlot names the mission-level LLM the brain's Decider runs on — the orchestration decision-maker, distinct from per-node agent slots (gibson#850). Only the provider+model are used (the slot name is implicitly "decider"). Absent means the brain uses the tenant's dashboard-default provider/model, so missions need not set it. |
MissionDependencies
MissionDependencies specifies required components for a mission
| Field | # | Type | Description |
|---|---|---|---|
agents | 1 | repeated string | Agents lists required agent components by name or URL |
tools | 2 | repeated string | Tools lists required tool components by name or URL |
plugins | 3 | repeated string | Plugins lists required plugin components by name or URL |
MissionEdge
MissionEdge represents a directed edge in the mission DAG
| Field | # | Type | Description |
|---|---|---|---|
from | 1 | string | From is the source node ID |
to | 2 | string | To is the destination node ID |
condition | 3 | string | Condition is an optional condition that must be satisfied for the edge to be traversed |
metadata | 4 | map<string, string> | Metadata contains additional metadata for the edge |
MissionNode
MissionNode represents a single node in a mission DAG
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | ID is the unique identifier for this node within the mission |
type | 2 | NodeType | Type is the node type |
name | 3 | string | Name is a human-readable name for the node |
description | 4 | string | Description provides additional context about this node |
agent_config | 5 | AgentNodeConfig | AgentConfig for agent nodes |
tool_config | 6 | ToolNodeConfig | ToolConfig for tool nodes |
plugin_config | 7 | PluginNodeConfig | PluginConfig for plugin nodes |
condition_config | 8 | ConditionNodeConfig | ConditionConfig for condition nodes |
parallel_config | 9 | ParallelNodeConfig | ParallelConfig for parallel nodes |
dependencies | 10 | repeated string | Dependencies lists node IDs that must complete before this node executes |
timeout | 11 | google.protobuf.Duration | Timeout is the maximum execution time for this node |
retry_policy | 12 | RetryPolicy | RetryPolicy defines retry behavior for this node |
data_policy | 13 | DataPolicy | DataPolicy defines data handling policy for this node. Deprecated: data reuse + scoping are no longer node-declared. Under the ECS brain (gibson#851, ADR-0008) reuse is implicit in the event-sourced World and scoping flows from scope-relative identity (ADR-0002) + ambient projection. The field is retained wire-compatibly for old definitions but is ignored by the engine. |
metadata | 14 | map<string, string> | Metadata contains additional custom metadata for this node |
join_config | 15 | JoinNodeConfig | JoinConfig for join nodes (mission-verb-noun-registry). Field number 15 because 10-14 are sibling MissionNode fields (dependencies, timeout, retry_policy, data_policy, metadata). |
reuse_policy | 16 | ReusePolicy | ReusePolicy declares how this node's I/O is scoped + reused across mission runs. Deprecated: superseded by the ECS brain (gibson#851, ADR-0008). Reuse is implicit in the World; scoping is via scope-relative identity (ADR-0002) + ambient projection. Retained wire-compatibly but ignored by the engine. |
oneof config — one of: agent_config, tool_config, plugin_config, condition_config, parallel_config, join_config.
ParallelNodeConfig
ParallelNodeConfig contains configuration for parallel nodes. PARALLEL fans out to its sub-nodes concurrently, capped by max_concurrency. Sibling failures are isolated (one failing sub-node does not cancel its siblings). Spec: mission-verb-noun-registry Requirement 6.
| Field | # | Type | Description |
|---|---|---|---|
sub_nodes | 1 | repeated MissionNode | SubNodes contains the nodes to execute in parallel |
max_concurrency | 2 | int32 | MaxConcurrency limits the number of concurrent executions (0 = unlimited) |
PluginNodeConfig
PluginNodeConfig contains configuration for plugin nodes.
PLUGIN = multi-method provider keyed by plugin_name + method.
Distinct from TOOL: a plugin advertises several callable methods
behind one component identity. The executor selects the named
method and dispatches params as the call payload.
| Field | # | Type | Description |
|---|---|---|---|
plugin_name | 1 | string | PluginName is the name of the plugin to query |
method | 2 | string | Method is the plugin method to call |
params | 3 | map<string, string> | Params contains the method parameters |
max_tokens_per_call | 4 | optional int32 | max_tokens_per_call is the per-node override of MissionConstraints.max_tokens_per_call for this plugin node only. Follows the same semantics as AgentNodeConfig.max_tokens_per_call: present and non-zero caps the call; present and 0 disables the cap for this node; absent means fall through to the mission-level constraint. Spec: mission-schema-canonicalization Requirement 5; gibson#133. |
RepositoryConfig
RepositoryConfig defines a single repository to clone. Maps directly to the SDK's workspace.RepositoryConfig type.
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | Name is the unique identifier for this repository within the mission. Required. |
url | 2 | string | URL is the Git repository URL (HTTPS or SSH). Required. |
branch | 3 | string | Branch is the Git branch to checkout after cloning. Defaults to the repository's default branch when empty. |
credential_name | 4 | string | CredentialName references a credential in the credential store. Optional — public repos don't need credentials. |
shallow | 5 | bool | Shallow enables git clone --depth 1. |
depends_on | 6 | repeated string | DependsOn lists repository names that must clone first. Enables topological ordering for multi-repo missions. |
RetryPolicy
RetryPolicy defines the retry behavior for a mission node
| Field | # | Type | Description |
|---|---|---|---|
max_retries | 1 | int32 | MaxRetries is the maximum number of retry attempts |
backoff_strategy | 2 | BackoffStrategy | BackoffStrategy determines how delays are calculated between retries |
initial_delay | 3 | google.protobuf.Duration | InitialDelay is the delay before the first retry attempt |
max_delay | 4 | google.protobuf.Duration | MaxDelay is the maximum delay between retry attempts (used for exponential backoff) |
multiplier | 5 | double | Multiplier is the factor by which the delay increases (used for exponential backoff) |
ReusePolicy
ReusePolicy declares how a node's I/O is scoped + reused across mission runs.
Deprecated: superseded by the ECS brain (gibson#851, ADR-0008). Reuse is implicit in the event-sourced World and scoping flows from scope-relative identity (ADR-0002) + ambient projection, so node-declared reuse/scoping no longer has meaning. Retained wire-compatibly; ignored by the engine.
| Field | # | Type | Description |
|---|---|---|---|
output_scope | 1 | string | OutputScope: "mission_run" | "mission" | "global". Default: "mission". |
input_scope | 2 | string | InputScope: "mission_run" | "mission" | "global". Default: "mission". |
reuse | 3 | string | Reuse: "skip" | "rerun" | "merge". Controls behavior when an existing output is found in scope. Default: "rerun". |
ToolNodeConfig
ToolNodeConfig contains configuration for tool nodes. TOOL = single-purpose named function with a typed input map. The executor invokes the named tool through the tool worker queue and returns the tool's output as the node result.
| Field | # | Type | Description |
|---|---|---|---|
tool_name | 1 | string | ToolName is the name of the tool to execute |
input | 2 | map<string, string> | Input contains the tool input parameters |
max_tokens_per_call | 3 | optional int32 | max_tokens_per_call is the per-node override of MissionConstraints.max_tokens_per_call for this tool node only. Follows the same semantics as AgentNodeConfig.max_tokens_per_call: present and non-zero caps the call; present and 0 disables the cap for this node; absent means fall through to the mission-level constraint. Spec: mission-schema-canonicalization Requirement 5; gibson#133. |
WorkspaceConfig
WorkspaceConfig configures repository cloning + workspace management for missions whose agents need to interact with code. The daemon's workspace manager honors this at mission start (initializeWorkspaces).
Spec: mission-schema-canonicalization (mirror migration — lifts mission.WorkspaceConfig from the daemon's hand-written mirror into the canonical proto schema).
| Field | # | Type | Description |
|---|---|---|---|
repositories | 1 | repeated RepositoryConfig | Repositories to clone for this mission. Each entry becomes a workspace addressable from agents via harness.Workspace(name). |
settings | 2 | WorkspaceSettings | Settings carries workspace-wide knobs (cleanup, LSP, isolation). |
WorkspaceSettings
WorkspaceSettings carries workspace-wide options.
| Field | # | Type | Description |
|---|---|---|---|
cleanup_on_complete | 1 | bool | CleanupOnComplete deletes workspace directories after the mission ends. Defaults to true at the daemon when unset (cleanup is the safe default). |
use_worktrees | 2 | bool | UseWorktrees enables Git worktrees for per-agent isolation — concurrent modifications without conflicts. |
lsp_enabled | 3 | bool | LSPEnabled starts language servers for code validation. |
lsp_timeout | 4 | google.protobuf.Duration | LSPTimeout caps LSP validation duration. Encoded as a protobuf Duration to preserve sub-second precision. |
base_directory | 5 | string | BaseDirectory is the workspace clone root. When empty the daemon uses a temp directory. |
Enums
BackoffStrategy
BackoffStrategy defines the strategy for calculating retry delays
| Value | # | Description |
|---|---|---|
BACKOFF_STRATEGY_UNSPECIFIED | 0 | Sentinel value - must be first |
BACKOFF_STRATEGY_CONSTANT | 1 | Constant returns a constant delay for all retry attempts |
BACKOFF_STRATEGY_LINEAR | 2 | Linear increases the delay linearly with each retry attempt |
BACKOFF_STRATEGY_EXPONENTIAL | 3 | Exponential increases the delay exponentially with each retry attempt |
Language
Language declares the expression language used by mission constructs that evaluate string expressions (currently only ConditionNodeConfig).
Spec: mission-schema-canonicalization Requirement 4. CEL is the only language supported in v1; LANGUAGE_UNSPECIFIED is treated as LANGUAGE_CEL for backwards compatibility with documents authored before this enum existed.
| Value | # | Description |
|---|---|---|
LANGUAGE_UNSPECIFIED | 0 | Sentinel value - treated as LANGUAGE_CEL by the daemon. |
LANGUAGE_CEL | 1 | Common Expression Language (cel-spec.dev). The default. |
MergeStrategy
MergeStrategy declares how a JoinNodeConfig combines results
from its wait_for upstream sources.
Spec: mission-verb-noun-registry Requirement 7.
| Value | # | Description |
|---|---|---|
MERGE_STRATEGY_UNSPECIFIED | 0 | Sentinel - must be first. |
MERGE_STRATEGY_CONCAT | 1 | CONCAT preserves source order in the merged output. |
MERGE_STRATEGY_REDUCE | 2 | REDUCE applies a built-in reducer (semantics defined in the CONDITION/JOIN executor design). |
MERGE_STRATEGY_FIRST | 3 | FIRST returns the first source to complete. |
MERGE_STRATEGY_LAST | 4 | LAST returns the last source to complete. |
MERGE_STRATEGY_CUSTOM | 5 | CUSTOM evaluates the JoinNodeConfig.aggregator CEL expression against the source results. |
NodeType
NodeType defines the type of mission node
| Value | # | Description |
|---|---|---|
NODE_TYPE_UNSPECIFIED | 0 | Sentinel value - must be first |
NODE_TYPE_AGENT | 1 | Agent node executes an agent |
NODE_TYPE_TOOL | 2 | Tool node executes a tool |
NODE_TYPE_PLUGIN | 3 | Plugin node calls a named method on a multi-method plugin component. |
NODE_TYPE_CONDITION | 4 | Condition node performs conditional branching |
NODE_TYPE_PARALLEL | 5 | Parallel node executes sub-nodes in parallel |
NODE_TYPE_JOIN | 6 | Join node waits for multiple branches to complete |
Package gibson.plugin.v1
Services
PluginInvokeService
PluginInvokeService is the tool-callable RPC for invoking plugin methods. Tools call PluginInvoke; the daemon validates authz, looks up an active plugin install, enqueues a work item via the existing ComponentService PollWork model, awaits SubmitResult, and forwards the result to the tool. Plugin business methods themselves are NOT defined here — the plugin's manifest declares its own method set per the plugin-runtime manifest spec, and the dispatch is by method-name string carried in PluginInvokeRequest.
PluginInvoke
PluginInvokeRequest → PluginInvokeResponse
PluginInvoke routes a typed invocation to a serving plugin install.
Messages
PluginError
| Field | # | Type | Description |
|---|---|---|---|
kind | 1 | PluginError.Kind | — |
message | 2 | string | message is human-readable. NEVER includes resolved secret values. |
PluginInvokeRequest
| Field | # | Type | Description |
|---|---|---|---|
plugin_name | 1 | string | plugin_name is the manifest.metadata.name of the target plugin. |
method | 2 | string | method is the name of the plugin method to invoke. Must match one of the plugin's declared methods in its manifest. |
request | 3 | google.protobuf.Any | request carries the typed request payload as a google.protobuf.Any. The plugin SDK unmarshals using the proto descriptor set the plugin uploaded at registration time. |
deadline_ms | 4 | int64 | deadline_ms is the maximum time in milliseconds the daemon should wait for the plugin to claim and submit. Capped at 60000 (60s) by the daemon. |
PluginInvokeResponse
| Field | # | Type | Description |
|---|---|---|---|
result | 1 | google.protobuf.Any | result carries the typed response payload, populated on success. Empty on error. |
error | 2 | PluginError | error is populated when the plugin returned an error or the dispatch failed. |
Enums
PluginError.Kind
| Value | # | Description |
|---|---|---|
PLUGIN_ERROR_KIND_UNSPECIFIED | 0 | — |
PLUGIN_ERROR_KIND_UNAVAILABLE | 1 | PLUGIN_ERROR_KIND_UNAVAILABLE: no serving install or all installs unreachable. |
PLUGIN_ERROR_KIND_UNAUTHORIZED | 2 | PLUGIN_ERROR_KIND_UNAUTHORIZED: FGA deny — defense in depth (ext-authz already denied at edge). |
PLUGIN_ERROR_KIND_METHOD_NOT_FOUND | 3 | PLUGIN_ERROR_KIND_METHOD_NOT_FOUND: method not in the plugin's declared methods. |
PLUGIN_ERROR_KIND_DEADLINE_EXCEEDED | 4 | PLUGIN_ERROR_KIND_DEADLINE_EXCEEDED: plugin did not return within deadline_ms. |
PLUGIN_ERROR_KIND_HANDLER_FAILED | 5 | PLUGIN_ERROR_KIND_HANDLER_FAILED: plugin handler returned a non-nil error. |
PLUGIN_ERROR_KIND_INTERNAL | 6 | PLUGIN_ERROR_KIND_INTERNAL: server-side error. |
Package gibson.pluginadmin.v1
Package gibson.pluginadmin.v1 — PluginAdminService: customer-callable plugin registration / install-management surface and the developer plugin-publish dev-loop. Re-homed out of gibson.tenant.v1 into its own wire package so it can stay in the OSS SDK while the nine tenant-administration services move to the gibson platform protos under the unchanged gibson.tenant.v1 package — keeping both in one package would link two generated Go homes for gibson.tenant.v1 into the daemon (proto: duplicate registration). See ADR-0058 (amended 2026-06-22).
Authorization: every RPC carries a (gibson.auth.v1.authz) annotation.
Services
PluginAdminService
PluginAdminService manages plugin installs and their secret bindings.
EditPluginSecretBinding
EditPluginSecretBindingRequest → EditPluginSecretBindingResponse
EditPluginSecretBinding modifies an existing binding (rebind to a different existing secret). Used by the plugin detail page's bindings table.
GetPluginInstall
GetPluginInstallRequest → GetPluginInstallResponse
GetPluginInstall returns one install by ID.
ListPluginInstalls
ListPluginInstallsRequest → ListPluginInstallsResponse
ListPluginInstalls returns all plugin installs for the tenant.
RegisterPlugin
RegisterPluginRequest → RegisterPluginResponse
RegisterPlugin atomically registers a plugin per Spec 2 R3.1: validates manifest, creates the Zitadel plugin_principal SA, writes per-binding FGA can_resolve tuples (creating any inline secrets in the broker), returns the bootstrap token. Any partial failure rolls back all created state.
RevokePluginSecretBinding
RevokePluginSecretBindingRequest → RevokePluginSecretBindingResponse
RevokePluginSecretBinding removes an FGA can_resolve tuple between the plugin and a secret. Emits a secret_access_revoked audit event.
Messages
EditPluginSecretBindingRequest
| Field | # | Type | Description |
|---|---|---|---|
install_id | 1 | string | — |
declared_name | 2 | string | — |
new_existing_ref | 3 | string | — |
EditPluginSecretBindingResponse
No fields.
GetPluginInstallRequest
| Field | # | Type | Description |
|---|---|---|---|
install_id | 1 | string | — |
GetPluginInstallResponse
| Field | # | Type | Description |
|---|---|---|---|
install | 1 | PluginInstallSummary | — |
ListPluginInstallsRequest
| Field | # | Type | Description |
|---|---|---|---|
name_filter | 1 | string | — |
status_filter | 2 | PluginInstallStatus | — |
limit | 3 | int32 | — |
offset | 4 | int32 | — |
ListPluginInstallsResponse
| Field | # | Type | Description |
|---|---|---|---|
installs | 1 | repeated PluginInstallSummary | — |
total | 2 | int32 | — |
PluginInstallSummary
PluginInstallSummary is the wire-shape returned by ListPluginInstalls and GetPluginInstall.
| Field | # | Type | Description |
|---|---|---|---|
install_id | 1 | string | — |
name | 2 | string | — |
version | 3 | string | — |
declared_methods | 4 | repeated string | — |
runtime_mode | 5 | string | — |
setec_required | 6 | bool | — |
host_id | 7 | string | — |
status | 8 | PluginInstallStatus | — |
address | 9 | string | — |
last_heartbeat_at_unix | 10 | int64 | — |
created_at_unix | 11 | int64 | — |
bound_secret_refs | 12 | repeated string | — |
PluginManifestValidationError
PluginManifestValidationError carries one structured manifest error.
| Field | # | Type | Description |
|---|---|---|---|
field | 1 | string | field is the dotted JSONPath into the manifest. |
line | 2 | int32 | — |
code | 3 | string | — |
message | 4 | string | — |
PluginSecretBinding
PluginSecretBinding describes one secret binding in a RegisterPlugin request.
| Field | # | Type | Description |
|---|---|---|---|
declared_name | 1 | string | declared_name is the name as declared in the plugin manifest's spec.secrets[] entry. |
mode | 2 | string | mode is one of: "existing" (bind to existing secret) or "create" (create new secret inline). |
existing_ref | 3 | string | existing_ref is the broker-namespaced name of an already-stored secret to bind to. Set when mode = "existing". |
create_value | 4 | bytes | create_value is the plaintext bytes to store under declared_name when mode = "create". TLS in transit; never logged. |
RegisterPluginRequest
| Field | # | Type | Description |
|---|---|---|---|
manifest_yaml | 1 | bytes | manifest_yaml is the plugin manifest YAML bytes. |
bindings | 2 | repeated PluginSecretBinding | — |
dry_run | 3 | bool | dry_run, when true, validates manifest + bindings without creating any state. |
remote | 4 | bool | remote, when true, registers an MCP connector for execution in the customer's own network instead of a gibson-hosted setec sandbox (ADR-0048 remote-deployment path). The daemon skips the hosted launch and the response carries the one-time bootstrap_token; the customer runs the MCP-bridge themselves and the bridge redeems the token to enroll. Only valid for connector manifests (connector.gibson.zeroroot.ai/v1): plain plugins are always customer-run and already receive the token. |
RegisterPluginResponse
| Field | # | Type | Description |
|---|---|---|---|
install_id | 1 | string | — |
plugin_principal_id | 2 | string | — |
bootstrap_token | 3 | string | bootstrap_token is the single-use enrollment token. Empty when dry_run. |
bootstrap_token_expires_at_unix | 4 | int64 | — |
validation_errors | 5 | repeated PluginManifestValidationError | — |
RevokePluginSecretBindingRequest
| Field | # | Type | Description |
|---|---|---|---|
install_id | 1 | string | — |
declared_name | 2 | string | — |
RevokePluginSecretBindingResponse
No fields.
Enums
PluginInstallStatus
PluginInstallStatus mirrors the daemon's transient runtime status for a plugin install. The dashboard renders this as a badge on the plugin detail page.
| Value | # | Description |
|---|---|---|
PLUGIN_INSTALL_STATUS_UNSPECIFIED | 0 | — |
PLUGIN_INSTALL_STATUS_SERVING | 1 | PLUGIN_INSTALL_STATUS_SERVING: install heartbeated within TTL and is accepting work. |
PLUGIN_INSTALL_STATUS_UNREACHABLE | 2 | PLUGIN_INSTALL_STATUS_UNREACHABLE: install has not heartbeated within 90 seconds; not eligible for dispatch. |
PLUGIN_INSTALL_STATUS_DEGRADED | 3 | PLUGIN_INSTALL_STATUS_DEGRADED: install heartbeats but reports errors on its method invocations. |
Package gibson.target.v1
gibson.target.v1 is the customer-facing target contract. A Target is a system to be assessed by a mission. The id (UUID) is the canonical identity; every other field is metadata. Nothing resolves targets by name — clients reference a target solely by its server-minted UUID.
This package mirrors the daemon's types.Target / types.TargetFilter storage
shape. The daemon, the gibson CLI (ADK), and the dashboard all consume the
generated bindings of this file; hand-written parallel representations are
forbidden.
Schema evolution policy: message field numbers are append-only — no renumbers, no reuse. Type-of-field changes are breaking and require a ship sequence across the SDK and every consumer.
Messages
Target
Target represents a system to be assessed by a mission.
id is the canonical UUID identity, assigned by the daemon on CreateTarget;
clients never invent it. name and all remaining fields are metadata. Two
targets may share a name — only the UUID is unique.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | id is the server-minted UUID. Empty on a CreateTarget request (ignored if set); always populated on responses. |
name | 2 | string | name is a human-readable label (metadata only, not an identifier). |
type | 3 | string | type is the schema-based target type. |
provider | 4 | string | provider identifies the backing provider for model/provider targets. |
connection | 5 | google.protobuf.Struct | connection holds schema-based connection parameters (e.g. url, headers). |
model | 6 | string | model is the model identifier for model targets. |
config | 7 | google.protobuf.Struct | config holds free-form target configuration. |
capabilities | 8 | repeated string | capabilities lists capability tags advertised by the target. |
auth_type | 9 | string | auth_type is the authentication scheme for the target. |
credential_id | 10 | string | credential_id references a stored credential. Empty when none. |
status | 11 | string | status is the target lifecycle status. |
description | 12 | string | description is free-text describing the target. |
tags | 13 | repeated string | tags are user-assigned labels for filtering/organization. |
timeout | 14 | int32 | timeout is the per-operation timeout in seconds. |
created_at | 15 | google.protobuf.Timestamp | created_at is when the target was registered. |
updated_at | 16 | google.protobuf.Timestamp | updated_at is when the target was last modified. |
url | 17 | string | url is the target endpoint. Deprecated: prefer connection["url"]. |
headers | 18 | map<string, string> | headers are default HTTP headers. Deprecated: prefer connection["headers"]. |
TargetFilter
TargetFilter narrows ListTargets results. Mirrors types.TargetFilter. All fields are optional; an empty filter returns the tenant's targets.
| Field | # | Type | Description |
|---|---|---|---|
provider | 1 | string | provider filters by backing provider. |
type | 2 | string | type filters by schema-based target type. |
status | 3 | string | status filters by lifecycle status. |
tags | 4 | repeated string | tags filters to targets carrying all of the given tags. |
limit | 5 | int32 | limit caps the number of results. Zero means the server default. |
offset | 6 | int32 | offset skips the first N results for pagination. |
Package gibson.tool.v1
Package gibson.tool.v1 also exposes the MessageOptions extension
is_tool_response so proto authors can mark a message as a tool
response container. Today this annotation is consumed by the SDK's
field-100 contract test (see graphrag/field_100_contract_test.go) to
scope its assertion to messages that actually need to honour the
gibson.graphrag.v1.DiscoveryResult slot at field 100.
Spec: tdd-coverage-gibson-sdk (Epic #6) — replaces the previous "scan every gibson.* message" filter.
Services
ToolService
Execute
ExecuteRequest → ExecuteResponse
GetDescriptor
GetDescriptorRequest → GetDescriptorResponse
Health
HealthRequest → HealthResponse
StreamExecute
stream StreamExecuteRequest → stream StreamExecuteResponse
Messages
ExecuteRequest
| Field | # | Type | Description |
|---|---|---|---|
input_json | 1 | string | — |
timeout_ms | 2 | int64 | — |
ExecuteResponse
| Field | # | Type | Description |
|---|---|---|---|
output_json | 1 | string | — |
error | 2 | gibson.common.v1.Error | — |
GetDescriptorRequest
No fields.
GetDescriptorResponse
| Field | # | Type | Description |
|---|---|---|---|
name | 1 | string | — |
description | 2 | string | — |
version | 3 | string | — |
tags | 4 | repeated string | — |
input_schema | 5 | gibson.common.v1.JSONSchema | — |
output_schema | 6 | gibson.common.v1.JSONSchema | — |
HealthRequest
No fields.
HealthResponse
| Field | # | Type | Description |
|---|---|---|---|
status | 1 | gibson.common.v1.HealthStatus | — |
StreamExecuteRequest
Client -> Tool messages for streaming
| Field | # | Type | Description |
|---|---|---|---|
start | 1 | ToolStartRequest | — |
cancel | 2 | ToolCancelRequest | — |
oneof payload — one of: start, cancel.
StreamExecuteResponse
Tool -> Client messages for streaming
| Field | # | Type | Description |
|---|---|---|---|
progress | 1 | ToolProgress | — |
partial | 2 | ToolPartialResult | — |
warning | 3 | ToolWarning | — |
complete | 4 | ToolComplete | — |
error | 5 | ToolError | — |
trace_id | 10 | string | — |
span_id | 11 | string | — |
sequence | 12 | int64 | — |
timestamp_ms | 13 | int64 | — |
oneof payload — one of: progress, partial, warning, complete, error.
ToolCancelRequest
| Field | # | Type | Description |
|---|---|---|---|
reason | 1 | string | — |
ToolComplete
| Field | # | Type | Description |
|---|---|---|---|
output_json | 1 | string | Final JSON-encoded output matching the tool's output schema |
ToolError
| Field | # | Type | Description |
|---|---|---|---|
error | 1 | gibson.common.v1.Error | — |
fatal | 2 | bool | Whether this error is recoverable |
ToolPartialResult
| Field | # | Type | Description |
|---|---|---|---|
output_json | 1 | string | JSON-encoded partial output matching the tool's output schema |
description | 2 | string | Optional description of this partial result |
ToolProgress
| Field | # | Type | Description |
|---|---|---|---|
percent | 1 | int32 | Progress percentage (0-100) |
stage | 2 | string | Current stage description |
message | 3 | string | Human-readable status message |
ToolStartRequest
| Field | # | Type | Description |
|---|---|---|---|
input_json | 1 | string | — |
timeout_ms | 2 | int64 | — |
trace_id | 3 | string | Trace ID for distributed tracing (propagated from agent/orchestrator). |
parent_span_id | 4 | string | Parent span ID for distributed tracing (propagated from agent/orchestrator). |
ToolWarning
| Field | # | Type | Description |
|---|---|---|---|
message | 1 | string | Warning message |
code | 2 | string | Optional warning code |
Package gibson.types.v1
Messages
ComplianceMapping
ComplianceMapping links a Finding to a compliance framework control. See core/sdk/finding/compliance_mapping.go for the author-side Go type.
| Field | # | Type | Description |
|---|---|---|---|
framework | 1 | string | Compliance framework identifier (e.g. SOC2, NIST_AI_RMF, MITRE_ATLAS, MITRE_ATTACK, PLATFORM). |
control_id | 2 | string | Control identifier within the framework. |
rationale | 3 | string | Optional human-readable rationale. |
evidence_ref | 4 | string | Optional pointer to supporting evidence. |
Evidence
Evidence represents supporting evidence for a finding.
| Field | # | Type | Description |
|---|---|---|---|
title | 1 | string | — |
type | 2 | EvidenceType | — |
content | 3 | string | — |
metadata | 4 | map<string, string> | — |
Finding
Finding represents a security vulnerability or issue discovered during testing.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
mission_id | 2 | string | — |
agent_name | 3 | string | — |
delegated_from | 4 | string | — |
title | 5 | string | — |
description | 6 | string | — |
category | 7 | string | — |
subcategory | 8 | string | — |
severity | 9 | FindingSeverity | — |
confidence | 10 | double | — |
status | 11 | FindingStatus | — |
mitre_attack | 12 | MitreMapping | — |
mitre_atlas | 13 | MitreMapping | — |
evidence | 14 | repeated Evidence | — |
reproduction | 15 | repeated ReproStep | — |
cvss_score | 16 | double | — |
risk_score | 17 | double | — |
remediation | 18 | string | — |
references | 19 | repeated string | — |
target_id | 20 | string | — |
technique | 21 | string | — |
tags | 22 | repeated string | — |
created_at | 23 | int64 | — |
updated_at | 24 | int64 | — |
compliance_mappings | 25 | repeated ComplianceMapping | Compliance framework mappings — added by audit-finding-compliance-mappings. Links the finding to specific control IDs in compliance frameworks (SOC2, NIST AI RMF, MITRE ATLAS, MITRE ATT&CK). Multiple entries per framework allowed; downstream exporters (SARIF) surface them. |
GraphQuery
GraphQuery represents a query against the knowledge graph.
| Field | # | Type | Description |
|---|---|---|---|
text | 1 | string | — |
embedding | 2 | repeated float | — |
top_k | 3 | int32 | — |
node_types | 4 | repeated string | — |
min_score | 5 | double | — |
max_score | 6 | double | — |
mission_id | 7 | string | — |
mission_run_id | 8 | string | — |
scope | 9 | QueryScope | — |
filters | 10 | map<string, string> | — |
vector_weight | 11 | double | Weights for hybrid scoring (must sum to 1.0) |
graph_weight | 12 | double | — |
MissionRunSummary
MissionRunSummary describes one run of a mission.
Returned by the GetMissionRunHistory knowledge read. An agent lists the runs, then pulls findings for a previous one with GetRunFindings — the two are consumed together, which is why run history sits with the knowledge reads and not with mission lifecycle control.
| Field | # | Type | Description |
|---|---|---|---|
mission_id | 1 | string | — |
run_number | 2 | int32 | run_number is sequential from 1. |
status | 3 | string | status is the final status of this run. |
findings_count | 4 | int32 | — |
created_at | 5 | int64 | — |
completed_at | 6 | int64 | completed_at is 0 while the run is still in flight. |
MitreMapping
MitreMapping represents a mapping to MITRE ATT&CK or ATLAS framework.
| Field | # | Type | Description |
|---|---|---|---|
matrix | 1 | string | — |
tactic_id | 2 | string | — |
tactic_name | 3 | string | — |
technique_id | 4 | string | — |
technique_name | 5 | string | — |
sub_techniques | 6 | repeated string | — |
ReproStep
ReproStep represents a step in reproducing a finding.
| Field | # | Type | Description |
|---|---|---|---|
order | 1 | int32 | — |
description | 2 | string | — |
input | 3 | string | — |
output | 4 | string | — |
Result
Result represents the outcome of a task execution.
| Field | # | Type | Description |
|---|---|---|---|
status | 1 | ResultStatus | — |
output | 2 | gibson.common.v1.TypedValue | — |
finding_ids | 3 | repeated string | — |
metadata | 4 | map<string, gibson.common.v1.TypedValue> | — |
error | 5 | ResultError | — |
ResultError
ResultError represents a structured error with retry information.
| Field | # | Type | Description |
|---|---|---|---|
code | 1 | gibson.common.v1.ErrorCode | — |
message | 2 | string | — |
details | 3 | map<string, string> | — |
retryable | 4 | bool | — |
Task
Task represents a goal-oriented task with context and constraints.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
goal | 2 | string | — |
context | 3 | map<string, gibson.common.v1.TypedValue> | — |
constraints | 4 | TaskConstraints | — |
metadata | 5 | map<string, gibson.common.v1.TypedValue> | — |
TaskConstraints
TaskConstraints represents execution constraints for a task.
| Field | # | Type | Description |
|---|---|---|---|
max_turns | 1 | int32 | — |
max_tokens | 2 | int32 | — |
allowed_tools | 3 | repeated string | — |
blocked_tools | 4 | repeated string | — |
Enums
EvidenceType
EvidenceType represents the type of evidence collected.
| Value | # | Description |
|---|---|---|
EVIDENCE_TYPE_UNSPECIFIED | 0 | — |
EVIDENCE_TYPE_REQUEST | 1 | — |
EVIDENCE_TYPE_RESPONSE | 2 | — |
EVIDENCE_TYPE_SCREENSHOT | 3 | — |
EVIDENCE_TYPE_CODE | 4 | — |
EVIDENCE_TYPE_LOG | 5 | — |
EVIDENCE_TYPE_OTHER | 6 | — |
FindingSeverity
FindingSeverity represents the severity level of a security finding.
| Value | # | Description |
|---|---|---|
FINDING_SEVERITY_UNSPECIFIED | 0 | — |
FINDING_SEVERITY_CRITICAL | 1 | — |
FINDING_SEVERITY_HIGH | 2 | — |
FINDING_SEVERITY_MEDIUM | 3 | — |
FINDING_SEVERITY_LOW | 4 | — |
FINDING_SEVERITY_INFO | 5 | — |
FindingStatus
FindingStatus represents the current status of a security finding.
| Value | # | Description |
|---|---|---|
FINDING_STATUS_UNSPECIFIED | 0 | — |
FINDING_STATUS_OPEN | 1 | — |
FINDING_STATUS_CONFIRMED | 2 | — |
FINDING_STATUS_CLOSED | 3 | — |
FINDING_STATUS_FALSE_POSITIVE | 4 | — |
QueryScope
QueryScope represents the scope of a GraphRAG query.
| Value | # | Description |
|---|---|---|
QUERY_SCOPE_UNSPECIFIED | 0 | — |
QUERY_SCOPE_MISSION_RUN | 1 | — |
QUERY_SCOPE_MISSION | 2 | — |
QUERY_SCOPE_GLOBAL | 3 | — |
ResultStatus
ResultStatus represents the execution status of a task or operation.
| Value | # | Description |
|---|---|---|
RESULT_STATUS_UNSPECIFIED | 0 | — |
RESULT_STATUS_SUCCESS | 1 | — |
RESULT_STATUS_FAILED | 2 | — |
RESULT_STATUS_PARTIAL | 3 | — |
RESULT_STATUS_CANCELLED | 4 | — |
RESULT_STATUS_TIMEOUT | 5 | — |
Package taxonomy.v1
Messages
Account
Account represents: A principal/account on a target system or identity provider.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
provider | 2 | string | Properties |
subject | 3 | string | — |
username | 4 | optional string | — |
status | 5 | optional string | — |
roles | 6 | repeated string | — |
AgentRun
AgentRun represents: Single execution of an agent within a mission
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
agent_name | 2 | string | Properties |
mission_run_id | 3 | optional string | — |
status | 4 | optional string | — |
started_at | 5 | optional int64 | — |
completed_at | 6 | optional int64 | — |
error_message | 7 | optional string | — |
actor_id | 8 | string | — |
actor_tenant_id | 9 | string | — |
api_key_id | 10 | optional string | — |
component_name | 11 | string | — |
component_version | 12 | string | — |
system_owned | 13 | bool | — |
parent_agent_run_id | 14 | optional string | — |
delegation_depth | 15 | optional int32 | — |
Certificate
Certificate represents: TLS/SSL certificate
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
subject | 2 | optional string | Properties |
issuer | 3 | optional string | — |
serial_number | 4 | optional string | — |
not_before | 5 | optional int64 | — |
not_after | 6 | optional int64 | — |
fingerprint_sha256 | 7 | optional string | — |
san | 8 | optional string | — |
ComplianceMapping
==================== NESTED VALUE-OBJECT MESSAGES ==================== These are embedded value objects, not graph nodes. They have no id field, no parent reference, and no graph-node semantics. ComplianceMapping is a nested value-object type.
| Field | # | Type | Description |
|---|---|---|---|
framework | 1 | string | — |
control_id | 2 | string | — |
rationale | 3 | optional string | — |
evidence_ref | 4 | optional string | — |
ComplianceSignal
ComplianceSignal represents: Daemon-emitted observation of a single harness call. Append-only. Immutable. The graph projection of the Redis Streams audit log entry for one platform action. Every compliance_signal is an objective observation; evidence, violation, and attestation classifications are queries over the stream, never stored types. No kind discriminator field exists on this node type.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
signal_id | 2 | string | Properties |
actor_id | 3 | string | — |
actor_tenant_id | 4 | string | — |
api_key_id | 5 | optional string | — |
on_behalf_of | 6 | optional string | — |
roles_snapshot | 7 | repeated string | — |
mission_id | 8 | optional string | — |
mission_run_id | 9 | optional string | — |
agent_run_id | 10 | optional string | — |
parent_agent_run_id | 11 | optional string | — |
delegation_depth | 12 | optional int32 | — |
trace_id | 13 | optional string | — |
caller_chain | 14 | repeated string | — |
caller_component | 15 | string | — |
caller_component_version | 16 | string | — |
target_component | 17 | string | — |
target_component_version | 18 | string | — |
system_owned | 19 | bool | — |
action | 20 | string | — |
effect | 21 | string | — |
resource_type | 22 | string | — |
resource_node_id | 23 | optional string | — |
resource_uri | 24 | optional string | — |
decision | 25 | string | — |
policy_id | 26 | optional string | — |
decision_reason | 27 | optional string | — |
success | 28 | bool | — |
error_code | 29 | optional string | — |
latency_ms | 30 | int64 | — |
bytes_in | 31 | optional int64 | — |
bytes_out | 32 | optional int64 | — |
tokens_prompt | 33 | optional int32 | — |
tokens_completion | 34 | optional int32 | — |
occurred_at | 35 | int64 | — |
resource_tags | 36 | optional string | — |
custom | 37 | optional string | — |
control_ids | 38 | repeated string | — |
Credential
Credential represents: A credential (secret material), identified by the hash of its secret. May work across scopes.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
hash | 2 | string | Properties |
kind | 3 | optional string | — |
username | 4 | optional string | — |
source | 5 | optional string | — |
validated | 6 | optional bool | — |
Domain
Domain represents: Root domain entity (e.g., example.com)
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
name | 2 | string | Properties |
registrar | 3 | optional string | — |
created_date | 4 | optional int64 | — |
expiry_date | 5 | optional int64 | — |
nameservers | 6 | optional string | — |
Endpoint
Endpoint represents: Web endpoint or URL
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
url | 2 | string | Properties |
method | 3 | optional string | — |
status_code | 4 | optional int32 | — |
content_type | 5 | optional string | — |
content_length | 6 | optional int64 | — |
title | 7 | optional string | — |
parent_service_id | 8 | string | Parent reference |
Evidence
Evidence represents: Supporting evidence for a finding
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
type | 2 | string | Properties |
content | 3 | optional string | — |
content_type | 4 | optional string | — |
url | 5 | optional string | — |
parent_finding_id | 6 | string | Parent reference |
Finding
Finding represents: Security vulnerability or issue
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
title | 2 | string | Properties |
description | 3 | optional string | — |
severity | 4 | string | — |
confidence | 5 | optional double | — |
category | 6 | optional string | — |
subcategory | 7 | optional string | — |
remediation | 8 | optional string | — |
cvss_score | 9 | optional double | — |
cve_ids | 10 | optional string | — |
cwe_ids | 11 | optional string | — |
compliance_mappings | 12 | repeated ComplianceMapping | — |
GraphNode
GraphNode is the generic node type that can represent any taxonomy node. Use typed messages (Host, Port, etc.) for compile-time safety, or GraphNode for dynamic/custom types.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | Identity |
type | 2 | string | — |
properties | 3 | map<string, Value> | Properties (flexible key-value) |
parent_id | 4 | optional string | Parent reference (set by BelongsTo) |
parent_type | 5 | optional string | — |
parent_relationship | 6 | optional string | — |
mission_id | 10 | string | Scoping (injected by harness - agents never set these) |
mission_run_id | 11 | string | — |
agent_run_id | 12 | string | — |
discovered_by | 13 | string | — |
discovered_at | 14 | int64 | — |
created_at | 20 | int64 | Timestamps |
updated_at | 21 | int64 | — |
Host
Host represents: IP address or hostname
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
ip | 2 | optional string | Properties |
hostname | 3 | optional string | — |
os | 4 | optional string | — |
os_version | 5 | optional string | — |
mac_address | 6 | optional string | — |
state | 7 | optional string | — |
ListValue
| Field | # | Type | Description |
|---|---|---|---|
values | 1 | repeated Value | — |
LlmCall
LlmCall represents: Call to a large language model
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
model | 2 | string | Properties |
provider | 3 | optional string | — |
slot_name | 4 | optional string | — |
agent_run_id | 5 | optional string | — |
prompt_tokens | 6 | optional int32 | — |
completion_tokens | 7 | optional int32 | — |
total_tokens | 8 | optional int32 | — |
latency_ms | 9 | optional int64 | — |
started_at | 10 | optional int64 | — |
actor_id | 11 | string | — |
actor_tenant_id | 12 | string | — |
api_key_id | 13 | optional string | — |
component_name | 14 | string | — |
component_version | 15 | string | — |
model_id | 16 | string | — |
MapValue
| Field | # | Type | Description |
|---|---|---|---|
fields | 1 | map<string, Value> | — |
Mission
Mission represents: Top-level security assessment mission
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
name | 2 | string | Properties |
target | 3 | string | — |
status | 4 | optional string | — |
description | 5 | optional string | — |
started_at | 6 | optional int64 | — |
completed_at | 7 | optional int64 | — |
MissionRun
MissionRun represents: Single execution of a mission pipeline
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
run_number | 2 | int32 | Properties |
status | 3 | optional string | — |
started_at | 4 | optional int64 | — |
completed_at | 5 | optional int64 | — |
actor_id | 6 | string | — |
actor_tenant_id | 7 | string | — |
api_key_id | 8 | optional string | — |
mission_yaml_digest | 9 | string | — |
parent_mission_id | 10 | string | Parent reference |
Port
Port represents: Network port on a host
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
number | 2 | int32 | Properties |
protocol | 3 | string | — |
state | 4 | optional string | — |
reason | 5 | optional string | — |
parent_host_id | 6 | string | Parent reference |
Relationship
Relationship represents a connection between two nodes.
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
from_id | 2 | string | — |
to_id | 3 | string | — |
type | 4 | string | — |
properties | 5 | map<string, Value> | — |
weight | 6 | double | — |
mission_id | 10 | string | Scoping |
mission_run_id | 11 | string | — |
created_at | 20 | int64 | Timestamps |
Scope
Scope represents: Network/addressing context (vantage) an observation was made within; declared in the mission (RoE) or minted on pivot. The coordinate of an asset is (scope, address).
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
scope_id | 2 | string | Properties |
name | 3 | optional string | — |
kind | 4 | optional string | — |
cidrs | 5 | repeated string | — |
gateway_fingerprint | 6 | optional string | — |
reachable | 7 | optional bool | — |
Service
Service represents: Service running on a port
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
name | 2 | string | Properties |
product | 3 | optional string | — |
version | 4 | optional string | — |
extra_info | 5 | optional string | — |
banner | 6 | optional string | — |
cpe | 7 | optional string | — |
parent_port_id | 8 | string | Parent reference |
Subdomain
Subdomain represents: Subdomain under a root domain
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
name | 2 | string | Properties |
full_name | 3 | optional string | — |
parent_domain_id | 4 | string | Parent reference |
Technique
Technique represents: Attack technique (MITRE/Gibson)
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
technique_id | 2 | string | Properties |
name | 3 | string | — |
taxonomy | 4 | optional string | — |
tactic | 5 | optional string | — |
description | 6 | optional string | — |
url | 7 | optional string | — |
Technology
Technology represents: Technology/framework detected
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
name | 2 | string | Properties |
version | 3 | optional string | — |
category | 4 | optional string | — |
confidence | 5 | optional int32 | — |
cpe | 6 | optional string | — |
ToolExecution
ToolExecution represents: Execution of a security tool
| Field | # | Type | Description |
|---|---|---|---|
id | 1 | string | — |
tool_name | 2 | string | Properties |
command | 3 | optional string | — |
exit_code | 4 | optional int32 | — |
started_at | 5 | optional int64 | — |
completed_at | 6 | optional int64 | — |
stdout | 7 | optional string | — |
stderr | 8 | optional string | — |
actor_id | 9 | string | — |
actor_tenant_id | 10 | string | — |
api_key_id | 11 | optional string | — |
component_name | 12 | string | — |
component_version | 13 | string | — |
system_owned | 14 | bool | — |
parent_agent_run_id | 15 | string | Parent reference |
Value
Value represents a dynamic property value.
| Field | # | Type | Description |
|---|---|---|---|
string_value | 1 | string | — |
int_value | 2 | int64 | — |
double_value | 3 | double | — |
bool_value | 4 | bool | — |
bytes_value | 5 | bytes | — |
timestamp_value | 6 | int64 | — |
list_value | 7 | ListValue | — |
map_value | 8 | MapValue | — |
oneof kind — one of: string_value, int_value, double_value, bool_value, bytes_value, timestamp_value, list_value, map_value.
Enums
CoreNodeType
CoreNodeType enumerates all core (validated) node types. Custom types use string directly, not this enum.
| Value | # | Description |
|---|---|---|
CORE_NODE_TYPE_UNSPECIFIED | 0 | — |
CORE_NODE_TYPE_MISSION | 1 | — |
CORE_NODE_TYPE_MISSION_RUN | 2 | — |
CORE_NODE_TYPE_AGENT_RUN | 3 | — |
CORE_NODE_TYPE_TOOL_EXECUTION | 4 | — |
CORE_NODE_TYPE_LLM_CALL | 5 | — |
CORE_NODE_TYPE_DOMAIN | 6 | — |
CORE_NODE_TYPE_SUBDOMAIN | 7 | — |
CORE_NODE_TYPE_HOST | 8 | — |
CORE_NODE_TYPE_PORT | 9 | — |
CORE_NODE_TYPE_SERVICE | 10 | — |
CORE_NODE_TYPE_ENDPOINT | 11 | — |
CORE_NODE_TYPE_TECHNOLOGY | 12 | — |
CORE_NODE_TYPE_CERTIFICATE | 13 | — |
CORE_NODE_TYPE_FINDING | 14 | — |
CORE_NODE_TYPE_EVIDENCE | 15 | — |
CORE_NODE_TYPE_TECHNIQUE | 16 | — |
CORE_NODE_TYPE_COMPLIANCE_SIGNAL | 17 | — |
CORE_NODE_TYPE_SCOPE | 18 | — |
CORE_NODE_TYPE_CREDENTIAL | 19 | — |
CORE_NODE_TYPE_ACCOUNT | 20 | — |
CoreRelationType
CoreRelationType enumerates all core relationship types.
| Value | # | Description |
|---|---|---|
CORE_RELATION_TYPE_UNSPECIFIED | 0 | — |
CORE_RELATION_TYPE_USED_TOOL | 1 | — |
CORE_RELATION_TYPE_DELEGATED_TO | 2 | — |
CORE_RELATION_TYPE_EMITTED_SIGNAL | 3 | — |
CORE_RELATION_TYPE_T_R_I_G_G_E_R_E_D | 4 | — |
CORE_RELATION_TYPE_HAS_SUBDOMAIN | 5 | — |
CORE_RELATION_TYPE_RESOLVES_TO | 6 | — |
CORE_RELATION_TYPE_HAS_PORT | 7 | — |
CORE_RELATION_TYPE_RUNS_SERVICE | 8 | — |
CORE_RELATION_TYPE_HAS_ENDPOINT | 9 | — |
CORE_RELATION_TYPE_USES_TECHNOLOGY | 10 | — |
CORE_RELATION_TYPE_SERVES_CERTIFICATE | 11 | — |
CORE_RELATION_TYPE_A_F_F_E_C_T_S | 12 | — |
CORE_RELATION_TYPE_HAS_EVIDENCE | 13 | — |
CORE_RELATION_TYPE_USES_TECHNIQUE | 14 | — |
CORE_RELATION_TYPE_LEADS_TO | 15 | — |