ZeroRoot Docs

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#TypeDescription
provider1string—
model2string—
temperature3double—
max_tokens4int32—

AgentSlotConstraints

Field#TypeDescription
min_context_window1int32—
required_features2repeated string—

AgentSlotDefinition

Field#TypeDescription
name1string—
description2string—
required3bool—
default_config4AgentSlotConfig—
constraints5AgentSlotConstraints—

ExecuteRequest

Field#TypeDescription
task1gibson.types.v1.Task—
timeout_ms2int64—
callback_endpoint3stringCallback endpoint for the orchestrator's HarnessCallbackService. When provided, the agent will connect to this endpoint to access harness operations (LLM, tools, memory, etc.).
callback_token4stringOptional authentication token for the callback connection.
mission5gibson.common.v1.TypedMapMission context for this execution.
target6gibson.common.v1.TypedMapTarget information for this execution.
trace_id7stringTrace ID for distributed tracing (propagated from orchestrator).
parent_span_id8stringParent span ID for distributed tracing (propagated from orchestrator).
mission_run_id9stringMission run ID - unique identifier for this specific mission execution. Created by MissionGraphManager.CreateMissionRunNode at mission start. Used for mission-scoped GraphRAG storage.
agent_run_id10stringAgent run ID - unique identifier for this specific agent execution. Used for DISCOVERED relationships and provenance tracking.
run_number11int32Run number - sequential number for this mission (1, 2, 3...). Used for mission memory queries and historical comparisons.
job_id12stringjob_id names the job this execution serves. A one-shot dispatch and a bank job then share one result path. Empty for a dispatch that opens no job.

ExecuteResponse

Field#TypeDescription
result1gibson.types.v1.Result—
error2gibson.common.v1.Error—
deliverables3repeated gibson.job.v1.Deliverabledeliverables lists what left the sandbox for this execution: a pushed branch, an opened merge request. Empty when nothing left.
claude_session_id4stringclaude_session_id is the coding-agent session that ran this execution, so a later turn resumes the same conversation. Empty for an agent that holds no session.

GetDescriptorRequest

No fields.

GetDescriptorResponse

Field#TypeDescription
name1string—
version2string—
description3string—
capabilities4repeated string—
target_schemas5repeated TargetSchemaProto—
technique_types6repeated string—
target_types7repeated stringDeprecated: v0.8.0. Use target_schemas (field 5) instead. Will be removed in v0.10.0.

GetSlotSchemaRequest

No fields.

GetSlotSchemaResponse

Field#TypeDescription
slots1repeated AgentSlotDefinition—

HealthRequest

No fields.

HealthResponse

Field#TypeDescription
status1gibson.common.v1.HealthStatus—

TargetSchemaProto

Field#TypeDescription
type1string—
version2string—
schema_json3string—
description4string—

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#TypeDescription
principal_id1string—
kind2PrincipalKind—
name3string—
description4string—
created_at5google.protobuf.Timestamp—
last_authenticated_at6google.protobuf.Timestamplast_authenticated_at is null if never authenticated or unsupported by the IdP.
revoked7bool—
created_by_subject8string—

ComponentGrant

ComponentGrant describes an optional FGA capability grant to apply at creation time.

Field#TypeDescription
component_ref1stringcomponent_ref is the component reference, e.g. "tool:nmap" or "plugin:gitlab".
relation2stringrelation is the FGA relation to grant, e.g. "can_invoke".

CreateAgentIdentityRequest

CreateAgentIdentityRequest is the input to AgentIdentityService.CreateAgentIdentity.

Field#TypeDescription
name1stringname must match ^[a-z][a-z0-9-]{2,40}$
kind2PrincipalKindkind must not be UNSPECIFIED.
description3stringdescription is optional, max 256 chars.
component_grants4repeated ComponentGrantcomponent_grants is an optional list of FGA capability grants to apply at creation.
capability_ceiling5repeated stringcapability_ceiling names the session capabilities the enrolling admin grants this identity, minted into its bootstrap credential's ceiling (ADR-0045). Only the reserved names are accepted: "mission:originate" (start a mission of its own, the interactive coding-agent case) and "mission:delegate". Empty means neither.

CreateAgentIdentityResponse

CreateAgentIdentityResponse carries the provisioned identity credentials. The bootstrap_token is emitted exactly once and cannot be recovered.

Field#TypeDescription
principal_id1stringprincipal_id is the FGA principal identifier (e.g. "agent_principal:uuid").
kind2PrincipalKind—
name3string—
gibson_url6stringgibson_url is the daemon's public Envoy URL for use in enroll_command.
enroll_command7stringenroll_command is a complete copy-pasteable shell invocation for component enrollment: gibson component register --kind &lt;kind> --token -.
bootstrap_token8stringbootstrap_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#TypeDescription
page_size1int32page_size defaults to 50, max 200.
page_token2string—
kind_filter3PrincipalKindkind_filter: UNSPECIFIED means return all kinds.

ListAgentIdentitiesResponse

ListAgentIdentitiesResponse is the output of AgentIdentityService.ListAgentIdentities.

Field#TypeDescription
identities1repeated AgentIdentity—
next_page_token2string—

RevokeAgentIdentityRequest

RevokeAgentIdentityRequest is the input to AgentIdentityService.RevokeAgentIdentity.

Field#TypeDescription
principal_id1string—

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_UNSPECIFIED0—
PRINCIPAL_KIND_AGENT1—
PRINCIPAL_KIND_TOOL2—
PRINCIPAL_KIND_PLUGIN3—

Package gibson.bank.v1

Package gibson.bank.v1 declares banks of always-on coding agents and their members (ADR-0017).

A bank is a declarative, daemon-reconciled pool of always-on Claude Code instances. The daemon keeps desired_count members running in sandboxes, relaunches a dead member, and holds a member at NEEDS_SIGN_IN until its owner completes the in-sandbox sign in. A member signs in once inside its sandbox through Anthropic's own flow, or runs on the tenant's API key or cloud credentials. Callers with can_send on a bank open jobs on its members through gibson.job.v1.JobService.

Services

BankService

BankService creates, reads, updates and deletes banks, lists their members, and relays the in-sandbox subscription sign in to the owner. People and platform services call it. A dispatched component reaches banks through gibson.job.v1.JobService and the harness callback under its own grant, not through this service.

CreateBank

CreateBankRequest → CreateBankResponse

CreateBank declares a bank. The daemon starts to launch members until desired_count of them run. The caller owns the bank unless tenant_owned is true.

DeleteBank

DeleteBankRequest → DeleteBankResponse

DeleteBank drains every member, closes their open jobs with verdict ABANDONED, and removes the bank.

GetBank

GetBankRequest → GetBankResponse

GetBank returns one bank by id.

ListBanks

ListBanksRequest → ListBanksResponse

ListBanks returns the banks of the caller's tenant, newest first.

ListMembers

ListMembersRequest → ListMembersResponse

ListMembers returns the members of a bank with their last reported status.

StartSignIn

StartSignInRequest → StartSignInResponse

StartSignIn asks a member at NEEDS_SIGN_IN to run the Anthropic sign in inside its sandbox. Follow it with StreamSignIn to read the URL and the code prompt, then SubmitSignInCode. Only the owner signs in: the subscription is theirs.

StreamSignIn

StreamSignInRequest → stream StreamSignInResponse

StreamSignIn relays the sign-in flow of one member: the URL to open, the code prompt when the flow asks for one, and done or error at the end. The stream closes after done or error.

SubmitSignInCode

SubmitSignInCodeRequest → SubmitSignInCodeResponse

SubmitSignInCode passes the code the person got from Anthropic to the sign-in flow that runs inside the member's sandbox.

UpdateBank

UpdateBankRequest → UpdateBankResponse

UpdateBank changes desired_count and the policies of a bank. A field that is absent keeps its value. The login shape, the agent and the model are fixed at creation.

Messages

Bank

Bank is a pool of always-on coding agents with one owner.

Field#TypeDescription
id1stringid is the bank id. The daemon assigns it.
tenant_id2stringtenant_id is the tenant the bank belongs to.
owner3gibson.common.v1.Principalowner is the person or the tenant that owns the bank. A person owns a bank that signs in on their subscription. The tenant owns a bank that runs on the tenant provider configuration.
name4stringname is the display name. Unique inside the tenant.
desired_count5int32desired_count is how many members the daemon keeps running.
login_shape6LoginShapelogin_shape is how members authenticate to Anthropic.
provider_config_name7stringprovider_config_name names the tenant provider configuration that holds the API key or the cloud credentials. Empty for LOGIN_SHAPE_SUBSCRIPTION.
agent_name8stringagent_name is the catalog id of the agent component each member runs. The default is "claude".
model9stringmodel is the model id members run. Empty means the agent default.
max_jobs_in_flight10int32max_jobs_in_flight is the per-member cap on open jobs. Capacity of the bank is desired_count times max_jobs_in_flight.
stale_limit11google.protobuf.Durationstale_limit is how long a job may go without input. A job idle past it closes with verdict ABANDONED.
spill_policy12SpillPolicyspill_policy is what the bank does with a job when no member has a free slot.
created_at13google.protobuf.Timestampcreated_at is when the bank was created.
updated_at14google.protobuf.Timestampupdated_at is when the bank was last changed.

CreateBankRequest

CreateBankRequest declares a new bank.

Field#TypeDescription
name1stringname is the display name. Unique inside the tenant.
tenant_owned2booltenant_owned makes the tenant the owner. The bank then runs on the tenant provider configuration and has no sign-in step. When false the caller owns the bank.
desired_count3int32desired_count is how many members the daemon keeps running.
login_shape4LoginShapelogin_shape is how members authenticate to Anthropic. Required.
provider_config_name5stringprovider_config_name names the tenant provider configuration for every login shape except LOGIN_SHAPE_SUBSCRIPTION.
agent_name6stringagent_name is the catalog id of the agent component each member runs. Empty means "claude".
model7stringmodel is the model id members run. Empty means the agent default.
max_jobs_in_flight8int32max_jobs_in_flight is the per-member cap on open jobs. Zero means the daemon default.
stale_limit9google.protobuf.Durationstale_limit is how long a job may go without input before it closes with verdict ABANDONED. Unset means the daemon default.
spill_policy10SpillPolicyspill_policy is what the bank does with a job when no member has a free slot. Unspecified means SPILL_POLICY_QUEUE.

CreateBankResponse

CreateBankResponse carries the created bank.

Field#TypeDescription
bank1Bankbank is the bank as stored.

DeleteBankRequest

DeleteBankRequest names the bank to remove.

Field#TypeDescription
id1stringid is the bank id. Required.

DeleteBankResponse

DeleteBankResponse is empty. The bank is gone when the call returns.

No fields.

GetBankRequest

GetBankRequest names one bank.

Field#TypeDescription
id1stringid is the bank id. Required.

GetBankResponse

GetBankResponse carries one bank.

Field#TypeDescription
bank1Bankbank is the bank.

ListBanksRequest

ListBanksRequest pages through the banks of the caller's tenant.

Field#TypeDescription
page_size1int32page_size is the maximum number of banks to return. Zero means the server default.
page_token2stringpage_token is the next_page_token of the previous page. Empty for the first page.

ListBanksResponse

ListBanksResponse carries one page of banks.

Field#TypeDescription
banks1repeated Bankbanks is the page.
next_page_token2stringnext_page_token fetches the next page. Empty on the last page.

ListMembersRequest

ListMembersRequest pages through the members of one bank.

Field#TypeDescription
bank_id1stringbank_id is the bank. Required.
page_size2int32page_size is the maximum number of members to return. Zero means the server default.
page_token3stringpage_token is the next_page_token of the previous page. Empty for the first page.

ListMembersResponse

ListMembersResponse carries one page of members.

Field#TypeDescription
members1repeated Membermembers is the page.
next_page_token2stringnext_page_token fetches the next page. Empty on the last page.

Member

Member is one always-on instance in a bank. It is a mission the owner originated (ADR-0063) with one sandbox that lives until the bank scales down.

Field#TypeDescription
id1stringid is the member id. The daemon assigns it.
bank_id2stringbank_id is the bank this member belongs to.
mission_id3stringmission_id is the always-on mission that backs this member.
mission_run_id4stringmission_run_id is the run of that mission.
agent_run_id5stringagent_run_id is the agent run inside that mission run.
sandbox_id6stringsandbox_id is the setec sandbox the member runs in.
status7MemberStatusstatus is what the member last reported, with LAUNCHING and DEAD filled in by the daemon.
last_heartbeat8google.protobuf.Timestamplast_heartbeat is when the member last reported.

MemberStatus

MemberStatus is what a member reports on every heartbeat: busy or not busy, how many jobs it holds, and which ones. The daemon uses it to route queued jobs to a member with a free slot.

Field#TypeDescription
state1MemberStatestate is where the member is in its life.
jobs_in_flight2int32jobs_in_flight is how many jobs the member holds open now.
cap3int32cap is how many jobs the member may hold open at once.
active_job_ids4repeated stringactive_job_ids lists the jobs the member holds open now.
claude_version5stringclaude_version is the version of the claude binary the member runs.

StartSignInRequest

StartSignInRequest names the member that must sign in.

Field#TypeDescription
bank_id1stringbank_id is the bank the member belongs to. Required.
member_id2stringmember_id is the member. Required.

StartSignInResponse

StartSignInResponse carries the member after the sign in started.

Field#TypeDescription
member1Membermember is the member. Its status.state is NEEDS_SIGN_IN until the flow completes.

StreamSignInRequest

StreamSignInRequest names the member whose sign-in flow to follow.

Field#TypeDescription
bank_id1stringbank_id is the bank the member belongs to. Required.
member_id2stringmember_id is the member. Required.

StreamSignInResponse

StreamSignInResponse is one step of the sign-in flow.

Field#TypeDescription
url1stringurl is the address the person opens to sign in. Set on the first step.
code_prompt2stringcode_prompt is the text the flow shows when it asks for the code. Set when the flow waits for SubmitSignInCode.
done3booldone is true on the last step when the sign in succeeded.
error4stringerror is set on the last step when the sign in failed.

SubmitSignInCodeRequest

SubmitSignInCodeRequest passes the sign-in code to a member.

Field#TypeDescription
bank_id1stringbank_id is the bank the member belongs to. Required.
member_id2stringmember_id is the member. Required.
code3stringcode is the code Anthropic gave the person. Required.

SubmitSignInCodeResponse

SubmitSignInCodeResponse carries the member after the code was passed on.

Field#TypeDescription
member1Membermember is the member. Read StreamSignIn for the outcome.

UpdateBankRequest

UpdateBankRequest changes desired_count and the policies of a bank. A field that is absent keeps its value.

Field#TypeDescription
id1stringid is the bank id. Required.
desired_count2optional int32desired_count is the new member count. The daemon launches or drains members to reach it.
max_jobs_in_flight3optional int32max_jobs_in_flight is the new per-member cap.
stale_limit4google.protobuf.Durationstale_limit is the new idle limit for jobs.
spill_policy5optional SpillPolicyspill_policy is the new spill policy.

UpdateBankResponse

UpdateBankResponse carries the bank after the change.

Field#TypeDescription
bank1Bankbank is the bank as stored.

Enums

LoginShape

LoginShape is how a member authenticates to Anthropic. All shapes are offered. API key and cloud credentials come from the tenant provider configuration. A subscription is never stored by the platform.

Value#Description
LOGIN_SHAPE_UNSPECIFIED0—
LOGIN_SHAPE_SUBSCRIPTION1LOGIN_SHAPE_SUBSCRIPTION: the owner signs in inside the sandbox through Anthropic's own flow, relayed by StartSignIn, StreamSignIn and SubmitSignInCode. A member holds at NEEDS_SIGN_IN until then.
LOGIN_SHAPE_ANTHROPIC_API_KEY2LOGIN_SHAPE_ANTHROPIC_API_KEY: the provider configuration named by Bank.provider_config_name holds an Anthropic API key.
LOGIN_SHAPE_BEDROCK3LOGIN_SHAPE_BEDROCK: the provider configuration holds AWS credentials for Amazon Bedrock.
LOGIN_SHAPE_VERTEX4LOGIN_SHAPE_VERTEX: the provider configuration holds Google Cloud credentials for Vertex AI.
LOGIN_SHAPE_FOUNDRY5LOGIN_SHAPE_FOUNDRY: the provider configuration holds Azure credentials for Microsoft Foundry.

MemberState

MemberState is where a member is in its life. A member reports NEEDS_SIGN_IN, IDLE, BUSY or DRAINING on every heartbeat. The daemon sets LAUNCHING before the first heartbeat and DEAD when heartbeats stop.

Value#Description
MEMBER_STATE_UNSPECIFIED0—
MEMBER_STATE_LAUNCHING1MEMBER_STATE_LAUNCHING: the sandbox starts. No heartbeat yet. Daemon set.
MEMBER_STATE_NEEDS_SIGN_IN2MEMBER_STATE_NEEDS_SIGN_IN: the member waits for the owner to complete the in-sandbox sign in. It takes no job.
MEMBER_STATE_IDLE3MEMBER_STATE_IDLE: the member has a free slot. jobs_in_flight is below cap.
MEMBER_STATE_BUSY4MEMBER_STATE_BUSY: every slot is taken. jobs_in_flight equals cap.
MEMBER_STATE_DRAINING5MEMBER_STATE_DRAINING: the member takes no new job and exits when its open jobs close. The daemon asks for this on scale-down.
MEMBER_STATE_DEAD6MEMBER_STATE_DEAD: heartbeats stopped or the sandbox died. The daemon relaunches the member. Daemon set.

SpillPolicy

SpillPolicy is what a bank does with a job when no member has a free slot.

Value#Description
SPILL_POLICY_UNSPECIFIED0—
SPILL_POLICY_QUEUE1SPILL_POLICY_QUEUE: the job waits in the bank queue. The next member with a free slot pulls it.
SPILL_POLICY_EPHEMERAL2SPILL_POLICY_EPHEMERAL: the daemon launches a one-shot instance for the job instead of queueing it.

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 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).

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. Customer code branching on budget denial continues to receive the same on-wire bytes.

Field#TypeDescription
scope1BudgetScope—
dimension2stringdimension is one of "tokens" or "spend".
current_usage3int64—
limit4int64—
period_reset_at_unix5int64—
subject_id6stringsubject_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.

Value#Description
BUDGET_SCOPE_UNSPECIFIED0—
BUDGET_SCOPE_USER1—
BUDGET_SCOPE_TEAM2—
BUDGET_SCOPE_TENANT3—

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).

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#TypeDescription
jti1stringjti is the JWT ID claim of the CG-JWT — the canonical identifier the dashboard uses for filtering and per-row drill-down.
recipient_install_id2stringrecipient_install_id is the install ID this grant was minted for.
recipient_class3RecipientClassrecipient_class is the class of the install (AGENT / TOOL / PLUGIN).
recipient_name4stringrecipient_name is the display name (component name) of the install.
allowed_rpcs5repeated stringallowed_rpcs is the set of method strings the grant authorizes (e.g. ["GetCredential", "RecordFinding"]).
mission_id6stringmission_id is the mission this grant scopes the recipient to. Empty for non-mission-scoped grants.
task_id7stringtask_id is the task within the mission. Empty when mission_id is empty or the grant is mission-wide.
issued_at_unix8int64issued_at_unix is the iat claim, Unix seconds.
expires_at_unix9int64expires_at_unix is the exp claim, Unix seconds.
near_expiry10boolnear_expiry is true when the grant expires within 5 minutes from now. The dashboard renders these rows with a warning highlight.
isolation11IsolationModeisolation 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_UNSPECIFIED0ISOLATION_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_SANDBOX1ISOLATION_MODE_HOSTED_SANDBOX: untrusted execution runs in the platform- operated setec sandbox fleet. The only mode permitted under setec-only.
ISOLATION_MODE_CUSTOMER_CLUSTER_ATTESTED2ISOLATION_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_SANDBOX3ISOLATION_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_ENDPOINT4ISOLATION_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_UNSPECIFIED0—
RECIPIENT_CLASS_AGENT1RECIPIENT_CLASS_AGENT: the grant authorizes an agent install to invoke a per-mission RPC set.
RECIPIENT_CLASS_TOOL2RECIPIENT_CLASS_TOOL: the grant authorizes a tool install.
RECIPIENT_CLASS_PLUGIN3RECIPIENT_CLASS_PLUGIN: the grant authorizes a plugin install.

Package gibson.common.v1

Messages

Error

Field#TypeDescription
code1string—
message2string—
details3string—
retryable4bool—

HealthStatus

Field#TypeDescription
status1string—
message2string—
checked_at3int64—

JSONSchema

Field#TypeDescription
json1string—

Metadata

Metadata contains labels and annotations for resources

Field#TypeDescription
labels1map<string, string>—
annotations2map<string, string>—

Principal

Principal names who acts: a person, the tenant, a component run, or a platform service. Banks record their owner as a Principal. Jobs record who opened them and who sent each input as a Principal.

Field#TypeDescription
kind1Principal.Kindkind is the class of principal.
id2stringid identifies the principal inside its kind.

TypedArray

TypedArray represents an array of TypedValues

Field#TypeDescription
items1repeated TypedValue—

TypedMap

TypedMap represents a map of string keys to TypedValues

Field#TypeDescription
entries1map<string, TypedValue>—

TypedValue

TypedValue represents a dynamically typed value

Field#TypeDescription
null_value1NullValue—
string_value2string—
int_value3int64—
double_value4double—
bool_value5bool—
bytes_value6bytes—
array_value7TypedArray—
map_value8TypedMap—

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_UNSPECIFIED0—
ERROR_CODE_INTERNAL1—
ERROR_CODE_INVALID_ARGUMENT2—
ERROR_CODE_NOT_FOUND3—
ERROR_CODE_TIMEOUT4—
ERROR_CODE_UNAVAILABLE5—
ERROR_CODE_PERMISSION_DENIED6—
ERROR_CODE_ALREADY_EXISTS7—
ERROR_CODE_RESOURCE_EXHAUSTED8—
ERROR_CODE_CANCELLED9—
ERROR_CODE_AGENT_TIMEOUT10—
ERROR_CODE_AGENT_PANIC11—
ERROR_CODE_AGENT_INIT_FAILED12—
ERROR_CODE_LLM_RATE_LIMITED13—
ERROR_CODE_LLM_CONTEXT_EXCEEDED14—
ERROR_CODE_LLM_API_ERROR15—
ERROR_CODE_LLM_PARSE_ERROR16—
ERROR_CODE_TOOL_NOT_FOUND17—
ERROR_CODE_TOOL_TIMEOUT18—
ERROR_CODE_TOOL_EXEC_FAILED19—
ERROR_CODE_NETWORK_TIMEOUT20—
ERROR_CODE_NETWORK_UNREACHABLE21—
ERROR_CODE_TLS_ERROR22—
ERROR_CODE_DELEGATION_FAILED23—
ERROR_CODE_CHILD_AGENT_FAILED24—
ERROR_CODE_CONFIG_ERROR25—

HealthState

HealthState defines standard health states

Value#Description
HEALTH_STATE_UNSPECIFIED0—
HEALTH_STATE_HEALTHY1—
HEALTH_STATE_DEGRADED2—
HEALTH_STATE_UNHEALTHY3—

NullValue

NullValue represents a null value in TypedValue

Value#Description
NULL_VALUE_UNSPECIFIED0—

Principal.Kind

Kind is the class of principal. It decides how to read id.

Value#Description
KIND_UNSPECIFIED0—
KIND_USER1KIND_USER is a person. id is the Zitadel user id.
KIND_TENANT2KIND_TENANT is the tenant itself. id is the tenant id.
KIND_COMPONENT3KIND_COMPONENT is an agent, tool or plugin run. id is the component principal id.
KIND_SERVICE4KIND_SERVICE is a platform service. id is the service account id.

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.

WatchComponentEvents

WatchComponentEventsRequest → stream ComponentEvent

WatchComponentEvents streams lifecycle events for the calling component: secret_access_revoked and secret_rotated. The daemon takes the component from the caller's identity; the request names nothing, so a caller cannot watch another component. The stream stays open until the client cancels.

Messages

AgentDescriptorProto

AgentDescriptorProto describes a registered agent.

Field#TypeDescription
name1string—
version2string—
description3string—
capabilities4repeated string—
target_types5repeated string—

CallToolRequest

CallToolRequest is a harness proxy request to execute a tool.

Field#TypeDescription
work_id1string—
tool_name2string—
input_json3stringinput_json is the JSON-encoded tool input matching the tool's input schema.
timeout_ms4int64—

CallToolResponse

CallToolResponse carries the tool execution result.

Field#TypeDescription
output_json1stringoutput_json is the JSON-encoded tool output matching the tool's output schema.
error2ComponentError—

CallToolStreamRequest

CallToolStreamRequest is a harness proxy request for streaming tool execution.

Field#TypeDescription
work_id1string—
tool_name2string—
input_json3string—
timeout_ms4int64—

CallToolStreamResponse

CallToolStreamResponse is a single event in a streaming tool execution.

Field#TypeDescription
event_type1stringevent_type: "progress", "partial", "warning", "error", "result".
payload_json2stringpayload_json carries event-specific data.
done3booldone is true on the final event.
error4ComponentError—

CancelMissionRequest

CancelMissionRequest requests cancellation of a running mission.

Field#TypeDescription
work_id1string—
mission_id2string—

CancelMissionResponse

CancelMissionResponse is returned after cancellation is requested.

No fields.

CompleteRequest

CompleteRequest is a harness proxy request for a non-streaming LLM completion.

Field#TypeDescription
work_id1stringwork_id ties this request to the active work item for authorization and billing.
slot2stringslot is the named LLM slot defined by the agent (e.g. "primary").
messages3repeated LLMMessage—
timeout_ms4int64timeout_ms is the maximum time to wait for the completion.

CompleteResponse

CompleteResponse carries the LLM's reply to a non-streaming completion.

Field#TypeDescription
response1LLMMessage—
usage2TokenUsage—

CompleteStreamRequest

CompleteStreamRequest is a harness proxy request for a streaming LLM completion.

Field#TypeDescription
work_id1stringwork_id ties this request to the active work item for authorization and billing.
slot2stringslot is the named LLM slot defined by the agent (e.g. "primary").
messages3repeated LLMMessage—
timeout_ms4int64timeout_ms is the maximum time to wait for the completion.

CompleteStreamResponse

CompleteStreamResponse is a single chunk in a streaming LLM completion response.

Field#TypeDescription
content1string—
done2booldone is true on the final chunk; usage is only populated on the final chunk.
usage3TokenUsage—

CompleteStructuredRequest

CompleteStructuredRequest is a harness proxy request for structured JSON output.

Field#TypeDescription
work_id1string—
slot2string—
messages3repeated LLMMessage—
schema_json4stringschema_json is a JSON Schema the LLM output must conform to.
timeout_ms5int64—

CompleteStructuredResponse

CompleteStructuredResponse carries the validated structured output.

Field#TypeDescription
result_json1stringresult_json is the JSON output conforming to the requested schema.
usage2TokenUsage—

CompleteWithToolsRequest

CompleteWithToolsRequest is a harness proxy request for LLM completion with tool definitions.

Field#TypeDescription
work_id1string—
slot2string—
messages3repeated LLMMessage—
tools4repeated ToolDefinition—
timeout_ms5int64—

CompleteWithToolsResponse

CompleteWithToolsResponse carries the LLM's reply including any tool calls.

Field#TypeDescription
response1LLMMessage—
usage2TokenUsage—
tool_calls3repeated ToolCallResult—
finish_reason4string—

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#TypeDescription
name1stringCommon metadata — populated for every dispatch_mode.
version2string—
kind3string—
description4string—
tags5repeated string—
metadata6map<string, string>—
dispatch_mode7DispatchMode—
image10stringSandboxed-dispatch fields (DISPATCH_MODE_SANDBOXED only). image is an OCI reference pinned by digest for reproducibility.
command11repeated stringcommand is the argv the runner executes inside the microVM.
env12map<string, string>env is static environment variables prepended to every Launch call. The daemon adds GIBSON_TOOL_INPUT_B64 and tracing headers on top.
resources13Resourcesresources is the vCPU + memory budget per sandbox.
default_timeout_seconds14int32default_timeout_seconds bounds the synchronous tool call.
input_schema_json15bytesinput_schema_json is the JSON Schema document describing the tool's typed arguments (fed to the orchestrator LLM for tool_use selection).
output_proto_type16stringoutput_proto_type is the fully-qualified proto message name the tool's response conforms to, e.g. "gibson.tool.nmap.v1.ExecuteResponse".
default_parse_quality17ParseQualitydefault_parse_quality advertises how richly the runner's parser will populate the response's field-100 DiscoveryResult for this tool.
content_trust18ContentTrustcontent_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 api/proto/DISCOVERY_RESULT.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#TypeDescription
code1stringcode is a short machine-readable error identifier (e.g. "TOOL_NOT_FOUND").
message2string—
retryable3boolretryable indicates whether the caller should attempt to retry the operation.

ComponentEvent

ComponentEvent is one lifecycle event for the calling component.

Field#TypeDescription
type1string—
secret_name2string—
reason3string—
version4int64—
occurred_at5google.protobuf.Timestamp—

ComponentMethod

ComponentMethod is the rich, per-method descriptor for a plugin method, carrying the metadata the connector catalog and SearchTools surface to agents.

Field#TypeDescription
name1stringname is the method identifier (matches an entry in RegisterComponentRequest.methods).
description2stringdescription is a human-readable explanation of the method, surfaced in the catalog so an agent can disambiguate similar tools.
input_schema_json3stringinput_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#TypeDescription
work_id1string—
mission_definition_json2bytesmission_definition_json is the JSON-encoded mission definition.
target_id3string—
opts_json4bytesopts_json is the JSON-encoded mission.CreateMissionOpts.

CreateMissionResponse

CreateMissionResponse carries the created mission info.

Field#TypeDescription
mission_json1bytesmission_json is the JSON-encoded mission.MissionInfo.

DelegateToAgentRequest

DelegateToAgentRequest dispatches a sub-task to another agent.

Field#TypeDescription
work_id1string—
agent_name2string—
task_json3bytestask_json is the JSON-encoded agent.Task to delegate.

DelegateToAgentResponse

DelegateToAgentResponse carries the delegated agent's result.

Field#TypeDescription
result_json1bytesresult_json is the JSON-encoded agent.Result.

DisablePluginRequest

DisablePluginRequest deactivates the named plugin for the calling tenant.

Field#TypeDescription
plugin_name1stringplugin_name is the unique identifier of the plugin to disable.

DisablePluginResponse

DisablePluginResponse reports the outcome of a disable operation.

Field#TypeDescription
success1boolsuccess is true when the plugin was disabled without error.
message2string—

EnablePluginRequest

EnablePluginRequest activates a plugin and optionally supplies initial configuration.

Field#TypeDescription
plugin_name1stringplugin_name is the unique identifier of the plugin to enable.
config_json2stringconfig_json is an optional JSON-encoded configuration blob for the plugin.

EnablePluginResponse

EnablePluginResponse reports the outcome of an enable operation.

Field#TypeDescription
success1boolsuccess is true when the plugin was enabled without error.
message2string—

FindSimilarAttacksRequest

FindSimilarAttacksRequest searches for attack patterns similar to the given content.

Field#TypeDescription
work_id1string—
content2string—
top_k3int32—

FindSimilarAttacksResponse

FindSimilarAttacksResponse carries matching attack patterns.

Field#TypeDescription
results_json1bytesresults_json is a JSON-encoded []graphrag.AttackPattern.

FindSimilarFindingsRequest

FindSimilarFindingsRequest searches for findings similar to the given one.

Field#TypeDescription
work_id1string—
finding_id2string—
top_k3int32—

FindSimilarFindingsResponse

FindSimilarFindingsResponse carries matching findings.

Field#TypeDescription
results_json1bytesresults_json is a JSON-encoded []graphrag.FindingNode.

GetAttackChainsRequest

GetAttackChainsRequest requests multi-hop attack paths from a technique.

Field#TypeDescription
work_id1string—
technique_id2string—
max_depth3int32—

GetAttackChainsResponse

GetAttackChainsResponse carries attack chain results.

Field#TypeDescription
results_json1bytesresults_json is a JSON-encoded []graphrag.AttackChain.

GetCredentialRequest

GetCredentialRequest retrieves a tenant-scoped credential.

Field#TypeDescription
work_id1string—
name2string—

GetCredentialResponse

GetCredentialResponse carries the credential.

Field#TypeDescription
credential_json1bytescredential_json is the JSON-encoded types.Credential.

GetFindingsRequest

GetFindingsRequest queries previously submitted findings.

Field#TypeDescription
work_id1string—
filter_json2bytesfilter_json is a JSON-encoded finding.Filter.

GetFindingsResponse

GetFindingsResponse carries matching findings.

Field#TypeDescription
findings_json1bytesfindings_json is a JSON-encoded []*finding.Finding.

GetMissionResultsRequest

GetMissionResultsRequest requests the final results of a mission.

Field#TypeDescription
work_id1string—
mission_id2string—

GetMissionResultsResponse

GetMissionResultsResponse carries the mission results.

Field#TypeDescription
result_json1bytesresult_json is the JSON-encoded mission.MissionResult.

GetMissionRunHistoryRequest

GetMissionRunHistoryRequest requests summaries of previous mission runs.

Field#TypeDescription
work_id1string—

GetMissionRunHistoryResponse

GetMissionRunHistoryResponse carries run summaries.

Field#TypeDescription
runs_json1bytesruns_json is the JSON-encoded []types.MissionRunSummary.

GetMissionStatusRequest

GetMissionStatusRequest requests the current status of a mission.

Field#TypeDescription
work_id1string—
mission_id2string—

GetMissionStatusResponse

GetMissionStatusResponse carries the mission status.

Field#TypeDescription
status_json1bytesstatus_json is the JSON-encoded mission.MissionStatusInfo.

GetPluginConfigRequest

GetPluginConfigRequest requests the current configuration for a named plugin.

Field#TypeDescription
plugin_name1stringplugin_name is the unique identifier of the plugin to inspect.

GetPluginConfigResponse

GetPluginConfigResponse carries the stored configuration and its schema.

Field#TypeDescription
config_json1stringconfig_json is the JSON-encoded configuration currently stored for the plugin.
config_schema_json2stringconfig_schema_json is the JSON Schema document describing the plugin's configurable fields.

GetRelatedFindingsRequest

GetRelatedFindingsRequest requests findings related via graph relationships.

Field#TypeDescription
work_id1string—
finding_id2string—

GetRelatedFindingsResponse

GetRelatedFindingsResponse carries related findings.

Field#TypeDescription
results_json1bytesresults_json is a JSON-encoded []graphrag.FindingNode.

GetRunFindingsRequest

GetRunFindingsRequest queries findings scoped to mission runs.

Field#TypeDescription
work_id1string—
scope2stringscope: "previous" for prior run, "all" for all runs.
filter_json3bytesfilter_json is a JSON-encoded finding.Filter.

GetRunFindingsResponse

GetRunFindingsResponse carries matching run-scoped findings.

Field#TypeDescription
findings_json1bytesfindings_json is a JSON-encoded []*finding.Finding.

GetTaxonomySchemaRequest

GetTaxonomySchemaRequest requests the current taxonomy definition.

Field#TypeDescription
work_id1string—

GetTaxonomySchemaResponse

GetTaxonomySchemaResponse carries the taxonomy schema.

Field#TypeDescription
schema_json1bytesschema_json is the JSON-encoded taxonomy definition.

HeartbeatRequest

HeartbeatRequest is the periodic health pulse sent by a registered component.

Field#TypeDescription
instance_id1string—
health_status2stringhealth_status is the component's self-reported health: "healthy", "degraded", or "unhealthy".
health_message3stringhealth_message provides optional human-readable detail about the health status.
member4gibson.bank.v1.MemberStatusmember is the bank member status when this instance is a member of a bank: busy or not busy, how many jobs it holds, which ones, and the coding-agent version it runs. The daemon routes a queued job to a member that reports a free slot. Absent for a component that is not a bank member. health_status and health_message stay: they report whether the process is well, not whether it is busy.

HeartbeatResponse

HeartbeatResponse is returned by the server after each heartbeat.

Field#TypeDescription
registered1boolregistered indicates whether the server still considers this instance registered. A false value means the component must re-register before polling for work.
config_updates2map<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):

  1. An assistant turn that requested tool calls sets role to "assistant" and carries the calls in tool_calls (typically copied verbatim from a prior CompleteWithToolsResponse.tool_calls). content holds any accompanying assistant text and may be empty.
  2. A tool-result turn sets role to "tool", tool_call_id to the ToolCallResult.id it answers, and content to 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#TypeDescription
role1stringrole is "system", "user", "assistant", or "tool".
content2string—
tool_calls3repeated ToolCallResulttool_calls carries the tool calls an assistant turn requested. Set only when role is "assistant"; empty for all other roles.
tool_call_id4stringtool_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#TypeDescription
work_id1string—

ListAgentsResponse

ListAgentsResponse carries all agent descriptors visible to the caller.

Field#TypeDescription
agents1repeated 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#TypeDescription
plugins1repeated PluginCatalogEntryProtoplugins is the ordered list of catalog entries for every registered plugin.

ListMissionsRequest

ListMissionsRequest returns missions matching the given filter.

Field#TypeDescription
work_id1string—
filter_json2bytesfilter_json is the JSON-encoded mission.MissionFilter.

ListMissionsResponse

ListMissionsResponse carries matching missions.

Field#TypeDescription
missions_json1bytesmissions_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#TypeDescription
plugins1repeated PluginAccessProtoplugins is the ordered list of plugin access records for the calling tenant.

ListToolsRequest

ListToolsRequest requests descriptors for all available tools.

Field#TypeDescription
work_id1string—

ListToolsResponse

ListToolsResponse carries all tool descriptors visible to the caller.

Field#TypeDescription
tools1repeated ToolDescriptorProto—

PluginAccessProto

PluginAccessProto represents the access record linking a tenant to a specific plugin.

Field#TypeDescription
tenant_id1stringtenant_id is the identifier of the tenant that owns this access record.
plugin_name2stringplugin_name is the unique identifier of the plugin.
enabled3boolenabled indicates whether the plugin is currently active for this tenant.
source4stringsource identifies how the tenant gained access to this plugin (e.g. "manual", "helm").
configured_at5stringconfigured_at is the RFC 3339 timestamp of the last configuration change.
configured_by6stringconfigured_by is the identity (user or service account) that applied the last config.
has_config7boolhas_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#TypeDescription
name1stringname is the unique identifier for the plugin (e.g. "gitlab").
version2string—
description3string—
methods4repeated stringmethods lists the callable method names exposed by this plugin.
config_schema_json5stringconfig_schema_json is the JSON Schema document describing the plugin's configurable fields.
enabled6boolenabled indicates whether the plugin is currently active for the calling tenant.
configured7boolconfigured indicates whether the plugin has a non-empty configuration stored.
health_status8stringhealth_status is the last-known health of the plugin: "healthy", "degraded", or "unhealthy".
source9stringsource identifies where this plugin was discovered (e.g. "registry", "local").
instance_count10int32instance_count is the number of running instances currently registered.

PollWorkRequest

PollWorkRequest is sent by a component to request the next available work item.

Field#TypeDescription
instance_id1string—
timeout_ms2int32timeout_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#TypeDescription
work_id1stringwork_id uniquely identifies this work item. Must be included in SubmitResult.
work_type2stringwork_type describes what kind of work this is (e.g. "execute", "stream").
payload3bytespayload is the serialized work payload; interpretation depends on work_type.
context4map<string, string>context carries arbitrary key-value metadata associated with this work item.
timeout_ms5int64timeout_ms is the maximum time allowed to complete and submit the result.

QueryNodesRequest

QueryNodesRequest is a harness proxy request for knowledge graph queries.

Field#TypeDescription
work_id1string—
query2gibson.graphrag.v1.GraphQuery—

QueryNodesResponse

QueryNodesResponse carries knowledge graph query results.

Field#TypeDescription
results1repeated gibson.graphrag.v1.QueryResult—

QueryPluginRequest

QueryPluginRequest is a harness proxy request to invoke a plugin method.

Field#TypeDescription
work_id1string—
plugin_name2string—
method3string—
params_json4stringparams_json is the JSON-encoded method parameters.
timeout_ms5int64—

QueryPluginResponse

QueryPluginResponse carries the plugin method result.

Field#TypeDescription
result_json1stringresult_json is the JSON-encoded method result.
error2ComponentError—

QueueToolWorkRequest

QueueToolWorkRequest submits a batch of tool invocations for parallel execution.

Field#TypeDescription
work_id1string—
tool_name2string—
inputs_json3repeated stringinputs_json is a list of JSON-encoded tool inputs.

QueueToolWorkResponse

QueueToolWorkResponse carries the assigned job ID for tracking results.

Field#TypeDescription
job_id1string—

RegisterComponentRequest

RegisterComponentRequest is sent by a component on startup to announce itself and declare its capabilities.

Field#TypeDescription
kind1stringkind identifies the component type: "agent", "tool", or "plugin".
name2string—
version3string—
metadata4map<string, string>—
capabilities5repeated stringcapabilities lists agent capabilities (used when kind == "agent").
methods6repeated stringmethods lists plugin methods (used when kind == "plugin").
input_message_type7stringinput_message_type is the fully-qualified proto message type for tool input (used when kind == "tool").
output_message_type8stringoutput_message_type is the fully-qualified proto message type for tool output (used when kind == "tool").
file_descriptor_set9bytesfile_descriptor_set is the serialized proto FileDescriptorSet describing the tool's schema (used when kind == "tool").
config_schema_json10stringconfig_schema_json is the JSON Schema document describing the plugin's configuration surface (used when kind == "plugin").
ontology_extension11gibson.graphrag.v1.OntologyExtensionontology_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_descriptors12repeated ComponentMethodmethod_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#TypeDescription
instance_id1stringinstance_id is the unique identifier assigned to this component instance.
heartbeat_interval_ms2int32heartbeat_interval_ms is the recommended interval between Heartbeat calls.
poll_interval_ms3int32poll_interval_ms is the recommended interval between PollWork calls when the previous poll returned no work.
poll_timeout_ms4int32poll_timeout_ms is the server-side long-poll timeout the component should pass in PollWorkRequest.timeout_ms.
config5map<string, string>config carries initial configuration values for the component.

ReportStepHintsRequest

ReportStepHintsRequest reports planning step hints from an agent.

Field#TypeDescription
work_id1string—
hints_json2byteshints_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#TypeDescription
vcpu1int32—
memory2string—

RunMissionRequest

RunMissionRequest queues a mission for execution.

Field#TypeDescription
work_id1string—
mission_id2string—
opts_json3bytesopts_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#TypeDescription
work_id1string—
finding2bytesfinding 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#TypeDescription
finding_id1stringfinding_id is the server-assigned identifier for the recorded finding.

SubmitResultRequest

SubmitResultRequest delivers the outcome of a completed work item back to Gibson.

Field#TypeDescription
work_id1string—
result2bytesresult is the serialized result payload.
error3ComponentErrorerror 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#TypeDescription
plugin_name1stringplugin_name is the unique identifier of the plugin to test.
config_json2stringconfig_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#TypeDescription
success1boolsuccess is true when the plugin endpoint was reachable and credentials were accepted.
message2string—
latency_ms3int64latency_ms is the round-trip time of the test probe in milliseconds.

TokenUsage

TokenUsage reports token consumption for an LLM call.

Field#TypeDescription
input_tokens1int32—
output_tokens2int32—

ToolCallResult

ToolCallResult represents a tool call made by the LLM.

Field#TypeDescription
id1string—
name2string—
arguments_json3stringarguments is the JSON-encoded arguments the LLM generated for this tool call.

ToolDefinition

ToolDefinition describes a tool available for LLM function calling.

Field#TypeDescription
name1string—
description2string—
input_schema_json3stringinput_schema is a JSON Schema describing the tool's input parameters.

ToolDescriptorProto

ToolDescriptorProto describes a registered tool.

Field#TypeDescription
name1string—
version2string—
description3string—
tags4repeated string—
input_message_type5string—
output_message_type6string—

ToolResultsRequest

ToolResultsRequest requests streaming results for a previously queued tool batch.

Field#TypeDescription
work_id1string—
job_id2string—

ToolResultsResponse

ToolResultsResponse is a single result from a queued tool batch.

Field#TypeDescription
index1int32index is the zero-based position in the original inputs array.
output_json2stringoutput_json is the JSON-encoded tool output.
error3ComponentError—
done4booldone is true on the final result.

UpdatePluginConfigRequest

UpdatePluginConfigRequest replaces the stored configuration for an enabled plugin.

Field#TypeDescription
plugin_name1stringplugin_name is the unique identifier of the plugin whose config will be updated.
config_json2stringconfig_json is the JSON-encoded configuration blob to persist.

UpdatePluginConfigResponse

UpdatePluginConfigResponse reports the outcome of a config update operation.

Field#TypeDescription
success1boolsuccess is true when the configuration was updated without error.
message2string—

WaitMissionRequest

WaitMissionRequest blocks until a mission completes or the timeout expires.

Field#TypeDescription
work_id1string—
mission_id2string—
timeout_ms3int64timeout_ms is the maximum time to wait. 0 means wait indefinitely.

WaitMissionResponse

WaitMissionResponse carries the final mission result.

Field#TypeDescription
result_json1bytesresult_json is the JSON-encoded mission.MissionResult.

WatchComponentEventsRequest

WatchComponentEventsRequest is empty. The daemon takes the component from the caller's identity.

No fields.

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_UNSPECIFIED0—
CONTENT_TRUST_TRUSTED1CONTENT_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_UNTRUSTED2CONTENT_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_UNSPECIFIED0—
DISPATCH_MODE_SANDBOXED1DISPATCH_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_PLUGIN2DISPATCH_MODE_PLUGIN: the component is a long-running plugin process that heartbeats to the registry and serves gRPC.
DISPATCH_MODE_AGENT3DISPATCH_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_UNSPECIFIED0—
PARSE_QUALITY_STRUCTURED1PARSE_QUALITY_STRUCTURED: response includes fully populated taxonomy nodes (Host, Port, Service, Finding,...).
PARSE_QUALITY_PARTIAL2PARSE_QUALITY_PARTIAL: response includes some taxonomy nodes plus raw output preserved in Evidence nodes.
PARSE_QUALITY_RAW3PARSE_QUALITY_RAW: response preserves stdout as an Evidence node only; no taxonomy-specific nodes were extracted.
PARSE_QUALITY_FAILED4PARSE_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):

  1. Enum values (MissionStatus, etc.) are append-only. No renumbers, no deletions. Deprecated values use [deprecated = true] plus a // reserved comment.
  2. 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).
  3. 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.

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.

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.

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.

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.

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#TypeDescription
event_type1stringevent_type identifies the agent event type (registered, unregistered, health_change)
timestamp2int64timestamp is when the event occurred (Unix timestamp)
agent_id3stringagent_id is the agent identifier
agent_name4stringagent_name is the agent name
message5stringmessage is a human-readable message
data6gibson.common.v1.TypedMapdata contains event-specific data (typed map)

AgentInfo

AgentInfo describes a registered agent.

Field#TypeDescription
id1stringid is the unique agent identifier
name2stringname is the agent name
kind3stringkind is the component kind (always "agent")
version4stringversion is the agent version
endpoint5stringendpoint is the gRPC endpoint for the agent
capabilities6repeated stringcapabilities lists agent capabilities
health7stringhealth is the agent health status (healthy, unhealthy)
last_seen8int64last_seen is when the agent was last seen (Unix timestamp)

BuildComponentRequest

BuildComponentRequest requests rebuilding a component from source.

Field#TypeDescription
kind1stringkind is the component kind ("agent", "tool", "plugin")
name2stringname is the component name to build

BuildComponentResponse

BuildComponentResponse returns the result of building a component.

Field#TypeDescription
success1boolsuccess indicates if the build was successful
stdout2stringstdout contains the build standard output
stderr3stringstderr contains the build standard error
duration_ms4int64duration_ms is the build time in milliseconds
message5stringmessage provides additional context or error information

CUECompletionItem

CUECompletionItem is a single completion suggestion from CompleteMissionCUE.

Field#TypeDescription
label1stringlabel is the text to insert (the completion token).
detail2stringdetail is a short type annotation or signature hint.
documentation3stringdocumentation is the Markdown documentation for this item.
kind4stringkind 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#TypeDescription
line1int32line is the 1-based source line number.
col2int32col is the 1-based column offset.
message3stringmessage is the human-readable diagnostic text.
severity4stringseverity is "error" or "warning".

Capabilities

Capabilities describes runtime privileges and features available to a tool.

Field#TypeDescription
has_root1boolhas_root indicates the tool is running as uid 0 (root user)
has_sudo2boolhas_sudo indicates passwordless sudo access is available
can_raw_socket3boolcan_raw_socket indicates the ability to create raw network sockets
features4map<string, bool>features contains tool-specific feature availability flags
blocked_args5repeated stringblocked_args lists command-line arguments that cannot be used
arg_alternatives6map<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#TypeDescription
checkpoint_id1stringcheckpoint_id is the unique identifier of the source checkpoint.
saved_at_unix_seconds2int64saved_at_unix_seconds is when the checkpoint was captured (Unix epoch seconds).
super_step_number3int32super_step_number identifies which super-step boundary this checkpoint captured (1-based; 0 if not super-step-aligned).
cadence_reason4stringcadence_reason is a free-form classifier for why the checkpoint was taken. Recognized values per R9.1: "super_step", "parallel_group_complete", "approval_required", "graceful_shutdown". Promoted to enum at v1.0.0.
size_bytes5int64size_bytes is the wire size of the checkpoint payload (advisory).

CompleteMissionCUERequest

CompleteMissionCUERequest requests completion items at a cursor position.

Field#TypeDescription
cue_source1stringcue_source is the raw CUE source text at the time of the request.
line2int32line is the 1-based cursor line number.
col3int32col is the 1-based cursor column offset.

CompleteMissionCUEResponse

CompleteMissionCUEResponse returns the completion items for the cursor position.

Field#TypeDescription
items1repeated CUECompletionItemitems is the list of completion candidates.

ConnectRequest

ConnectRequest initiates a client connection to the daemon.

Field#TypeDescription
client_version1stringclient_version is the version of the Gibson CLI client
client_id2stringclient_id is an optional unique identifier for this client

ConnectResponse

ConnectResponse returns connection metadata.

Field#TypeDescription
daemon_version1stringdaemon_version is the version of the running daemon
session_id2stringsession_id is a unique identifier for this client session
grpc_address3stringgrpc_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#TypeDescription
definition1gibson.mission.v1.MissionDefinitiondefinition is the fully-formed mission definition to register.
cue_source2stringcue_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#TypeDescription
mission_definition_id1stringmission_definition_id is the server-assigned identifier for the definition.
info2MissionDefinitionInfoinfo 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#TypeDescription
name1stringname is the mission name
description2stringdescription is the mission description
target_id3stringtarget_id is the ID of a pre-registered target.
mission_definition_id4stringmission_definition_id is the ID of a pre-registered mission definition.
constraints5gibson.mission.v1.MissionConstraintsconstraints 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 (M4).
metadata6map<string, string>metadata provides additional mission metadata
variables7map<string, string>variables contains mission variables to override at creation time
memory_continuity8stringmemory_continuity defines how agent memory is shared across mission runs Valid values: "isolated" (default), "inherit", "shared"
source_yaml9stringsource_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#TypeDescription
success1boolsuccess indicates if the mission was created successfully
mission2Missionmission is the created mission
message3stringmessage provides additional context or error information

CreateTargetRequest

CreateTargetRequest carries the metadata for a new target.

Field#TypeDescription
target1gibson.target.v1.Targettarget carries the new target's metadata. Its id field is ignored; the daemon mints the canonical UUID.

CreateTargetResponse

CreateTargetResponse returns the minted target.

Field#TypeDescription
target_id1stringtarget_id is the server-minted UUID — the canonical identity clients use to reference this target thereafter.
target2gibson.target.v1.Targettarget is the full stored target, including the minted id and timestamps.

DeleteTargetRequest

DeleteTargetRequest removes a target by UUID.

Field#TypeDescription
target_id1stringtarget_id is the UUID of the target to delete.

DeleteTargetResponse

DeleteTargetResponse reports the outcome of a delete.

Field#TypeDescription
success1bool—

Event

Event represents a generic daemon event.

Field#TypeDescription
event_type1stringevent_type identifies the type of event
timestamp2int64timestamp is when the event occurred (Unix timestamp)
source3stringsource is the event source (mission, agent, daemon, etc.)
data4gibson.common.v1.TypedMapdata contains event-specific data (typed map)
mission_event5MissionEvent—
agent_event7AgentEvent—
finding_event8FindingEvent—
tool_event9ToolEvent—
llm_event10LLMEvent—
orchestrator_event11OrchestratorEvent—

oneof event — one of: mission_event, agent_event, finding_event, tool_event, llm_event, orchestrator_event.

FindingEvent

FindingEvent represents a finding discovery event.

Field#TypeDescription
event_type1stringevent_type identifies the finding event type (discovered, updated)
timestamp2int64timestamp is when the event occurred (Unix timestamp)
finding3FindingInfofinding is the finding information
mission_id4stringmission_id is the mission that discovered the finding

FindingInfo

FindingInfo describes a discovered vulnerability.

Field#TypeDescription
id1stringid is the unique finding identifier
title2stringtitle is the finding title
severity3stringseverity is the severity level (info, low, medium, high, critical)
category4stringcategory is the finding category
description5stringdescription is the detailed finding description
technique6stringtechnique is the MITRE ATT&CK or ATLAS technique ID
evidence7stringevidence contains supporting evidence
timestamp8int64timestamp is when the finding was discovered (Unix timestamp)

GetAgentStatusRequest

GetAgentStatusRequest queries a specific agent.

Field#TypeDescription
agent_id1stringagent_id is the unique agent identifier

GetAgentStatusResponse

GetAgentStatusResponse returns agent status.

Field#TypeDescription
agent1AgentInfoagent is the agent information
active2boolactive indicates if the agent is currently executing a task
current_task3stringcurrent_task describes the active task (if any)
task_start_time4int64task_start_time is when the current task started (Unix timestamp)

GetComponentLogsRequest

GetComponentLogsRequest requests log entries for a component.

Field#TypeDescription
kind1stringkind is the component kind ("agent", "tool", "plugin")
name2stringname is the component name to get logs for
follow3boolfollow indicates whether to stream logs continuously
lines4int32lines is the number of lines to return (0 = all, default 50)

GetComponentLogsResponse

GetComponentLogsResponse wraps a LogEntry for the GetComponentLogs streaming RPC.

Field#TypeDescription
timestamp1int64timestamp is when the log entry was created (Unix timestamp)
level2stringlevel is the log level (debug, info, warn, error)
message3stringmessage is the log message
fields4gibson.common.v1.TypedMapfields contains additional structured log fields (typed map)

GetMissionDefinitionRequest

GetMissionDefinitionRequest fetches a single mission definition by name.

Field#TypeDescription
name1stringname 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#TypeDescription
definition1gibson.mission.v1.MissionDefinitiondefinition is the full mission definition proto. Never nil on success.
mission_definition_id2stringmission_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_source3stringcue_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#TypeDescription
mission_definition_id1stringmission_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#TypeDescription
graph1MissionGraph—

GetMissionHistoryRequest

GetMissionHistoryRequest queries mission execution history by name.

Field#TypeDescription
name1stringname is the mission name to query history for
limit2int32limit restricts the number of results (default: 100)
offset3int32offset is the pagination offset (default: 0)

GetMissionHistoryResponse

GetMissionHistoryResponse returns mission execution history.

Field#TypeDescription
runs1repeated MissionRunruns contains all mission runs for the requested name
total2int32total is the total count of runs (for pagination)

GetMissionLayoutRequest

GetMissionLayoutRequest selects the layout to read.

Field#TypeDescription
mission_definition_id1string—

GetMissionLayoutResponse

GetMissionLayoutResponse returns the saved layout, or an empty layout (no node positions, empty version) when none has been saved.

Field#TypeDescription
layout1MissionLayout—

GetMyPermissionsRequest

GetMyPermissionsRequest queries the caller's permissions within a tenant.

Field#TypeDescription
tenant_id1stringtenant_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#TypeDescription
tenant_id1stringtenant_id is the tenant this summary is scoped to
role2stringrole is the caller's FGA-backed role ("owner", "admin", "operator", "viewer")
is_admin3boolis_admin is true when the caller holds the admin or owner relation on the tenant
component_grants4repeated PermissionComponentGrantcomponent_grants lists the component access grants held by the caller
team_memberships5repeated PermissionTeamMembershipteam_memberships lists the teams the caller belongs to within this tenant

GetTargetRequest

GetTargetRequest looks up a target by UUID.

Field#TypeDescription
target_id1stringtarget_id is the target UUID.

GetTargetResponse

GetTargetResponse returns the requested target.

Field#TypeDescription
target1gibson.target.v1.Target—

HoverMissionCUERequest

HoverMissionCUERequest requests hover documentation for a cursor position.

Field#TypeDescription
cue_source1stringcue_source is the raw CUE source text at the time of the request.
line2int32line is the 1-based cursor line number.
col3int32col 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#TypeDescription
markdown1stringmarkdown is the hover documentation rendered as Markdown.

LLMEvent

LLMEvent represents an LLM activity event.

Field#TypeDescription
event_type1stringevent_type identifies the LLM event type (llm.request.started, llm.request.completed, llm.request.failed)
timestamp2int64timestamp is when the event occurred (Unix timestamp)
agent_id3stringagent_id is the agent identifier
agent_name4stringagent_name is the agent name
model5stringmodel is the LLM model identifier (e.g., "claude-3-5-sonnet-20241022")
slot6stringslot is the LLM slot (primary, fast, reasoning)
message_count7int32message_count is the number of messages in the request
prompt_tokens8int32prompt_tokens is the number of input tokens
completion_tokens9int32completion_tokens is the number of output tokens
total_tokens10int32total_tokens is the sum of prompt and completion tokens
duration_ms11doubleduration_ms is the request duration in milliseconds
cached12boolcached indicates if the response was served from cache
error13stringerror contains error information if the event represents a failure
error_code14stringerror_code identifies the error type (rate_limit, context_length, api_error, timeout)
will_retry15boolwill_retry indicates if the failed request will be retried

ListAgentsRequest

ListAgentsRequest queries agent registry.

Field#TypeDescription
kind1stringkind filters by component kind (empty = all agents)

ListAgentsResponse

ListAgentsResponse returns registered agents.

Field#TypeDescription
agents1repeated AgentInfoagents is the list of registered agents

ListMissionDefinitionsRequest

ListMissionDefinitionsRequest queries installed mission definitions.

Field#TypeDescription
limit1int32limit restricts the number of results (0 = all)
offset2int32offset is the pagination offset

ListMissionDefinitionsResponse

ListMissionDefinitionsResponse returns installed mission definitions.

Field#TypeDescription
missions1repeated MissionDefinitionInfomissions is the list of installed mission definitions
total2int32total is the total count of mission definitions (for pagination)

ListMissionsRequest

ListMissionsRequest queries mission list.

Field#TypeDescription
active_only1boolactive_only filters to only running missions
limit2int32limit restricts the number of results
offset3int32offset is the pagination offset
status_filter4stringstatus_filter filters missions by status (running, completed, failed, cancelled)
name_pattern5stringname_pattern filters missions by name using glob pattern matching

ListMissionsResponse

ListMissionsResponse returns mission list.

Field#TypeDescription
missions1repeated MissionInfomissions is the list of missions
total2int32total 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#TypeDescription
memberships1repeated Membershipmemberships 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#TypeDescription
plugins1repeated PluginInfoplugins is the list of registered plugins

ListTargetsRequest

ListTargetsRequest narrows the tenant's targets.

Field#TypeDescription
filter1gibson.target.v1.TargetFilterfilter narrows the result set. Omit for the tenant's full target list.

ListTargetsResponse

ListTargetsResponse returns the matching targets.

Field#TypeDescription
targets1repeated gibson.target.v1.Target—

ListToolsRequest

ListToolsRequest queries tool registry.

No fields.

ListToolsResponse

ListToolsResponse returns registered tools.

Field#TypeDescription
tools1repeated ToolInfotools is the list of registered tools

LogEntry

LogEntry represents a single log entry from a component.

Field#TypeDescription
timestamp1int64timestamp is when the log entry was created (Unix timestamp)
level2stringlevel is the log level (debug, info, warn, error)
message3stringmessage is the log message
fields4gibson.common.v1.TypedMapfields 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#TypeDescription
tenant_id1stringtenant_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_name2stringtenant_name is the human-friendly display name. Best-effort: when the daemon's tenant-name cache misses, this falls back to tenant_id.
role3stringrole 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#TypeDescription
id1stringid is the unique mission identifier
name2stringname is the human-readable mission name
status3MissionStatusstatus is the current mission status
target_id4stringtarget_id is the target identifier
mission_definition_id5stringmission_definition_id is the mission definition identifier
constraints6gibson.mission.v1.MissionConstraintsconstraints defines execution constraints. Canonical type per ADR 0004: gibson.mission.v1.MissionConstraints is the single platform-wide shape.
metrics7MissionMetricsmetrics contains current execution metrics
checkpoint8MissionCheckpointcheckpoint is the latest checkpoint (if any)
run_number9int32run_number is the sequential run number for this mission name
created_at10int64created_at is when the mission was created (Unix timestamp in milliseconds)
updated_at11int64updated_at is when the mission was last updated (Unix timestamp in milliseconds)
started_at12int64started_at is when the mission execution started (Unix timestamp in milliseconds)
completed_at13int64completed_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#TypeDescription
id1stringid is the unique checkpoint identifier
version2int32version is the checkpoint format version
completed_nodes3int32completed_nodes is the number of nodes that had completed at checkpoint time
total_nodes4int32total_nodes is the total number of nodes in the mission
created_at5int64created_at is when this checkpoint was created (Unix timestamp in milliseconds)
state_data6bytesstate_data is the serialized checkpoint state (opaque blob)

MissionDefinitionInfo

MissionDefinitionInfo describes an installed mission definition.

Field#TypeDescription
name1stringname is the mission name
version2stringversion is the mission version
description3stringdescription is the mission description
source4stringsource is the Git repository URL
installed_at5int64installed_at is when the mission was installed (Unix timestamp)
updated_at6int64updated_at is when the mission was last updated (Unix timestamp)
node_count7int32node_count is the number of nodes in the mission
mission_definition_id8stringmission_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#TypeDescription
event_type1stringevent_type identifies the type of event
timestamp2int64timestamp is when the event occurred (Unix timestamp)
mission_id3stringmission_id is the unique mission identifier
node_id4stringnode_id is the mission node ID (if applicable)
message5stringmessage is a human-readable event message
data6gibson.common.v1.TypedMapdata contains event-specific data (typed map)
error7stringerror contains error information if the event represents an error
result8OperationResultresult 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#TypeDescription
nodes1repeated MissionGraphNode—
edges2repeated MissionGraphEdge—
entry_points3repeated string—
exit_points4repeated string—
viewport5MissionGraphViewport—

MissionGraphEdge

MissionGraphEdge is a renderable data-flow line between two boxes.

Field#TypeDescription
from1string—
to2string—
condition3stringcondition is the optional CEL guard carried on an explicit mission edge.
role4stringrole 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#TypeDescription
id1stringid is the mission node id this box represents.
kind2stringkind 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).
name3stringname is the human-readable label (falls back to id when unset).
summary4stringsummary is a kind-specific one-line descriptor (agent name, tool name, plugin name+method, condition expression, etc.). May be empty.
is_entry5boolis_entry / is_exit mark mission entry and exit nodes.
is_exit6bool—
rank7int32rank is the 0-based topological layer (left-to-right depth).
x8doublex / y are the box position in the renderer's abstract canvas space: the saved layout when present, else the deterministic auto-layout position.
y9double—
layout_source10stringlayout_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#TypeDescription
x1double—
y2double—
zoom3double—

MissionInfo

MissionInfo describes a mission.

Field#TypeDescription
id1stringid is the unique mission identifier
status3stringstatus is the mission status (running, completed, failed)
start_time4int64start_time is when the mission started (Unix timestamp)
end_time5int64end_time is when the mission ended (Unix timestamp, 0 if running)
finding_count6int32finding_count is the number of findings discovered
name7stringname is the human-readable mission name
description9stringdescription is the mission description
progress10doubleprogress is the mission completion progress from 0.0 to 1.0
mission_definition_id11stringmission_definition_id is the registered mission definition this run used.
target_id12stringtarget_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#TypeDescription
mission_definition_id1stringmission_definition_id is the definition this layout belongs to.
nodes2repeated NodePositionnodes are the saved per-node positions. Nodes without an entry fall back to the daemon's deterministic auto-layout in GetMissionGraph.
viewport3MissionGraphViewportviewport is the saved pan/zoom framing (optional).
version4stringversion 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#TypeDescription
turns_used1int32turns_used is the number of agent turns/iterations executed
nodes_executed2int32nodes_executed is the number of mission nodes that ran successfully
nodes_failed3int32nodes_failed is the number of mission nodes that failed
findings_count4int32findings_count is the total number of findings discovered
critical_count5int32critical_count is the number of critical severity findings
high_count6int32high_count is the number of high severity findings
medium_count7int32medium_count is the number of medium severity findings
low_count8int32low_count is the number of low severity findings
tokens_used9int64tokens_used is the total LLM tokens consumed

MissionRun

MissionRun represents a single execution instance of a mission.

Field#TypeDescription
mission_id1stringmission_id is the unique identifier for this run
run_number2int32run_number is the sequential run number for this mission name
status3stringstatus is the final status of this run (running, completed, failed, cancelled, paused)
created_at4int64created_at is when this run was created (Unix timestamp)
completed_at5int64completed_at is when this run completed (Unix timestamp, 0 if not completed)
findings_count6int32findings_count is the number of findings discovered in this run
previous_run_id7stringprevious_run_id is the ID of the previous run (if any)
trace_id8stringtrace_id is the OTel trace ID for Langfuse lookup

NodePosition

NodePosition is a single node's saved diagram coordinate.

Field#TypeDescription
node_id1string—
x2double—
y3double—

OperationResult

OperationResult represents the unified result of a long-running operation (attack or mission). This provides typed metrics instead of JSON-encoded strings.

Field#TypeDescription
status1stringstatus of the operation (success, failed, timeout, cancelled)
duration_ms2int64duration_ms is the total duration in milliseconds
started_at3int64started_at is the Unix timestamp (milliseconds) when the operation started
completed_at4int64completed_at is the Unix timestamp (milliseconds) when the operation completed
turns_used5int32turns_used is the number of agent turns/iterations executed
tokens_used6int64tokens_used is the total LLM tokens consumed
nodes_executed7int32nodes_executed is the number of mission nodes that ran successfully
nodes_failed8int32nodes_failed is the number of mission nodes that failed
findings_count9int32findings_count is the total number of findings discovered
critical_count10int32critical_count is the number of critical severity findings
high_count11int32high_count is the number of high severity findings
medium_count12int32medium_count is the number of medium severity findings
low_count13int32low_count is the number of low severity findings
error_message14stringerror_message contains the error message if status == "failed"
error_code15stringerror_code contains a machine-readable error code if status == "failed"

OrchestratorEvent

OrchestratorEvent represents an orchestrator decision event.

Field#TypeDescription
event_type1stringevent_type identifies the orchestrator event type (orchestrator.decision, orchestrator.approval_required)
timestamp2int64timestamp is when the event occurred (Unix timestamp)
mission_id3stringmission_id is the mission identifier
iteration4int32iteration is the orchestrator iteration number
action5stringaction is the orchestrator action (execute_agent, skip_node, wait, complete, request_approval)
target_node_id6stringtarget_node_id is the mission node ID being targeted
target_agent_name7stringtarget_agent_name is the agent name being targeted
confidence8doubleconfidence is the decision confidence score (0-1)
reasoning9stringreasoning is the orchestrator's reasoning (max 500 chars in practice)
tokens_used10int32tokens_used is the number of tokens consumed for this decision
latency_ms11doublelatency_ms is the decision latency in milliseconds
approval_id12stringapproval_id is set when approval is required
risk13stringrisk is the risk level (low, medium, high, critical)
timeout_seconds14int32timeout_seconds is the timeout for approval requests

PauseMissionRequest

PauseMissionRequest requests pausing a running mission.

Field#TypeDescription
mission_id1stringmission_id is the unique identifier of the mission to pause
force2boolforce 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#TypeDescription
success1boolsuccess indicates if the pause request was accepted
checkpoint_id2stringcheckpoint_id is the ID of the checkpoint created during pause
message3stringmessage provides additional context about the pause operation

PermissionComponentGrant

PermissionComponentGrant is a compact component grant for use in permissions summaries.

Field#TypeDescription
component_ref1stringcomponent_ref is the component identifier, e.g. "tool:mytool"
actions2repeated stringactions lists the FGA relations the caller holds (execute, configure, read)

PermissionTeamMembership

PermissionTeamMembership describes the caller's membership in a team.

Field#TypeDescription
team_id1stringteam_id is the unique team identifier
team_name2stringteam_name is the human-readable team name
is_admin3boolis_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#TypeDescription
timestamp1int64timestamp is the server time when the ping was received

PluginInfo

PluginInfo describes a registered plugin.

Field#TypeDescription
id1stringid is the unique plugin identifier
name2stringname is the plugin name
version3stringversion is the plugin version
endpoint4stringendpoint is the gRPC endpoint for the plugin
description5stringdescription is the plugin description
health6stringhealth is the plugin health status (healthy, unhealthy)
last_seen7int64last_seen is when the plugin was last seen (Unix timestamp)

QueryPluginRequest

QueryPluginRequest executes a method on a plugin.

Field#TypeDescription
name1stringname is the plugin name to query
method2stringmethod is the method name to execute
params3gibson.common.v1.TypedMapparams is the typed parameters for the method
timeout_ms4int64timeout_ms is the optional timeout in milliseconds (0 = default)

QueryPluginResponse

QueryPluginResponse returns the result of a plugin query.

Field#TypeDescription
result1gibson.common.v1.TypedValueresult is the typed result from the plugin method
error2stringerror is set if the query failed
duration_ms3int64duration_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#TypeDescription
agent_id1stringagent_id is the agent's Zitadel service-account ID. Must match the sub claim of the presented CG-JWT.
mission_id2stringmission_id names the mission. Must match the mission_id claim of the presented CG-JWT.
task_id3stringtask_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#TypeDescription
capability_grant1stringcapability_grant is the compact-serialized JWT to attach as the X-Capability-Grant header on subsequent harness callbacks.
expires_at_unix2int64expires_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#TypeDescription
mission_id1stringmission_id is the unique identifier of the mission to resume
checkpoint_id2stringcheckpoint_id optionally specifies a specific checkpoint to resume from If empty, resumes from the latest checkpoint
target_checkpoint_id3stringEmpty string = legacy resume-from-latest behavior (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#TypeDescription
event_type1stringevent_type identifies the type of event
timestamp2int64timestamp is when the event occurred (Unix timestamp)
mission_id3stringmission_id is the unique mission identifier
node_id4stringnode_id is the mission node ID (if applicable)
message5stringmessage is a human-readable event message
data6gibson.common.v1.TypedMapdata contains event-specific data (typed map)
error7stringerror contains error information if the event represents an error
result8OperationResultresult contains typed operation metrics (for mission.completed events)
checkpoint_metadata9CheckpointMetadatacheckpoint_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#TypeDescription
mission_definition_id1stringmission_definition_id is the ID of a registered mission definition to execute.
target_id2stringtarget_id is the ID of a registered target the mission runs against.
variables3map<string, string>variables contains mission variables to override
memory_continuity4stringmemory_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#TypeDescription
event_type1stringevent_type identifies the type of event
timestamp2int64timestamp is when the event occurred (Unix timestamp)
mission_id3stringmission_id is the unique mission identifier
node_id4stringnode_id is the mission node ID (if applicable)
message5stringmessage is a human-readable event message
data6gibson.common.v1.TypedMapdata contains event-specific data (typed map)
error7stringerror contains error information if the event represents an error
result8OperationResultresult contains typed operation metrics (for mission.completed events)

SaveMissionLayoutRequest

SaveMissionLayoutRequest persists a hand-arranged layout.

Field#TypeDescription
layout1MissionLayoutlayout is the layout to persist. Its mission_definition_id is the key.
expected_version2stringexpected_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#TypeDescription
version1string—

ShowComponentRequest

ShowComponentRequest requests detailed information about a component.

Field#TypeDescription
kind1stringkind is the component kind ("agent", "tool", "plugin")
name2stringname is the component name to show

ShowComponentResponse

ShowComponentResponse returns detailed component information.

Field#TypeDescription
success1boolsuccess indicates if the component was found
name2stringname is the component name
version3stringversion is the component version
kind4stringkind is the component kind
status5stringstatus is the component status (installed, running, stopped)
source6stringsource is the Git repository URL
repo_path7stringrepo_path is the local repository path
bin_path8stringbin_path is the path to the binary
port9int32port is the listening port (if running)
pid10int32pid is the process ID (if running)
created_at11int64created_at is when the component was installed (Unix timestamp)
updated_at12int64updated_at is when the component was last updated (Unix timestamp)
started_at13int64started_at is when the component was started (Unix timestamp, 0 if not running)
stopped_at14int64stopped_at is when the component was stopped (Unix timestamp, 0 if never stopped)
manifest_info15stringmanifest_info contains manifest details (JSON-encoded)
message16stringmessage provides additional context or error information

StartComponentRequest

StartComponentRequest requests starting a component.

Field#TypeDescription
kind1stringkind is the component kind ("agent", "tool", "plugin")
name2stringname is the component name

StartComponentResponse

StartComponentResponse returns the result of starting a component.

Field#TypeDescription
success1boolsuccess indicates if the component was started successfully
pid2int32pid is the process ID of the started component
port3int32port is the port the component is listening on
message4stringmessage provides additional context or error information
log_path5stringlog_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#TypeDescription
running1boolrunning indicates if the daemon is running (always true if responding)
pid2int32pid is the process ID of the daemon
start_time3int64start_time is when the daemon started (Unix timestamp)
uptime4stringuptime is the human-readable uptime string
grpc_address5stringgrpc_address is the gRPC server address
registry_type6stringregistry_type is the type of registry (embedded, external)
registry_addr7stringregistry_addr is the registry endpoint address
callback_addr8stringcallback_addr is the callback server address
agent_count9int32agent_count is the number of registered agents
mission_count10int32mission_count is the total number of missions
active_mission_count11int32active_mission_count is the number of currently running missions

StopComponentRequest

StopComponentRequest requests stopping a component.

Field#TypeDescription
kind1stringkind is the component kind ("agent", "tool", "plugin")
name2stringname is the component name
force3boolforce indicates whether to skip graceful shutdown (SIGKILL instead of SIGTERM)

StopComponentResponse

StopComponentResponse returns the result of stopping a component.

Field#TypeDescription
success1boolsuccess indicates if the component was stopped successfully
stopped_count2int32stopped_count is the number of instances successfully stopped
total_count3int32total_count is the total number of instances that were running
message4stringmessage provides additional context or error information

StopMissionRequest

StopMissionRequest requests mission termination.

Field#TypeDescription
mission_id1stringmission_id is the identifier of the mission to stop
force2boolforce indicates whether to force-kill the mission (default: graceful)

StopMissionResponse

StopMissionResponse confirms mission stop request.

Field#TypeDescription
success1boolsuccess indicates if the stop request was accepted
message2stringmessage provides additional context

SubscribeRequest

SubscribeRequest establishes an event stream.

Field#TypeDescription
event_types1repeated stringevent_types filters which event types to receive (empty = all)
mission_id2stringmission_id filters to a specific mission (empty = all)

SubscribeResponse

SubscribeResponse wraps an Event for the Subscribe streaming RPC.

Field#TypeDescription
event_type1stringevent_type identifies the type of event
timestamp2int64timestamp is when the event occurred (Unix timestamp)
source3stringsource is the event source (mission, agent, daemon, etc.)
data4gibson.common.v1.TypedMapdata contains event-specific data (typed map)
mission_event5MissionEvent—
agent_event7AgentEvent—
finding_event8FindingEvent—
tool_event9ToolEvent—
llm_event10LLMEvent—
orchestrator_event11OrchestratorEvent—

oneof event — one of: mission_event, agent_event, finding_event, tool_event, llm_event, orchestrator_event.

ToolEvent

ToolEvent represents a tool execution event.

Field#TypeDescription
event_type1stringevent_type identifies the tool event type (tool.started, tool.completed, tool.failed, tool.progress, tool.warning)
timestamp2int64timestamp is when the event occurred (Unix timestamp)
tool_name3stringtool_name is the name of the tool being executed
agent_id4stringagent_id is the agent identifier executing the tool
agent_name5stringagent_name is the agent name executing the tool
mission_id6stringmission_id is the mission context for this tool execution
message7stringmessage is a human-readable event message
duration8doubleduration is the execution time in seconds (for completed/failed events)
progress9doubleprogress is the completion percentage (0-1 for progress events)
error10stringerror contains error information if the event represents an error
error_code11stringerror_code contains a machine-readable error code
warning12stringwarning contains warning information if the event represents a warning
warning_severity13stringwarning_severity is the severity level (low, medium, high)
data14gibson.common.v1.TypedMapdata contains event-specific data (typed map)

ToolInfo

ToolInfo describes a registered tool.

Field#TypeDescription
id1stringid is the unique tool identifier
name2stringname is the tool name
version3stringversion is the tool version
endpoint4stringendpoint is the gRPC endpoint for the tool
description5stringdescription is the tool description
health6stringhealth is the tool health status (healthy, unhealthy)
last_seen7int64last_seen is when the tool was last seen (Unix timestamp)
capabilities8Capabilitiescapabilities describes runtime privileges and features (optional)

UpdateMissionDefinitionRequest

UpdateMissionDefinitionRequest carries the replacement definition. The name field of the embedded definition is the lookup key.

Field#TypeDescription
definition1gibson.mission.v1.MissionDefinitiondefinition 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_source2stringcue_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#TypeDescription
mission_definition_id1stringmission_definition_id is the stable server-assigned identifier for this definition (unchanged across updates).

UpdateTargetRequest

UpdateTargetRequest replaces a target's metadata.

Field#TypeDescription
target1gibson.target.v1.Targettarget 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#TypeDescription
target1gibson.target.v1.Target—

ValidateMissionCUERequest

ValidateMissionCUERequest carries raw CUE source text to validate.

Field#TypeDescription
cue_source1stringcue_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#TypeDescription
diagnostics1repeated CUEDiagnosticdiagnostics is the list of errors and warnings. Empty on success.
compiled_definition2gibson.mission.v1.MissionDefinitioncompiled_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_UNSPECIFIED0—
MISSION_STATUS_PENDING1—
MISSION_STATUS_RUNNING2—
MISSION_STATUS_PAUSED3—
MISSION_STATUS_COMPLETED4—
MISSION_STATUS_FAILED5—
MISSION_STATUS_CANCELLED6—

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#TypeDescription
label1string—
count2uint64—

Edge

Edge is a single relationship between two nodes.

Field#TypeDescription
id1string—
source_id2string—
target_id3string—
type4string—
properties5map<string, string>—

Finding

Finding is a per-tenant security finding or vulnerability node from the knowledge graph, shaped for dashboard list/detail views.

Field#TypeDescription
id1string—
name2string—
description3string—
type4stringCategory / type. Free-form string drawn from the underlying node's type property (e.g. "sql_injection", "exposed_secret").
severity5string"critical" | "high" | "medium" | "low" | "info" (lowercase, free-form).
mission_id6string—
created_at7google.protobuf.Timestamp—
properties8map<string, string>Catch-all for additional properties beyond the structured fields above (CVE, CVSS, etc.). Values are stringified to preserve fidelity through proto3.
labels9repeated stringDistinguishes:Finding from:Vulnerability and any future label split.

GetFindingCountsRequest

Field#TypeDescription
group_by1FindingCountGroupBy—
time_window_seconds2uint64Optional. When > 0, only count findings whose created_at is within the last N seconds. 0 (default) means all-time.

GetFindingCountsResponse

Field#TypeDescription
buckets1repeated CountBucket—

GetFindingTimeSeriesRequest

Field#TypeDescription
days1uint32Default 30, max 365 (server-clamped).

GetFindingTimeSeriesResponse

Field#TypeDescription
points1repeated TimeSeriesPointOrdered, padded with zero buckets for missing days. Length == days.

GetFindingsRequest

Field#TypeDescription
severity_filter1stringExact match. Empty string = no filter.
category_filter2stringExact match on the type / category. Empty string = no filter.
mission_id3stringWhen non-empty, only findings reachable from this mission node within the same tenant (within 3 hops) are returned.
search4stringSubstring match on name OR description (case-insensitive). Empty = no filter.
limit5uint32Default 100, max 500 (server-clamped).
offset6uint32—

GetFindingsResponse

Field#TypeDescription
findings1repeated Finding—
total2uint64Count of matching findings without limit/offset, for pagination UI.
truncated3boolTrue when total > offset + len(findings).

GetGraphContextRequest

Field#TypeDescription
node_id1string—
hops2uint32Default 2, max 5 (server-clamped).
max_nodes3uint32Default 30, max 100 (server-clamped).

GetGraphContextResponse

Field#TypeDescription
focus_node1NodeUnset when the node was not found OR Neo4j is unavailable. The daemon returns this shape (not an error) so chatbot prompts never break.
neighbors2repeated NeighborEdge—
summary3stringLLM-friendly text serialization of focus + neighbors.

GetGraphStatsRequest

No fields.

GetGraphStatsResponse

Field#TypeDescription
by_label1repeated NodeCountByLabel—
total_nodes2uint64—
total_edges3uint64—
last_write_at4google.protobuf.TimestampZero when the tenant has never written a node.

GetGraphSummaryRequest

No fields.

GetGraphSummaryResponse

Field#TypeDescription
summary1stringLLM-friendly text summary, capped at ~4000 chars.
stats2GraphSummaryStats—

GetMissionGraphRequest

Field#TypeDescription
mission_id1string—

GetMissionGraphResponse

Field#TypeDescription
nodes1repeated Node—
edges2repeated Edge—

GetTenantGraphRequest

Field#TypeDescription
limit1uint32Optional. Default 1000, max 5000 (server-clamped).
include_labels2repeated stringOptional. If non-empty, only nodes carrying ANY of these labels are returned (and their connecting edges).

GetTenantGraphResponse

Field#TypeDescription
nodes1repeated Node—
edges2repeated Edge—
truncated3boolTrue when total_node_count exceeded the limit and the response was capped.
total_node_count4uint32Total node count for the tenant before truncation. UI should surface a "showing N of M" banner when truncated is true.

GraphSummaryStats

Field#TypeDescription
hosts1uint64—
services2uint64—
findings3uint64—
vulnerabilities4uint64—
missions5uint64—

GraphUpdate

GraphUpdate is one event on the stream. The daemon may drop subscribers that fall behind; clients SHOULD reconcile via a polling fallback.

Field#TypeDescription
kind1GraphUpdate.Kind—
node2Node—
edge3Edge—
at4google.protobuf.Timestamp—

oneof entity — one of: node, edge.

NeighborEdge

Field#TypeDescription
node1Node—
relationship2string—
direction3string"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#TypeDescription
id1string—
labels2repeated string—
properties3map<string, string>—
first_seen_at4google.protobuf.Timestamp—
severity5stringSeverity tag for finding-class nodes; empty for non-finding labels. Values: "low" | "medium" | "high" | "critical".

NodeCountByLabel

Field#TypeDescription
label1string—
count2uint64—

Path

Path is an ordered sequence of node ids and edge ids that connects two endpoints.

Field#TypeDescription
node_ids1repeated string—
edge_ids2repeated string—

QueryPathsRequest

Field#TypeDescription
from_node_id1string—
to_node_id2string—
to_node_kind3string—
max_depth4uint32Optional. Default 5, max 10 (server-clamped).

oneof to — one of: to_node_id, to_node_kind.

QueryPathsResponse

Field#TypeDescription
paths1repeated Path—
nodes2repeated NodeDe-duplicated set of nodes referenced by any returned path.
edges3repeated EdgeDe-duplicated set of edges referenced by any returned path.
truncated_paths4boolTrue when the daemon's path-count cap was hit and additional paths were not returned.

TimeSeriesPoint

Field#TypeDescription
date1google.protobuf.Timestamp—
count2uint64—

WatchGraphUpdatesRequest

No fields.

Enums

FindingCountGroupBy

Value#Description
FINDING_COUNT_GROUP_BY_UNSPECIFIED0—
SEVERITY1—
CATEGORY2—

GraphUpdate.Kind

Value#Description
KIND_UNSPECIFIED0—
NODE_ADDED1—
EDGE_ADDED2—
NODE_UPDATED3—

Package gibson.graphrag.v1

Messages

AttackChain

AttackChain is a multi-hop technique sequence discovered by graph traversal.

Field#TypeDescription
id1string—
name2string—
steps3repeated AttackStep—
mission_id4string—
confidence5doubleconfidence for the chain as a whole.
severity6string—
created_at20int64—
updated_at21int64—

AttackPattern

AttackPattern is a MITRE ATT&CK-shaped technique record from the tenant graph.

Field#TypeDescription
id1string—
technique_id2stringtechnique_id is the ATT&CK identifier, e.g. "T1566".
name3string—
description4string—
tactics5repeated stringtactics, e.g. ["Initial Access", "Execution"].
platforms6repeated stringplatforms, e.g. ["Windows", "Linux"].
data_sources7repeated string—
references8repeated string—
created_at20int64—
updated_at21int64—

AttackStep

AttackStep is one hop in an AttackChain.

Field#TypeDescription
order1int32—
technique_id2string—
node_id3string—
description4string—
evidence5repeated stringevidence names the findings supporting this step.
confidence6double—

Certificate

Certificate discovered.

Field#TypeDescription
id1optional string—
subject2optional string—
issuer3optional string—
serial_number4optional string—
not_before5optional int64—
not_after6optional int64—
fingerprint_sha2567optional string—
san8optional string—
parent_id10optional stringParent entity reference (optional - cert can be associated with various entities)
parent_type11optional string—

CustomNode

CustomNode for entities not in standard taxonomy.

Field#TypeDescription
node_type1string—
id_properties2map<string, string>—
properties3map<string, string>—
parent_type4optional string—
parent_id5map<string, string>—
relationship_type6optional string—

DiscoveryResult

DiscoveryResult is a standardized container for tool-discovered entities. Tools populate this message and Gibson automatically persists to the graph.

Field#TypeDescription
hosts1repeated HostAsset discoveries
ports2repeated Port—
services3repeated Service—
endpoints4repeated Endpoint—
domains5repeated Domain—
subdomains6repeated Subdomain—
technologies7repeated Technology—
certificates8repeated Certificate—
findings9repeated FindingSecurity findings
evidence10repeated Evidence—
custom_nodes20repeated CustomNodeCustom extensions
explicit_relationships21repeated ExplicitRelationship—
compliance_signals22repeated taxonomy.v1.ComplianceSignalCompliance 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#TypeDescription
id1optional string—
name2string—
registrar3optional string—
created_date4optional int64—
expiry_date5optional int64—

Endpoint

Endpoint (URL) on a service.

Field#TypeDescription
id1optional string—
service_id2string—
url3string—
method4optional string—
status_code5optional int32—
content_type6optional string—
content_length7optional int64—
title8optional string—

Evidence

Evidence for a finding.

Field#TypeDescription
id1optional string—
finding_id2string—
type3string—
content4optional string—
url5optional string—

ExplicitRelationship

ExplicitRelationship for custom connections.

Field#TypeDescription
from_type1string—
from_id2map<string, string>—
to_type3string—
to_id4map<string, string>—
relationship_type5string—
properties6map<string, string>—

Finding

Finding (vulnerability or security issue).

Field#TypeDescription
id1optional string—
title2string—
description3optional string—
severity4string—
confidence5optional double—
category6optional string—
remediation7optional string—
cvss_score8optional double—
cve_ids9optional string—
parent_id10optional stringParent entity reference (optional - finding can be associated with various entities)
parent_type11optional 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#TypeDescription
id1string—
title2string—
description3string—
severity4string—
category5string—
confidence6double—
mission_id7string—
target_id8stringtarget_id is empty when the finding is not target-scoped.
created_at20int64—
updated_at21int64—

GraphNode

GraphNode represents a node in the knowledge graph. This is the proto-canonical representation for storage and query operations.

Field#TypeDescription
id1string—
type2string—
properties3map<string, Value>—
content4stringContent for semantic search (optional)
mission_id10stringScoping fields (injected by harness)
mission_run_id11string—
agent_run_id12string—
discovered_by13string—
discovered_at14int64—
created_at20int64Timestamps
updated_at21int64—
parent_id30optional stringParent reference
parent_type31optional string—
parent_relationship32optional string—

GraphQuery

GraphQuery represents a query against the knowledge graph using proto-canonical types.

Field#TypeDescription
text1string—
embedding2repeated float—
top_k3int32—
node_types4repeated string—
min_score5double—
max_score6double—
mission_id7string—
mission_run_id8string—
scope9QueryScope—
filters10map<string, string>—
vector_weight11double—
graph_weight12double—

HierarchyDef

HierarchyDef is one subClassOf assertion within an OntologyExtension. It mirrors the SDK's graphrag.HierarchyDef Go struct.

Field#TypeDescription
node_type1stringnode_type is the GraphRAG node type this entry applies to.
label2stringlabel is the IRI of the child class (prefix:localname form).
sub_class_of3stringsub_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#TypeDescription
id1optional string—
ip2string—
hostname3optional string—
state4optional string—
os5optional string—
os_version6optional string—
mac_address7optional string—

IFPDef

IFPDef declares an inverse-functional property within an OntologyExtension. It mirrors the SDK's graphrag.IFPDef Go struct.

Field#TypeDescription
node_type1stringnode_type is the GraphRAG node type this IFP applies to.
property2stringproperty is the name of the identity-bearing property on that node type.

ListValue

Field#TypeDescription
values1repeated Value—

MapValue

Field#TypeDescription
fields1map<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#TypeDescription
prefixes1map<string, string>prefixes maps short prefix names to base IRIs, mirroring the prefixes block of the source ontology YAML.
hierarchies2repeated HierarchyDefhierarchies is the ordered list of subClassOf assertions parsed from the YAML.
equivalences3repeated SameAsPairequivalences is the ordered list of sameAs pairs.
ifps4repeated IFPDefifps is the ordered list of inverse-functional property declarations.
raw_triples5bytesraw_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#TypeDescription
id1optional string—
host_id2string—
number3int32—
protocol4string—
state5optional string—
reason6optional string—

QueryResult

QueryResult represents a single result from a graph query.

Field#TypeDescription
node1GraphNode—
score2double—
vector_score3double—
graph_score4double—
path5repeated string—
distance6int32—

Relationship

Relationship represents a connection between two nodes.

Field#TypeDescription
id1string—
from_id2string—
to_id3string—
type4string—
properties5map<string, Value>—
weight6double—
mission_id10stringScoping
mission_run_id11string—
created_at20int64Timestamps

SameAsPair

SameAsPair is one [iriA, iriB] equivalence assertion in an OntologyExtension. Proto does not have a fixed-length array type, so the pair is modeled as a dedicated message with two named fields to keep the wire shape stable across languages.

Field#TypeDescription
iri_a1string—
iri_b2string—

Service

Service running on a port.

Field#TypeDescription
id1optional string—
port_id2string—
name3string—
product4optional string—
version5optional string—
extra_info6optional string—
banner7optional string—
cpe8optional string—

Subdomain

Subdomain under a domain.

Field#TypeDescription
id1optional string—
domain_id2string—
name3string—
full_name4optional string—

Technology

Technology detected.

Field#TypeDescription
id1optional string—
name2string—
version3optional string—
category4optional string—
confidence5optional int32—
cpe6optional string—
parent_id10optional stringParent entity reference (optional - tech can be associated with various entities)
parent_type11optional string—

Value

Value represents a dynamic property value.

Field#TypeDescription
string_value1string—
int_value2int64—
double_value3double—
bool_value4bool—
bytes_value5bytes—
timestamp_value6int64—
list_value7ListValue—
map_value8MapValue—

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_UNSPECIFIED0—
QUERY_SCOPE_MISSION1—
QUERY_SCOPE_MISSION_RUN2—
QUERY_SCOPE_GLOBAL3—

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.

ApplicationFindings

ApplicationFindingsRequest → ApplicationFindingsResponse

ApplicationFindings answers the one lifecycle question the reads above cannot: for this Application, what is still open, and does anything actually run the code it is in.

The reads above are hybrid vector-and-graph SEARCH — text or embedding, a node-type filter, top-k. Reachability is a TRAVERSAL: is this Package inside an Image that a Deployment of this Application runs, and does that Deployment expose a Host. No top-k over a node-type filter answers it.

It is one bounded question rather than a Cypher surface, deliberately: an agent able to send arbitrary Cypher would be a second unaudited path into the tenant graph, and the traversal an agent needs is knowable in advance.

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

CloseJob

CloseJobRequest → CloseJobResponse

CloseJob closes a job with a verdict and a score from a dispatched agent, under its grant. A verification agent is the usual caller. It mirrors gibson.job.v1.JobService.CloseJob.

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.

OpenJob

OpenJobRequest → OpenJobResponse

OpenJob opens a job on a bank from a dispatched agent, under its grant. It mirrors gibson.job.v1.JobService.OpenJob.

PullJob

PullJobRequest → PullJobResponse

PullJob returns the next queued job of the calling member's bank, or nothing when the queue is empty. A member with a free slot calls it after each heartbeat. The daemon assigns the job to the member.

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 ComponentService no longer has a generic graph-write RPC.

QueryPlugin

QueryPluginRequest → QueryPluginResponse

Plugin Operations

QueueToolWork

QueueToolWorkRequest → QueueToolWorkResponse

Tool Work Queue Operations

RecordSpan

RecordSpanRequest → RecordSpanResponse

Distributed Tracing Operations

RecordSpans

RecordSpansRequest → RecordSpansResponse

ReportDeliverable

ReportDeliverableRequest → ReportDeliverableResponse

ReportDeliverable records one outward result the driver performed at wrap-up: a pushed branch or an opened merge request.

ReportJobState

ReportJobStateRequest → ReportJobStateResponse

ReportJobState tells the daemon a job moved to WORKING or WAITING, and names the Claude Code session that holds it so a restart can resume it. A member never reports CLOSED: a scorer closes the job.

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.

SendInput

SendInputRequest → SendInputResponse

SendInput sends the next message to an open job from a dispatched agent, under its grant. It mirrors gibson.job.v1.JobService.SendInput.

SubmitFinding

SubmitFindingRequest → SubmitFindingResponse

Finding Operations

SubscribeInput

SubscribeInputRequest → stream SubscribeInputResponse

SubscribeInput streams the inputs for the calling member, in order, across every job it holds. Each Input carries the per-turn grant the member uses for every tool call of that turn. The stream stays open for the life of the member.

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). 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#TypeDescription
identifier1string—
kind2string—

AnyValue

AnyValue represents a dynamically typed value used in attributes.

Field#TypeDescription
string_value1string—
bool_value2bool—
int_value3int64—
double_value4double—
bytes_value5bytes—

oneof value — one of: string_value, bool_value, int_value, double_value, bytes_value.

ApplicationFinding

ApplicationFinding is one Finding of an Application, with the lifecycle context that decides how much it matters.

Field#TypeDescription
finding_id1stringfinding_id is the Finding's brain_id — the same identity every other surface uses, so an agent can write back to the node it read.
status2stringstatus is the Finding's lifecycle status: open, fixing, fixed, verified.
severity3stringseverity is the severity recorded when the Finding was raised.
vulnerability_id4stringvulnerability_id identifies the weakness this Finding instantiates (a CVE, a GHSA, or a platform id). Empty when the Finding names no public identifier — a source finding, say — which is a fact about the Finding, not a failure of the read.
place_label5stringplace_label and place_key are what the Finding affects: a Package in an image, a Repository, or a Service on a host.
place_key6string—
reachable7boolreachable reports that the affected place is inside an Image that a Deployment of this Application runs. False means nothing this Application deploys contains it. It is derived from the presence of that route, never from a stored property: a property would go stale the moment a deployment rolls, and a stale "not reachable" is a silent false negative — a triage rule reads it as "nothing runs this" and ranks a live finding last.
exposed8boolexposed reports that the Deployment which reaches it also exposes a Host. Only ever true when reachable is.
deployment_key9stringdeployment_key and image_key name the route that made it reachable, so an agent can say WHY rather than assert it.
image_key10string—
priority11stringpriority, priority_rule and priority_reason are what a previous triage pass decided about this Finding, written back by the agent and returned here so the next pass can read its own history. Two behaviors are dark while they are empty. A triage rule that keeps the previous priority when a scoring feed is unavailable — so an outage never re-ranks a Finding on severity alone — has nothing to keep. And a pass that explains only what changed sees every decision as a change, so model cost scales with the size of the backlog rather than with what actually happened. Empty means NO PASS HAS DECIDED YET. That is a fact about the Finding, not a failure of the read, and a reader must never take it for "unimportant". The three are written by different steps — a rule table decides the priority, a model writes the reason — so losing the reason must not take the decision with it: an empty priority_reason beside a populated priority is a model that went quiet, not a Finding nobody ranked.
priority_rule12string—
priority_reason13string—

ApplicationFindingsRequest

ApplicationFindingsRequest asks for one Application's Findings with the lifecycle context that decides how much each one matters.

It carries NO tenant field. The tenant is derived from the call context, so naming another tenant's graph is unrepresentable rather than rejected — the same rule every other read on this service follows.

Field#TypeDescription
context1ContextInfo—
application2stringapplication is the Application's key. Required: this read is scoped to one Application by construction, and an empty key would silently widen the traversal to the whole tenant graph.
statuses3repeated stringstatuses filters by lifecycle status (open, fixing, fixed, verified). Empty means every status.
limit4int32limit bounds one read. 0 means the server default; the server caps it, so a caller cannot walk an entire tenant graph in one call.

ApplicationFindingsResponse

ApplicationFindingsResponse carries the Application's Findings.

Unavailability is reported in error, NEVER as an empty list with no error: an empty list means the Application genuinely has no matching Finding, and conflating the two is what makes an unanswerable question look like good news.

Field#TypeDescription
findings1repeated ApplicationFinding—
error2HarnessError—

AttackChain

Field#TypeDescription
id1string—
name2string—
severity3string—
steps4repeated AttackStep—

AttackPattern

Field#TypeDescription
technique_id1string—
name2string—
description3string—
tactics4repeated string—
platforms5repeated string—
similarity6double—

AttackStep

Field#TypeDescription
order1int32—
technique_id2string—
node_id3string—
description4string—
confidence5double—

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#TypeDescription
run_id1stringrun_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.
action2stringaction is one of: execute, configure, read, write. Maps to FGA relation "can_{action}" in the authorization model.
resource3stringresource is the FGA object in "<type>:<name>" format, e.g. "tool:mytool".

AuthorizeResponse

AuthorizeResponse returns the authorization decision.

Field#TypeDescription
allowed1boolallowed is true if the action is permitted, false if denied.
reason2stringreason 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#TypeDescription
username1string—
password2string—

CallToolProtoRequest

CallToolProtoRequest invokes a tool using proto-serialized JSON input/output.

Field#TypeDescription
context1ContextInfo—
name2string—
input_json3bytesJSON-serialized proto request message
input_type4stringFully qualified proto message type name for input (e.g., "gibson.tool.mytool.MyRequest")
output_type5stringFully qualified proto message type name for output (e.g., "gibson.tool.mytool.MyResponse")

CallToolProtoResponse

CallToolProtoResponse returns the tool output as proto-serialized JSON.

Field#TypeDescription
output_json1bytesJSON-serialized proto response message
error2HarnessError—

CallToolProtoStreamRequest

CallToolProtoStreamRequest initiates a streaming tool execution.

Field#TypeDescription
context1ContextInfo—
name2string—
input_json3bytesJSON-serialized proto request message
input_type4stringFully qualified proto message type name for input (e.g., "gibson.tool.mytool.MyRequest")
output_type5stringFully qualified proto message type name for output (e.g., "gibson.tool.mytool.MyResponse")
timeout_ms6int64Optional timeout in milliseconds

CallToolProtoStreamResponse

CallToolProtoStreamResponse streams tool execution events back to the agent.

Field#TypeDescription
progress1ToolProgressEvent—
partial2ToolPartialResultEvent—
warning3ToolWarningEvent—
complete4ToolCompleteEvent—
error5ToolErrorEvent—
trace_id10string—
span_id11string—
sequence12int64—
timestamp_ms13int64—

oneof payload — one of: progress, partial, warning, complete, error.

CancelMissionRequest

CancelMissionRequest requests cancellation of a running mission.

Field#TypeDescription
context1ContextInfo—
mission_id2string—

CancelMissionResponse

CancelMissionResponse confirms cancellation request.

Field#TypeDescription
error1HarnessError—

CertificateObservation

CertificateObservation is a TLS certificate served on a port (identity: fingerprint).

Field#TypeDescription
fingerprint1string—
subject2string—
issuer3string—
not_after4string—

CloseJobRequest

CloseJobRequest closes a job from a dispatched agent.

Field#TypeDescription
context1ContextInfocontext identifies the calling agent's run.
job_id2stringjob_id is the job. Required.
verdict3gibson.job.v1.JobVerdictverdict is the outcome. Required.
score4doublescore is the scorer's score, from 0.0 to 1.0.

CloseJobResponse

CloseJobResponse carries the job after the close was recorded.

Field#TypeDescription
job1gibson.job.v1.Jobjob is the job as stored.
error2HarnessError—

ContextInfo

Field#TypeDescription
task_id1string—
agent_name2string—
trace_id3string—
span_id4string—
mission_id5string—
mission_run_id6stringMission 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_id7stringAgent run ID - unique identifier for this specific agent execution. Used for DISCOVERED relationships and provenance tracking.
run_number8int32Run number - sequential number for this mission (1, 2, 3...). Used for mission memory queries and historical comparisons.
tool_execution_id9stringTool 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#TypeDescription
context1ContextInfo—
mission_definition_json2bytes—
target_id3string—
name4string—
constraints5MissionConstraintsDeprecated: 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.
metadata6map<string, gibson.common.v1.TypedValue>—
tags7repeated string—
canonical_constraints8gibson.mission.v1.MissionConstraintscanonical_constraints carries the platform-canonical gibson.mission.v1.MissionConstraints type (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.
catalog_mission9stringcatalog_mission names a mission definition checked into the platform's mission catalog, to be originated instead of a caller-supplied graph (ADR-0018: the checked-in definition is authoritative). This is a second input to the one mission-creation route, deliberately not a second RPC. A dedicated RPC would carry its own authorization surface, so the per-tenant gate and the ADR-0063 origination rule ("a component originates only from inside a live parent") would be enforced in two places — which is where two enforcement paths drift apart. Exactly one of mission_definition_json (field 2) or catalog_mission must be set. Both is InvalidArgument; neither is InvalidArgument.
catalog_params10map<string, string>catalog_params carries the parameters the named catalog mission declares, keyed by the definition's own parameter names. The map is CLOSED: the daemon refuses an unrecognised key rather than ignoring it. Silently dropping a key a caller sent would let that caller believe a parameter bound when it did not — which is what keeps the runtime target out of this map honest. The target continues to bind from target_id (field 3) alone, so a scan can only ever run against a target the tenant registered. Every missing parameter is reported at once rather than one render at a time. Only meaningful when catalog_mission is set.

CreateMissionResponse

CreateMissionResponse returns the created mission info.

Field#TypeDescription
mission1MissionInfo—
error2HarnessError—

Credential

Field#TypeDescription
name1string—
type2CredentialType—
api_key3string—
bearer_token4string—
basic5BasicAuth—
oauth6OAuthCredential—
custom_secret7string—
metadata8map<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#TypeDescription
secret_hash1string—
username2string—
kind3string—

DelegateToAgentRequest

DelegateToAgentRequest dispatches a task to another agent. The target selector says WHERE the task runs. Absent means an ephemeral launch, which is the behavior every caller had before banks existed.

Field#TypeDescription
context1ContextInfo—
name2string—
task3gibson.types.v1.Task—
ephemeral10boolephemeral launches a new sandbox for this task and tears it down when the task ends. Setting it to true is the same as leaving the oneof unset; it lets a caller say so out loud.
bank_id11stringbank_id opens a new job on that bank. A member with a free slot takes it, or the bank queues it, per the bank spill policy.
job_id12stringjob_id sends the task as the next input to a job that is already open, so the agent keeps its conversation and its worktrees.

oneof target — one of: ephemeral, bank_id, job_id.

DelegateToAgentResponse

DelegateToAgentResponse carries the delegated task's result, and the job the task ran as when the target was a bank or a job.

Field#TypeDescription
result1gibson.types.v1.Result—
error2HarnessError—
job_id3stringjob_id names the job the task ran as. Empty for an ephemeral launch.
member_id4stringmember_id names the bank member that ran the job. Empty for an ephemeral launch.

DeleteSessionContextRequest

Field#TypeDescription
context1ContextInfo—
session_id2string—

DeleteSessionContextResponse

DeleteSessionContextResponse is empty on success; deleting a session that has no blob is a no-op, not an error.

Field#TypeDescription
error1HarnessError—

DevboxExecExit

DevboxExecExit is the terminal event of a completed command.

Field#TypeDescription
exit_code1int32—

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#TypeDescription
context1ContextInfo—
session_id2stringsession_id is the agent-chosen opaque session identity shared with the session-context store. Required, non-empty.
argv3repeated stringargv 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", …]).
stdin4bytesstdin 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#TypeDescription
stdout1bytesstdout/stderr carry raw chunks in arrival order. Chunk boundaries are transport artifacts, not line boundaries.
stderr2bytes—
exit3DevboxExecExit—
error4HarnessError—

oneof payload — one of: stdout, stderr, exit, error.

DomainObservation

DomainObservation reports a registrable domain seen in scope.

Field#TypeDescription
name1string—

EndpointObservation

EndpointObservation is a path observed on a service.

Field#TypeDescription
path1string—
status2int32—

FindSimilarAttacksRequest

FindSimilarAttacksRequest searches for attack patterns similar to the given content.

Field#TypeDescription
context1ContextInfo—
content2string—
top_k3int32—

FindSimilarAttacksResponse

FindSimilarAttacksResponse carries matching attack patterns.

Field#TypeDescription
results1repeated gibson.graphrag.v1.AttackPattern—
error2HarnessError—

FindSimilarFindingsRequest

FindSimilarFindingsRequest searches for findings similar to the given one.

Field#TypeDescription
context1ContextInfo—
finding_id2string—
top_k3int32—

FindSimilarFindingsResponse

FindSimilarFindingsResponse carries matching findings.

Field#TypeDescription
results1repeated gibson.graphrag.v1.FindingNode—
error2HarnessError—

FindingFilter

FindingFilter represents filtering criteria for findings

Field#TypeDescription
mission_id1string—
agent_name2string—
severity3gibson.types.v1.FindingSeverity—
status4gibson.types.v1.FindingStatus—
tags5repeated string—

FindingNode

Field#TypeDescription
id1string—
title2string—
description3string—
severity4string—
category5string—
confidence6double—
similarity7double—

GenerateNodeIDRequest

Field#TypeDescription
context1ContextInfo—
node_type2string—
properties3map<string, gibson.common.v1.TypedValue>—

GenerateNodeIDResponse

Field#TypeDescription
node_id1string—
error2HarnessError—

GetAttackChainsRequest

GetAttackChainsRequest requests multi-hop attack paths from a technique.

Field#TypeDescription
context1ContextInfo—
technique_id2string—
max_depth3int32—

GetAttackChainsResponse

GetAttackChainsResponse carries attack chain results.

Field#TypeDescription
results1repeated gibson.graphrag.v1.AttackChain—
error2HarnessError—

GetCredentialRequest

Field#TypeDescription
context1ContextInfo—
name2string—

GetCredentialResponse

Field#TypeDescription
credential1Credential—
error2HarnessError—

GetFindingsRequest

GetFindingsRequest queries previously submitted findings.

Field#TypeDescription
context1ContextInfo—
filter2FindingFilterfilter 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#TypeDescription
findings1repeated gibson.types.v1.Finding—
error2HarnessError—

GetMissionResultsRequest

GetMissionResultsRequest retrieves completed mission results.

Field#TypeDescription
context1ContextInfo—
mission_id2string—

GetMissionResultsResponse

GetMissionResultsResponse returns mission results.

Field#TypeDescription
result1MissionResult—
error2HarnessError—

GetMissionRunHistoryRequest

GetMissionRunHistoryRequest asks for every run of the caller's mission.

Field#TypeDescription
context1ContextInfo—

GetMissionRunHistoryResponse

GetMissionRunHistoryResponse carries the run summaries.

Field#TypeDescription
runs1repeated gibson.types.v1.MissionRunSummary—
error2HarnessError—

GetMissionStatusRequest

GetMissionStatusRequest retrieves current mission status.

Field#TypeDescription
context1ContextInfo—
mission_id2string—

GetMissionStatusResponse

GetMissionStatusResponse returns detailed status info.

Field#TypeDescription
status1MissionStatusInfo—
error2HarnessError—

GetPlanContextRequest

Field#TypeDescription
context1ContextInfo—

GetPlanContextResponse

Field#TypeDescription
plan_context1PlanContext—
error2HarnessError—

GetRelatedFindingsRequest

GetRelatedFindingsRequest requests findings related via graph relationships.

Field#TypeDescription
context1ContextInfo—
finding_id2string—

GetRelatedFindingsResponse

GetRelatedFindingsResponse carries related findings.

Field#TypeDescription
results1repeated gibson.graphrag.v1.FindingNode—
error2HarnessError—

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#TypeDescription
context1ContextInfo—
scope2RunScope—
filter3FindingFilter—

GetRunFindingsResponse

GetRunFindingsResponse carries findings from the selected runs.

Field#TypeDescription
findings1repeated gibson.types.v1.Finding—
error2HarnessError—

GetSessionContextRequest

Field#TypeDescription
context1ContextInfo—
session_id2string—

GetSessionContextResponse

Field#TypeDescription
error1HarnessError—
data2bytesdata is empty and etag "" when no blob exists for the session (a fresh session is not an error).
etag3string—

GetTaxonomySchemaRequest

Field#TypeDescription
context1ContextInfo—

GetTaxonomySchemaResponse

Field#TypeDescription
version1string—
node_types2repeated TaxonomyNodeType—
relationship_types3repeated TaxonomyRelationshipType—
techniques4repeated TaxonomyTechnique—
target_types5repeated TaxonomyTargetType—
technique_types6repeated TaxonomyTechniqueType—
capabilities7repeated TaxonomyCapability—
error8HarnessError—

GraphNode

Field#TypeDescription
id1string—
type2string—
properties3map<string, gibson.common.v1.TypedValue>—
content4string—
mission_id5string—
agent_name6string—
created_at7int64—
updated_at8int64—

GraphRAGResult

Field#TypeDescription
node1GraphNode—
score2double—
vector_score3double—
graph_score4double—
path5repeated string—
distance6int32—

HarnessAgentDescriptor

Field#TypeDescription
name1string—
version2string—
description3string—
capabilities4repeated string—
target_types5repeated string—
technique_types6repeated string—

HarnessError

Error represents an error response from a callback operation.

Field#TypeDescription
code1gibson.common.v1.ErrorCode—
message2string—
retryable3bool—

HarnessHealthStatus

HealthStatus represents the health status of a service.

Field#TypeDescription
state1string—
message2string—
checked_at3int64—

HarnessPluginDescriptor

Field#TypeDescription
name1string—
description2string—
version3string—
methods4repeated string—

HarnessToolDescriptor

Field#TypeDescription
name1string—
description2string—
input_schema5JSONSchemaNodeStructured schemas with full taxonomy support
output_schema6JSONSchemaNode—

HistoricalValueItem

Field#TypeDescription
value1gibson.common.v1.TypedValue—
run_number2int32—
mission_id3string—
stored_at4string—

HostObservation

HostObservation reports a host seen at address with optional strong identity signals and the ports observed open in this sighting.

Field#TypeDescription
address1string—
ssh_host_key2string—
cloud_id3string—
ports4repeated PortObservation—

JSONSchemaNode

JSONSchemaNode represents a JSON Schema node with taxonomy support. Used for structured schema transmission that preserves taxonomy mappings.

Field#TypeDescription
type1string—
description2string—
properties3map<string, JSONSchemaNode>—
required4repeated string—
items5JSONSchemaNode—
enum_values6repeated string—
format7string—
minimum8optional double—
maximum9optional double—
min_length10optional int32—
max_length11optional int32—
min_items12optional int32—
max_items13optional int32—
pattern14optional string—
default_value15optional string—
nullable16bool—
taxonomy17TaxonomyMapping—

KeyValue

KeyValue represents a key-value pair used in span attributes.

Field#TypeDescription
key1string—
value2AnyValue—

LLMCompleteRequest

Field#TypeDescription
context1ContextInfo—
slot2string—
messages3repeated LLMMessage—
temperature4optional doubleCompletion options
max_tokens5optional int32—
top_p6optional double—
stop7repeated string—

LLMCompleteResponse

Field#TypeDescription
content1string—
tool_calls2repeated ToolCall—
finish_reason3string—
usage4TokenUsage—
error5HarnessError—

LLMCompleteStructuredRequest

Field#TypeDescription
context1ContextInfo—
slot2string—
messages3repeated LLMMessage—
schema_json4string—

LLMCompleteStructuredResponse

Field#TypeDescription
result1gibson.common.v1.TypedValue—
usage3TokenUsage—
error4HarnessError—

LLMCompleteWithToolsRequest

Field#TypeDescription
context1ContextInfo—
slot2string—
messages3repeated LLMMessage—
tools4repeated ToolDef—

LLMCompleteWithToolsResponse

Field#TypeDescription
content1string—
tool_calls2repeated ToolCall—
finish_reason3string—
usage4TokenUsage—
error5HarnessError—

LLMMessage

Field#TypeDescription
role1string—
content2string—
tool_calls3repeated ToolCall—
tool_results4repeated ToolResult—
name5string—

LLMStreamRequest

Field#TypeDescription
context1ContextInfo—
slot2string—
messages3repeated LLMMessage—
temperature4optional doubleCompletion options
max_tokens5optional int32—
top_p6optional double—
stop7repeated string—

LLMStreamResponse

Field#TypeDescription
delta1string—
tool_calls2repeated ToolCall—
finish_reason3string—
usage4TokenUsage—
error5HarnessError—

LifecycleEntityEdge

LifecycleEntityEdge is one outgoing relationship to another typed entity, named by its label and identity rather than by a node id — the emitter does not know node ids, and must not be able to guess them.

Field#TypeDescription
type1stringtype is a Taxonomy relationship type, e.g. "CONTAINS".
target_label2stringtarget_label is the Taxonomy label of the other end.
target_id_properties3map<string, string>target_id_properties identify the other end, folded the same way as id_properties above.

LifecycleEntityObservation

LifecycleEntityObservation reports a sighting of a typed application-lifecycle entity: an Application, Repository, Image, Package, Deployment, Vulnerability, MergeRequest, Pipeline or Control, and the edges it was seen to have.

Admission is the Taxonomy's decision, not this message's. The daemon puts label and every edge type to the global Taxonomy; an admitted shape becomes a typed node, and one the Taxonomy does not admit is neither rejected nor lost — it lands as an Observation with its residue preserved (ADR-0012). So an agent can always write, and can never invent schema.

This is a SIGHTING, not a graph write. The agent reports what it saw; the brain resolves identity and the projector materialises it. An agent naming an existing node's identity enriches that node rather than creating a second one.

Field#TypeDescription
label1stringlabel is the Taxonomy label, e.g. "Package". A label outside the Taxonomy lands as an Observation rather than being refused.
id_properties2map<string, string>id_properties identify the entity. One property is the identity; several are folded into a composite key in sorted order, so the same entity observed twice resolves to the same node whatever order the map came in. An entity with no identity property records nothing — there would be no stable node to project.
properties3map<string, string>properties are the entity's non-identifying facts. A later sighting's properties take precedence over an earlier one's; a sighting that omits a property never erases what an earlier one established.
edges4repeated LifecycleEntityEdgeedges are the outgoing relationships seen in this sighting. Both ends and the relationship type must be admitted by the Taxonomy, or the edge is skipped while the entity itself still lands.

ListAgentsRequest

Field#TypeDescription
context1ContextInfo—

ListAgentsResponse

Field#TypeDescription
agents1repeated HarnessAgentDescriptor—
error2HarnessError—

ListMissionsRequest

ListMissionsRequest queries missions matching filter criteria.

Field#TypeDescription
context1ContextInfo—
filter2MissionFilter—

ListMissionsResponse

ListMissionsResponse returns matching missions.

Field#TypeDescription
missions1repeated MissionInfo—
error2HarnessError—

ListPluginsRequest

Field#TypeDescription
context1ContextInfo—

ListPluginsResponse

Field#TypeDescription
plugins1repeated HarnessPluginDescriptor—
error2HarnessError—

ListToolsRequest

Field#TypeDescription
context1ContextInfo—

ListToolsResponse

Field#TypeDescription
tools1repeated HarnessToolDescriptor—
error2HarnessError—

LongTermMemoryResult

Field#TypeDescription
id1string—
content2string—
metadata3map<string, gibson.common.v1.TypedValue>—
score4double—
created_at5string—

MemoryObservation

MemoryObservation reports a fact the agent wants to keep across runs, in the agent's own words. It is the memory write for coding agents: a memory is a World observation, not a store of its own.

Identity is per sighting: the Timeline event id, like every observation. The Taxonomy gate lands it as an Observation node with shape "Memory" until Sensing promotes the shape. Scope and tenant are server-side, same as the other variants. There is no field for either.

Field#TypeDescription
text1stringtext is the fact.
kind2stringkind is a short category, for example "convention", "decision", "layout".
tags3repeated stringtags help recall. Free-form, lower-case.
source_ref4stringsource_ref names where the fact came from: a path, a URL, or a work id.

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.

Field#TypeDescription
max_duration_ms1int64—
max_tokens2int64—
max_cost3double—
max_findings4int32—

MissionFilter

MissionFilter specifies criteria for listing missions.

Field#TypeDescription
status1MissionStatus—
target_id2string—
parent_mission_id3string—
created_after4int64—
created_before5int64—
tags6repeated string—
limit7int32—
offset8int32—

MissionInfo

MissionInfo provides metadata about a mission.

Field#TypeDescription
id1string—
name2string—
status3MissionStatus—
target_id4string—
parent_mission_id5string—
created_at6int64—
tags7repeated string—

MissionMemoryItem

Field#TypeDescription
key1string—
value2gibson.common.v1.TypedValue—
metadata3map<string, gibson.common.v1.TypedValue>—
created_at4string—
updated_at5string—

MissionMemoryResult

Field#TypeDescription
key1string—
value2gibson.common.v1.TypedValue—
metadata3map<string, gibson.common.v1.TypedValue>—
score4double—
created_at5string—
updated_at6string—

MissionMetrics

MissionMetrics aggregates execution statistics.

Field#TypeDescription
duration_ms1int64—
tokens_used2int64—
tool_calls3int32—
agent_calls4int32—
findings_count5int32—

MissionResult

MissionResult contains final results of a completed mission.

Field#TypeDescription
mission_id1string—
status2MissionStatus—
findings3repeated gibson.types.v1.Finding—
output4map<string, gibson.common.v1.TypedValue>—
metrics5MissionMetrics—
error6string—
completed_at7int64—

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#TypeDescription
mission_id1stringmission_id uniquely identifies this run.
run_number2int32run_number is the sequential run number for this mission name (1-based).
status3stringstatus is the final status string (running, completed, failed, cancelled, paused).
findings_count4int32findings_count is the number of findings discovered in this run.
created_at_unix5int64created_at is when the run was created (Unix epoch seconds).
completed_at_unix6int64completed_at_unix is when the run completed (Unix epoch seconds, 0 if still running).

MissionStatusInfo

MissionStatusInfo provides detailed status of a running mission.

Field#TypeDescription
status1MissionStatus—
progress2double—
phase3string—
finding_counts4map<string, int32>—
token_usage5int64—
duration_ms6int64—
error7string—

NodeReference

NodeReference identifies a node by type and property mappings. Use type="self" to reference the current node being mapped.

Field#TypeDescription
type1string—
properties2map<string, string>—

OAuthCredential

OAuthCredential represents OAuth tokens

Field#TypeDescription
access_token1string—
refresh_token2string—
token_type3string—
expires_at4int64—

ObserveRequest

ObserveRequest carries a typed observation (ADR-0007). Scope is NOT carried — the daemon derives it from the mission context.

Field#TypeDescription
context1ContextInfo—
host2HostObservation—
domain3DomainObservation—
subdomain4SubdomainObservation—
credential5CredentialObservation—
account6AccountObservation—
memory7MemoryObservation—
lifecycle_entity8LifecycleEntityObservation—

oneof observation — one of: host, domain, subdomain, credential, account, memory, lifecycle_entity.

ObserveResponse

ObserveResponse acknowledges an observation.

Field#TypeDescription
error1HarnessError—

OpenJobRequest

OpenJobRequest opens a job on a bank from a dispatched agent.

Field#TypeDescription
context1ContextInfocontext identifies the calling agent's run.
bank_id2stringbank_id is the bank to open the job on. Required.
member_id3stringmember_id pins the job to one member of that bank. Empty lets the daemon pick a member with a free slot.
spec4gibson.job.v1.JobSpecspec is the structured input. Required.

OpenJobResponse

OpenJobResponse carries the opened job.

Field#TypeDescription
job1gibson.job.v1.Jobjob is the job as stored.
error2HarnessError—

PlanContext

Field#TypeDescription
current_step_index1int32—
total_steps2int32—
remaining_steps3repeated string—
step_budget4int32—
mission_budget_remaining5int32—

PortObservation

PortObservation is an observed open port and its optional service detail.

Field#TypeDescription
number1int32—
protocol2string—
service3string—
product4string—
version5string—
endpoints6repeated EndpointObservation—
technologies7repeated TechnologyObservation—
certificate8CertificateObservation—

PropertyMapping

PropertyMapping maps a source field to a target property.

Field#TypeDescription
source1string—
target2string—
default_value3string—
transform4string—

PullJobRequest

PullJobRequest asks for the next queued job of the calling member's bank.

Field#TypeDescription
context1ContextInfocontext identifies the calling member's run.

PullJobResponse

PullJobResponse carries the next queued job, or nothing.

Field#TypeDescription
job1gibson.job.v1.Jobjob is the job the daemon assigned to the member. Unset when the queue is empty.
error2HarnessError—

PutSessionContextRequest

PutSessionContextRequest writes the session's context blob.

Field#TypeDescription
context1ContextInfo—
session_id2stringsession_id — see DevboxExecRequest.session_id; the same identity.
data3bytesdata is the opaque blob. The server enforces a size cap (~8 MB); larger working state belongs in the Devbox, not here.
if_match4stringif_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#TypeDescription
error1HarnessError—
etag2stringetag 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#TypeDescription
context1ContextInfo—
query2gibson.graphrag.v1.GraphQuery—

QueryNodesResponse

QueryNodesResponse carries knowledge graph query results.

Field#TypeDescription
results1repeated gibson.graphrag.v1.QueryResult—
error2HarnessError—

QueryPluginRequest

Field#TypeDescription
context1ContextInfo—
name2string—
method3string—
params4map<string, gibson.common.v1.TypedValue>—

QueryPluginResponse

Field#TypeDescription
result1gibson.common.v1.TypedValue—
error2HarnessError—

QueueToolWorkRequest

QueueToolWorkRequest initiates parallel execution of multiple tool invocations.

Field#TypeDescription
context1ContextInfo—
tool_name2string—
input_jsons3repeated string—
input_type4string—
output_type5string—

QueueToolWorkResponse

QueueToolWorkResponse returns a job ID for tracking the work queue.

Field#TypeDescription
job_id1string—
error2HarnessError—

RecordSpanRequest

Field#TypeDescription
context1ContextInfo—
span2Span—

RecordSpanResponse

Field#TypeDescription
error1HarnessError—

RecordSpansRequest

Field#TypeDescription
context1ContextInfo—
spans2repeated Span—

RecordSpansResponse

Field#TypeDescription
error1HarnessError—

Relationship

Field#TypeDescription
from_id1string—
to_id2string—
type3string—
properties4map<string, gibson.common.v1.TypedValue>—
bidirectional5bool—

RelationshipMapping

RelationshipMapping defines relationships between nodes using typed references.

Field#TypeDescription
type1string—
from2NodeReference—
to3NodeReference—
condition4string—
rel_properties5repeated PropertyMapping—

ReportDeliverableRequest

ReportDeliverableRequest records one deliverable the driver performed.

Field#TypeDescription
context1ContextInfocontext identifies the calling member's run.
job_id2stringjob_id is the job. Required.
deliverable3gibson.job.v1.Deliverabledeliverable is what was done. Required.

ReportDeliverableResponse

ReportDeliverableResponse acknowledges the deliverable.

Field#TypeDescription
error1HarnessError—

ReportJobStateRequest

ReportJobStateRequest reports a job state change from the member.

Field#TypeDescription
context1ContextInfocontext identifies the calling member's run.
job_id2stringjob_id is the job. Required.
state3gibson.job.v1.JobStatestate is the new state: WORKING or WAITING. Required.
claude_session_id4stringclaude_session_id is the Claude Code session that holds the job.

ReportJobStateResponse

ReportJobStateResponse acknowledges the state change.

Field#TypeDescription
error1HarnessError—

ReportStepHintsRequest

Field#TypeDescription
context1ContextInfo—
hints2StepHints—

ReportStepHintsResponse

Field#TypeDescription
error1HarnessError—

RunMissionRequest

RunMissionRequest queues a mission for execution.

Field#TypeDescription
context1ContextInfo—
mission_id2string—
wait3bool—
timeout_ms4int64—

RunMissionResponse

RunMissionResponse confirms mission execution started.

Field#TypeDescription
error1HarnessError—

SearchToolsCandidate

SearchToolsCandidate is one authorized tool the agent may invoke via its canonical id.

Field#TypeDescription
id1stringid is the canonical tool id (mcp:<connector>:<tool> or native:<tool>) the agent passes to invoke the tool.
source2string—
connector3string—
tool4string—
description5string—
input_schema_json6stringinput_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#TypeDescription
context1ContextInfo—
query2stringquery is matched (case-insensitively) against tool names and descriptions. Empty matches everything.
sources3repeated stringsources optionally restricts results by source ("mcp", "native"). Empty = all.
connector4stringconnector optionally restricts results to a single connector instance.
limit5int32limit caps the candidate count; zero uses the daemon default.

SearchToolsResponse

SearchToolsResponse is the authz-filtered candidate set.

Field#TypeDescription
candidates1repeated SearchToolsCandidate—
error2HarnessError—

SendInputRequest

SendInputRequest sends the next message to an open job from a dispatched agent.

Field#TypeDescription
context1ContextInfocontext identifies the calling agent's run.
job_id2stringjob_id is the job. Required.
message3stringmessage is the text of the input. Required.
kind4gibson.job.v1.InputKindkind is what the input asks the member to do. Unspecified means INPUT_KIND_TURN. A client never sends INPUT_KIND_WRAP_UP.

SendInputResponse

SendInputResponse carries the input as the daemon recorded it.

Field#TypeDescription
input1gibson.job.v1.Inputinput is the input without its grant.
error2HarnessError—

Span

Span represents a single span in a distributed trace.

Field#TypeDescription
trace_id1string—
span_id2string—
parent_span_id3string—
start_time_unix_nano4int64—
end_time_unix_nano5int64—
name6string—
kind7SpanKind—
status_code8StatusCode—
status_message9string—
attributes10repeated KeyValue—
events11repeated SpanEvent—

SpanEvent

SpanEvent represents a single event within a span.

Field#TypeDescription
name1string—
time_unix_nano2int64—
attributes3repeated KeyValue—

StepHints

Field#TypeDescription
confidence1double—
suggested_next2repeated string—
replan_reason3string—
key_findings4repeated string—

SubdomainObservation

SubdomainObservation reports an FQDN, its parent domain, and resolved addresses.

Field#TypeDescription
fqdn1string—
domain2string—
addresses3repeated string—

SubmitFindingRequest

Field#TypeDescription
context1ContextInfo—
finding2gibson.types.v1.Finding—

SubmitFindingResponse

Field#TypeDescription
error1HarnessError—

SubscribeInputRequest

SubscribeInputRequest opens the input stream for the calling member.

Field#TypeDescription
context1ContextInfocontext identifies the calling member's run.

SubscribeInputResponse

SubscribeInputResponse carries one input for the calling member.

Field#TypeDescription
input1gibson.job.v1.Inputinput is the next input, with its per-turn grant.

TaxonomyCapability

Field#TypeDescription
id1string—
name2string—
description3string—
technique_types4repeated string—

TaxonomyMapping

TaxonomyMapping defines how tool output maps to knowledge graph nodes. Uses deterministic ID generation based on identifying properties instead of templates.

Field#TypeDescription
node_type1string—
identifying_properties2map<string, string>—
properties3repeated PropertyMapping—
relationships4repeated RelationshipMapping—

TaxonomyNodeType

Field#TypeDescription
id1string—
name2string—
type3string—
category4string—
description5string—
identifying_properties6repeated string—
properties7repeated TaxonomyProperty—

TaxonomyProperty

Field#TypeDescription
name1string—
type2string—
required3bool—
description4string—
enum_values5repeated string—
default_value6string—

TaxonomyRelationshipType

Field#TypeDescription
id1string—
name2string—
type3string—
category4string—
description5string—
from_types6repeated string—
to_types7repeated string—
properties8repeated TaxonomyProperty—
bidirectional9bool—

TaxonomyTargetType

Field#TypeDescription
id1string—
type2string—
name3string—
category4string—
description5string—
required_fields6repeated string—
optional_fields7repeated string—

TaxonomyTechnique

Field#TypeDescription
technique_id1string—
name2string—
taxonomy3string—
category4string—
description5string—
tactic6string—
platforms7repeated string—
mitre_mapping8repeated string—

TaxonomyTechniqueType

Field#TypeDescription
id1string—
type2string—
name3string—
category4string—
description5string—
mitre_ids6repeated string—
default_severity7string—

TechnologyObservation

TechnologyObservation is a technology fingerprinted on a service.

Field#TypeDescription
name1string—
version2string—

TokenUsage

Field#TypeDescription
input_tokens1int32—
output_tokens2int32—
total_tokens3int32—

ToolCall

Field#TypeDescription
id1string—
name2string—
arguments3string—

ToolCompleteEvent

ToolCompleteEvent signals successful completion with final output

Field#TypeDescription
output_json1bytes—

ToolDef

Field#TypeDescription
name1string—
description2string—
parameters3JSONSchemaNode—

ToolErrorEvent

ToolErrorEvent signals an error during execution

Field#TypeDescription
error1HarnessError—
fatal2bool—

ToolPartialResultEvent

ToolPartialResultEvent contains partial results during execution

Field#TypeDescription
output_json1bytes—
description2string—

ToolProgressEvent

ToolProgressEvent indicates progress during tool execution

Field#TypeDescription
percent1int32—
stage2string—
message3string—

ToolResult

Field#TypeDescription
tool_call_id1string—
content2string—
is_error3bool—

ToolResultsRequest

ToolResultsRequest requests streaming results for a queued job.

Field#TypeDescription
context1ContextInfo—
job_id2string—

ToolResultsResponse

ToolResultsResponse streams individual results as tool executions complete.

Field#TypeDescription
index1int32—
output_json2string—
output_type3string—
error4HarnessError—
is_final5bool—

ToolWarningEvent

ToolWarningEvent contains non-fatal warnings during execution

Field#TypeDescription
message1string—
code2string—

TraversalOptions

Field#TypeDescription
max_depth1int32—
relationship_types2repeated string—
node_types3repeated string—
direction4string—

TraversalResult

Field#TypeDescription
node1GraphNode—
path2repeated string—
distance3int32—

ValidateFindingRequest

Field#TypeDescription
context1ContextInfo—
finding2gibson.types.v1.Finding—

ValidateFindingResponse

Field#TypeDescription
valid1bool—
errors2repeated ValidationError—
warnings3repeated string—
error4HarnessError—

ValidateGraphNodeRequest

Field#TypeDescription
context1ContextInfo—
node_type2string—
properties3map<string, gibson.common.v1.TypedValue>—

ValidateGraphNodeResponse

Field#TypeDescription
valid1bool—
errors2repeated ValidationError—
warnings3repeated string—
error4HarnessError—

ValidateRelationshipRequest

Field#TypeDescription
context1ContextInfo—
relationship_type2string—
from_node_type3string—
to_node_type4string—
properties5map<string, gibson.common.v1.TypedValue>—

ValidateRelationshipResponse

Field#TypeDescription
valid1bool—
errors2repeated ValidationError—
warnings3repeated string—
error4HarnessError—

ValidationError

Field#TypeDescription
field1string—
message2string—
code3string—

ValidationResponse

Field#TypeDescription
valid1bool—
errors2repeated ValidationError—
warnings3repeated string—
error4HarnessError—

WaitForMissionRequest

WaitForMissionRequest blocks until mission completion.

Field#TypeDescription
context1ContextInfo—
mission_id2string—
timeout_ms3int64—

WaitForMissionResponse

WaitForMissionResponse returns final mission result.

Field#TypeDescription
result1MissionResult—
error2HarnessError—

WorkspaceCommitRequest

WorkspaceCommitRequest stages all changes and creates a commit.

Field#TypeDescription
context1ContextInfo—
workspace_name2stringEmpty workspace_name resolves to the primary workspace.
message3stringmessage is the commit message. Required.

WorkspaceCommitResponse

WorkspaceCommitResponse carries the new commit's SHA.

Field#TypeDescription
commit_sha1string—

WorkspaceGetInfoRequest

WorkspaceGetInfoRequest fetches metadata for a single workspace.

Field#TypeDescription
context1ContextInfo—
name2stringEmpty name resolves to the mission's primary workspace (single-repository missions).

WorkspaceGetInfoResponse

WorkspaceGetInfoResponse carries the requested workspace metadata.

Field#TypeDescription
workspace1WorkspaceInfoAbsent on NOT_FOUND.

WorkspaceInfo

WorkspaceInfo is the minimal name + path projection of a workspace.

Field#TypeDescription
name1stringname is the repository identifier from the mission's WorkspaceConfig.
path2stringpath 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#TypeDescription
context1ContextInfo—
workspace_name2stringEmpty workspace_name resolves to the primary workspace.
pattern3stringpattern 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#TypeDescription
paths1repeated string—
truncated2booltruncated 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#TypeDescription
context1ContextInfo—

WorkspaceListResponse

WorkspaceListResponse carries every workspace in the mission.

Field#TypeDescription
workspaces1repeated WorkspaceInfo—

WorkspacePushRequest

WorkspacePushRequest pushes committed changes to the workspace's remote.

Field#TypeDescription
context1ContextInfo—
workspace_name2stringEmpty workspace_name resolves to the primary workspace.

WorkspacePushResponse

WorkspacePushResponse is empty on success.

No fields.

WorkspaceReadFileRequest

WorkspaceReadFileRequest reads a file from a workspace.

Field#TypeDescription
context1ContextInfo—
workspace_name2stringEmpty workspace_name resolves to the primary workspace.
path3stringPath is relative to the workspace root.

WorkspaceReadFileResponse

WorkspaceReadFileResponse carries the file's full content.

Field#TypeDescription
content1bytes—

WorkspaceWriteFileRequest

WorkspaceWriteFileRequest writes content to a file in a workspace.

Field#TypeDescription
context1ContextInfo—
workspace_name2stringEmpty workspace_name resolves to the primary workspace.
path3stringPath is relative to the workspace root.
content4bytesContent 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#TypeDescription
handle1stringhandle 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.
kind2WorldEntityKind—
label3stringlabel is the entity's coordinate as observed — an address, an FQDN, a finding title. Human- and LLM-readable; not a reference (only handle is).
attributes4map<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#TypeDescription
context1ContextInfo—
focus2repeated stringfocus 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#TypeDescription
error1HarnessError—
entities2repeated WorldEntity—
truncated3booltruncated 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_UNSPECIFIED0—
CREDENTIAL_TYPE_API_KEY1—
CREDENTIAL_TYPE_BEARER2—
CREDENTIAL_TYPE_BASIC3—
CREDENTIAL_TYPE_OAUTH4—
CREDENTIAL_TYPE_CUSTOM5—

MemoryTier

MemoryTier specifies which memory tier to use for an operation.

Value#Description
MEMORY_TIER_UNSPECIFIED0—
MEMORY_TIER_WORKING1—
MEMORY_TIER_MISSION2—
MEMORY_TIER_LONG_TERM3—

MissionStatus

MissionStatus represents the current state of a mission.

Value#Description
MISSION_STATUS_UNSPECIFIED0—
MISSION_STATUS_PENDING1—
MISSION_STATUS_RUNNING2—
MISSION_STATUS_PAUSED3—
MISSION_STATUS_COMPLETED4—
MISSION_STATUS_FAILED5—
MISSION_STATUS_CANCELLED6—

RunScope

RunScope selects which mission runs GetRunFindings reads.

Value#Description
RUN_SCOPE_UNSPECIFIED0—
RUN_SCOPE_PREVIOUS1RUN_SCOPE_PREVIOUS reads the run immediately before the current one.
RUN_SCOPE_ALL2RUN_SCOPE_ALL reads every run of this mission.

SpanKind

SpanKind represents the role of a span in a distributed trace.

Value#Description
SPAN_KIND_UNSPECIFIED0—
SPAN_KIND_INTERNAL1—
SPAN_KIND_SERVER2—
SPAN_KIND_CLIENT3—
SPAN_KIND_PRODUCER4—
SPAN_KIND_CONSUMER5—

StatusCode

StatusCode represents the status of a span.

Value#Description
STATUS_CODE_UNSPECIFIED0—
STATUS_CODE_OK1—
STATUS_CODE_ERROR2—

WorldEntityKind

WorldEntityKind names what an entity in the slice is.

Value#Description
WORLD_ENTITY_KIND_UNSPECIFIED0—
WORLD_ENTITY_KIND_HOST1—
WORLD_ENTITY_KIND_DOMAIN2—
WORLD_ENTITY_KIND_SUBDOMAIN3—
WORLD_ENTITY_KIND_CREDENTIAL4—
WORLD_ENTITY_KIND_ACCOUNT5—
WORLD_ENTITY_KIND_FINDING6—

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#TypeDescription
component_ref1stringcomponent_ref is the FGA object identifier, e.g. "component:gitlab".
can_read2bool—
can_configure3bool—
can_execute4bool—
sources5repeated GrantSourcesources 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#TypeDescription
kind1GrantSource.Kind—
source_object2stringsource_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#TypeDescription
plugin_ref1string—
sources2repeated 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#TypeDescription
target_principal_id1stringtarget_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#TypeDescription
principal_id1stringprincipal_id is the FGA principal identifier of the principal this response describes.
kind2PrincipalKind—
name3stringname is the human-readable name the principal was registered with (e.g. "scanner-bot"). Used for display; not used for authz.
tenant_id4stringtenant_id is the tenant the principal belongs to.
component_grants5repeated ComponentGrantEffectivecomponent_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_grants6repeated PluginGrantEffectiveplugin_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_grants7repeated gibson.capability.v1.CapabilityGrantInfoactive_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) rather than minting a parallel type.
truncated8booltruncated 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_sessions9boolcan_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). It exists so admin UIs 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_UNSPECIFIED0—
KIND_DIRECT1KIND_DIRECT — tuple writes the principal directly.
KIND_TENANT_MEMBER2KIND_TENANT_MEMBER — inherited via tenant#member.
KIND_TEAM_MEMBER3KIND_TEAM_MEMBER — inherited via team#member.
KIND_OWNER4KIND_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_UNSPECIFIED0—
PRINCIPAL_KIND_AGENT1—
PRINCIPAL_KIND_TOOL2—
PRINCIPAL_KIND_PLUGIN3—

Package gibson.job.v1

Package gibson.job.v1 declares jobs, the unit of work a bank member holds (ADR-0017).

Every input to a member is a structured job. A chat turn is a job with only a goal. A job is one persistent Claude Code session with its own worktrees. It stays open across inputs until a scorer closes it with a verdict and a score. The worker never closes its own job.

Services

JobService

JobService opens jobs on a bank, sends them input, closes them, and reads them back. People and platform services call it. A dispatched component uses the mirrored OpenJob, SendInput and CloseJob on gibson.harness.v1.HarnessCallbackService under its own grant.

CloseJob

CloseJobRequest → CloseJobResponse

CloseJob closes a job with a verdict and a score. The member runs one wrap-up turn, performs the deliverables, removes the worktrees, and archives the transcript. Only a scorer closes a job: a person, a verification agent, or the job node executor.

GetJob

GetJobRequest → GetJobResponse

GetJob returns one job by id.

ListJobs

ListJobsRequest → ListJobsResponse

ListJobs returns jobs of the caller's tenant, newest first. Filter by bank, by member, or by state.

OpenJob

OpenJobRequest → OpenJobResponse

OpenJob opens a job on a bank. The daemon routes it to a member with a free slot, or queues it, or spills it per the bank policy. Set member_id to pin the job to one member of that bank.

SendInput

SendInputRequest → SendInputResponse

SendInput sends the next message to an open job. The daemon mints the per-turn grant and delivers the input to the member that holds the job.

StreamJobEvents

StreamJobEventsRequest → stream StreamJobEventsResponse

StreamJobEvents follows one job: inputs, state changes, deliverables and the close. The stream starts with the backlog after since_seq, then follows live until the job closes.

Messages

Acceptance

Acceptance is how a job is judged. The job node executor runs the verify loop against it. A person or an agent that closes a job by hand reads it as guidance.

Field#TypeDescription
verifier_component1stringverifier_component names the component that judges the work, in the slash form "agent/<name>". Empty means no verify loop: a person or an agent closes the job.
passing_score2doublepassing_score is the score, from 0.0 to 1.0, at or above which the verifier accepts the work.
max_passes3int32max_passes is how many verify passes the job node executor runs before it closes the job as FAILED. Zero means one pass. This bounds the verify loop INSIDE one job. A mission node's RetryPolicy is a different thing: it retries the whole node.

CloseJobRequest

CloseJobRequest closes a job with a verdict and a score.

Field#TypeDescription
job_id1stringjob_id is the job. Required.
verdict2JobVerdictverdict is the outcome. Required.
score3doublescore is the scorer's score, from 0.0 to 1.0.

CloseJobResponse

CloseJobResponse carries the job after the close was recorded. The wrap-up turn runs after this returns.

Field#TypeDescription
job1Jobjob is the job as stored.

Deliverable

Deliverable is one outward result of a job the driver performed at wrap-up.

Field#TypeDescription
kind1DeliverableKindkind is what was done.
ref2stringref is the branch name or the merge request id on the forge.
url3stringurl is where a person opens the deliverable.

GetJobRequest

GetJobRequest names one job.

Field#TypeDescription
job_id1stringjob_id is the job. Required.

GetJobResponse

GetJobResponse carries one job.

Field#TypeDescription
job1Jobjob is the job.

Input

Input is one message to a job. The member pulls inputs outbound through SubscribeInput on the harness callback and runs one turn per input under the grant the input carries.

Field#TypeDescription
job_id1stringjob_id is the job the input belongs to.
message2stringmessage is the text of the input.
sender3gibson.common.v1.Principalsender is who sent the input.
grant4stringgrant is the per-turn capability grant JWT for this input. The daemon sets it when it delivers the input to the member. A client never sets it. The daemon rejects an input that arrives with a grant.
sent_at5google.protobuf.Timestampsent_at is when the input was sent.
kind6InputKindkind is what the input asks the member to do.
id7stringid is the input id. The daemon assigns it. A member that reconnects uses it to skip an input it already ran.

Job

Job is one persistent Claude Code session on a bank member with its own worktrees.

Field#TypeDescription
id1stringid is the job id. The daemon assigns it.
bank_id2stringbank_id is the bank the job was opened on.
member_id3stringmember_id is the member that holds the job. Empty while the job waits in the bank queue.
state4JobStatestate is where the job is in its life.
spec5JobSpecspec is the structured input that opened the job.
claude_session_id6stringclaude_session_id is the Claude Code session the member reopens with --resume. The member reports it through ReportJobState.
opened_by7gibson.common.v1.Principalopened_by is who opened the job.
opened_at8google.protobuf.Timestampopened_at is when the job was opened.
last_input_at9google.protobuf.Timestamplast_input_at is when the job last received input. The stale limit counts from here.
closed_at10google.protobuf.Timestampclosed_at is when the job closed. Unset while open.
verdict11JobVerdictverdict is the outcome. Unspecified while open.
score12doublescore is the scorer's score, from 0.0 to 1.0. Zero while open.
deliverables13repeated Deliverabledeliverables lists what left the sandbox at wrap-up.
attempts14int32attempts counts verify passes the job node executor ran on this job.

JobEvent

JobEvent is one change on a job, for StreamJobEvents.

Field#TypeDescription
seq1uint64seq is the per-job sequence number, from 1. Pass it back as since_seq to resume without a gap or a duplicate.
occurred_at2google.protobuf.Timestampoccurred_at is when the change happened.
kind3JobEventKindkind is what changed.
job_id4stringjob_id is the job.
state5JobStatestate is the state after the change. Set for OPENED, STATE and CLOSED.
input6Inputinput is the input that was sent, without its grant. Set for INPUT.
deliverable7Deliverabledeliverable is the deliverable the member reported. Set for DELIVERABLE.
verdict8JobVerdictverdict is the outcome. Set for CLOSED.
score9doublescore is the scorer's score. Set for CLOSED.
message10stringmessage is a human-readable note on the change.

JobSpec

JobSpec is the structured input that opens a job: the goal, the repositories and credentials the work needs, the World nodes it starts from, and how it is judged. The daemon reads repositories and credential_names before it mints the per-turn grant, so they are declared fields. context is free-form. Anything the daemon must enforce lives in a declared field.

A JobSpec says WHAT to do. It carries no execution bounds. Bounds are gibson.types.v1.TaskConstraints and they ride on the dispatch envelope (gibson.types.v1.Task.constraints), which the daemon fills from the bank policy and from the mission node. This package imports nothing above gibson.common.v1 on purpose, so gibson.types.v1.Task can carry a JobSpec without a cyclic import.

Field#TypeDescription
goal1stringgoal is what the job must achieve, in plain words.
repositories2repeated RepositorySpecrepositories lists the repositories the job works in.
credential_names3repeated stringcredential_names lists the credentials the member may read during the job. The per-turn grant covers these and no others.
inputs4repeated stringinputs lists World node ids the job starts from: findings, plans, earlier deliverables.
acceptance5Acceptanceacceptance is how the job is judged.
context6map<string, gibson.common.v1.TypedValue>context is free-form context for the member. The daemon does not read it.

ListJobsRequest

ListJobsRequest pages through jobs of the caller's tenant. Every filter that is set narrows the list.

Field#TypeDescription
bank_id1stringbank_id keeps only jobs of this bank.
member_id2stringmember_id keeps only jobs this member holds.
state3JobStatestate keeps only jobs in this state. Unspecified means every state.
page_size4int32page_size is the maximum number of jobs to return. Zero means the server default.
page_token5stringpage_token is the next_page_token of the previous page. Empty for the first page.

ListJobsResponse

ListJobsResponse carries one page of jobs.

Field#TypeDescription
jobs1repeated Jobjobs is the page.
next_page_token2stringnext_page_token fetches the next page. Empty on the last page.

OpenJobRequest

OpenJobRequest opens a job on a bank.

Field#TypeDescription
bank_id1stringbank_id is the bank to open the job on. Required.
member_id2stringmember_id pins the job to one member of that bank. Empty lets the daemon pick a member with a free slot.
spec3JobSpecspec is the structured input. Required.

OpenJobResponse

OpenJobResponse carries the opened job.

Field#TypeDescription
job1Jobjob is the job as stored. member_id is empty while it waits in the queue.

RepositorySpec

RepositorySpec names one repository a job works in and what leaves the sandbox at wrap-up.

Field#TypeDescription
name1stringname is the directory name of the worktree the member sees. Unique inside the job. Required.
connector_ref2stringconnector_ref names the connector that holds the forge credential, in the slash form "connector/<name>". Required.
project3stringproject is the project path on the forge, for example "group/repo". Required.
base_branch4stringbase_branch is the branch the job branch starts from and the merge request targets. Empty means the project default branch.
deliverable5DeliverableKinddeliverable is what the member does with the work at wrap-up. Required.

SendInputRequest

SendInputRequest sends the next message to an open job.

Field#TypeDescription
job_id1stringjob_id is the job. Required.
message2stringmessage is the text of the input. Required.
kind3InputKindkind is what the input asks the member to do. Unspecified means INPUT_KIND_TURN. A client never sends INPUT_KIND_WRAP_UP.

SendInputResponse

SendInputResponse carries the input as the daemon recorded it.

Field#TypeDescription
input1Inputinput is the input without its grant.

StreamJobEventsRequest

StreamJobEventsRequest names the job to follow.

Field#TypeDescription
job_id1stringjob_id is the job. Required.
since_seq2uint64since_seq is the last event seq the client saw. The stream starts with the backlog after it. Zero means the whole backlog.

StreamJobEventsResponse

StreamJobEventsResponse carries one job event.

Field#TypeDescription
event1JobEventevent is the change.

Enums

DeliverableKind

DeliverableKind is what the member does with the work on a repository at wrap-up. The driver performs it under the job's connector token. Claude commits on the job branch and never holds the token.

Value#Description
DELIVERABLE_KIND_UNSPECIFIED0—
DELIVERABLE_KIND_PUSH_BRANCH1DELIVERABLE_KIND_PUSH_BRANCH: push the job branch to the remote.
DELIVERABLE_KIND_MERGE_REQUEST2DELIVERABLE_KIND_MERGE_REQUEST: push the job branch and open a merge request against base_branch.
DELIVERABLE_KIND_NONE3DELIVERABLE_KIND_NONE: leave the work in the sandbox. Nothing leaves.

InputKind

InputKind is what an input asks the member to do.

Value#Description
INPUT_KIND_UNSPECIFIED0—
INPUT_KIND_TURN1INPUT_KIND_TURN: run one more turn with this message.
INPUT_KIND_ANSWER2INPUT_KIND_ANSWER: this message answers the question the job asked when it entered WAITING.
INPUT_KIND_WRAP_UP3INPUT_KIND_WRAP_UP: the final turn after CloseJob. Commit, push, open the merge request, and summarize. The daemon sends it, never a client.

JobEventKind

JobEventKind is what a JobEvent reports.

Value#Description
JOB_EVENT_KIND_UNSPECIFIED0—
JOB_EVENT_KIND_OPENED1JOB_EVENT_KIND_OPENED: the job was opened. state is set.
JOB_EVENT_KIND_INPUT2JOB_EVENT_KIND_INPUT: an input was sent. input is set without its grant.
JOB_EVENT_KIND_STATE3JOB_EVENT_KIND_STATE: the state changed. state is set.
JOB_EVENT_KIND_DELIVERABLE4JOB_EVENT_KIND_DELIVERABLE: the member reported a deliverable. deliverable is set.
JOB_EVENT_KIND_CLOSED5JOB_EVENT_KIND_CLOSED: the job closed. verdict and score are set. The stream ends after this event.

JobState

JobState is where a job is in its life.

Value#Description
JOB_STATE_UNSPECIFIED0—
JOB_STATE_OPEN1JOB_STATE_OPEN: the job is opened and waits for a member to take it.
JOB_STATE_WORKING2JOB_STATE_WORKING: the member runs a turn on the job.
JOB_STATE_WAITING3JOB_STATE_WAITING: the member asked a question or finished a turn and waits for the next input.
JOB_STATE_CLOSED4JOB_STATE_CLOSED: a scorer closed the job. verdict and score are set.

JobVerdict

JobVerdict is the outcome a scorer gives when it closes a job.

Value#Description
JOB_VERDICT_UNSPECIFIED0—
JOB_VERDICT_ACCOMPLISHED1JOB_VERDICT_ACCOMPLISHED: the job met its acceptance.
JOB_VERDICT_FAILED2JOB_VERDICT_FAILED: the job did not meet its acceptance.
JOB_VERDICT_ABANDONED3JOB_VERDICT_ABANDONED: the job went idle past the bank stale limit, or the bank was deleted.

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#TypeDescription
llm_slot_names1repeated string—
declared_tool_dependencies2repeated string—
declared_plugin_dependencies3repeated 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#TypeDescription
manifest_id1string—
manifest_version2uint64—
tenant_id3string—
subject4string—
issued_at5google.protobuf.Timestamp—
expires_at6google.protobuf.Timestamp—
ttl_seconds7uint32—
tenant_context10TenantContext—
agents11repeated ComponentCapability—
tools12repeated ComponentCapability—
plugins13repeated ComponentCapability—
cross_component_rules20repeated CrossComponentRule—
cross_component_rules_truncated21bool—
limits30LimitsAndQuotas—
available_llm_slots31repeated string—
memory32MemoryPermissions—
signature200bytesSignature payload (Ed25519 over body with signature/kid cleared).
signing_key_id201string—

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#TypeDescription
name1string—
kind2stringDEPRECATED: prefer principal_kind. String-form kind for legacy consumers; one-minor-release deprecation window.
component_ref3string—
version4string—
description5string—
is_system6bool—
owner_tenant7string—
permissions10repeated string—
agent_contract20AgentContract—
tool_contract21ToolContract—
plugin_contract22PluginContract—
liveness30ComponentLiveness—
principal_kind40gibson.identity.v1.PrincipalKindprincipal_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#TypeDescription
status1string—
last_heartbeat2google.protobuf.Timestamp—
instance_count3uint32—

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#TypeDescription
source_component_ref1string—
target_component_ref2string—
effect3CrossComponentRule.Effect—
reason4string—

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#TypeDescription
agent_principal_id1string—

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#TypeDescription
manifest1CapabilityManifest—

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#TypeDescription
max_tokens_per_call1uint64—
max_tokens_per_session2uint64—
rate_limit_per_minute3uint32—
max_spend_usd4string—

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#TypeDescription
event_type1ManifestInvalidationEvent.EventType—
tenant_id2string—
reason3string—
new_manifest_version4uint64—
emitted_at5google.protobuf.Timestamp—

MemoryPermissions

MemoryPermissions expresses per-tier memory access (e.g. "ro", "rw", "").

Field#TypeDescription
working1string—
mission2string—
longterm3string—

PluginContract

PluginContract enumerates a plugin's callable methods with per-method schemas and per-method FGA-derived invocation permission.

Field#TypeDescription
methods1repeated PluginMethod—

PluginMethod

Field#TypeDescription
name1string—
params_schema_json2string—
result_schema_json3string—
can_invoke4bool—

TenantContext

TenantContext surfaces the tenant identity and team memberships that gate the manifest's scope.

Field#TypeDescription
tenant_id1string—
tenant_display_name2string—
team_memberships3repeated string—
is_admin4bool—

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#TypeDescription
input_proto_name1string—
output_proto_name2string—
input_schema_json3string—
output_schema_json4string—
idempotency5ToolIdempotencysee 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#TypeDescription
event1ManifestInvalidationEvent—

Enums

CrossComponentRule.Effect

Value#Description
EFFECT_UNSPECIFIED0—
EFFECT_ALLOW1—
EFFECT_DENY2—

ManifestInvalidationEvent.EventType

Value#Description
EVENT_TYPE_UNSPECIFIED0—
EVENT_TYPE_HEARTBEAT1—
EVENT_TYPE_INVALIDATED2—

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_UNSPECIFIED0—
TOOL_IDEMPOTENCY_AT_MOST_ONCE1—
TOOL_IDEMPOTENCY_AT_LEAST_ONCE2—
TOOL_IDEMPOTENCY_EXACTLY_ONCE3—

Package gibson.mission.v1

Schema evolution policy (mission-schema-canonicalization Requirement 7):

  1. NodeType, Language, BackoffStrategy, and any future enum values are append-only. Existing values are NEVER renumbered or removed.
  2. Deprecated values are marked [deprecated = true] and accompanied by a // reserved comment explaining the supersession.
  3. MissionNode.config oneof variants are append-only with the same discipline; reuse of a tag number is forbidden.
  4. 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#TypeDescription
agent_name1stringAgentName is the name of the agent to execute
task2gibson.types.v1.TaskTask is the agent task configuration
max_tokens_per_call3optional int32max_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.
llm_slots5repeated LLMSlotConfigllm_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: multi-slot LLM binding contract.

ConditionNodeConfig

ConditionNodeConfig contains configuration for condition nodes

Field#TypeDescription
expression1stringExpression to evaluate (e.g., "result.status == 'success'")
true_branch2repeated stringTrueBranch contains node IDs to execute if condition is true
false_branch3repeated stringFalseBranch contains node IDs to execute if condition is false
language4LanguageLanguage 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 (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#TypeDescription
store_input1boolStoreInput determines whether to store input data in GraphRAG
store_output2boolStoreOutput determines whether to store output data in GraphRAG
retention3google.protobuf.DurationRetention specifies how long to retain data (0 = forever)
encryption4boolEncryption determines whether data should be encrypted at rest
access_control5repeated stringAccessControl specifies who can access this data

JobNodeConfig

RetryPolicy defines the retry behavior for a mission node JobNodeConfig contains configuration for job nodes. JOB = a unit of work driven on a bank of always-on coding agents. The executor opens a job on the bank, then runs the verify loop: it dispatches the acceptance step to the declared verifier component, and on failure sends the verifier's report as the next input to the SAME job, so the agent keeps its conversation and its worktrees. When the verifier passes, or the passes run out, the executor calls CloseJob with a verdict and a score.

The loop lives inside this node. The mission graph stays a DAG: a job node never adds a loop edge.

Field#TypeDescription
bank_ref1stringbank_ref names the bank to open the job on, by id or by name. Required.
spec2gibson.job.v1.JobSpecspec is the structured input that opens the job: goal, repositories, credential names, World inputs, and the acceptance the verify loop runs against. Required.
constraints3gibson.types.v1.TaskConstraintsconstraints bound every turn of the job. The daemon clamps them to the bank policy. Unset means the bank default.

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#TypeDescription
wait_for1repeated stringwait_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.
strategy2MergeStrategystrategy selects how upstream results are combined.
aggregator3stringaggregator 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#TypeDescription
slot1stringslot is the slot name this binding targets. Empty defaults to "primary".
provider2stringprovider is the configured provider's name for the calling tenant.
model3stringmodel 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: MissionConstraints proto promotion.

Field#TypeDescription
max_duration1google.protobuf.Durationmax_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_tokens2int64max_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_cost3doublemax_cost is the cumulative LLM cost ceiling in USD across all agent nodes. 0.0 means unlimited.
max_findings4int32max_findings is the maximum number of findings to collect before the mission stops. 0 means unlimited.
severity_threshold5stringseverity_threshold is the minimum severity level required to record a finding. Common values: "low", "medium", "high", "critical". Empty string means accept all severities.
require_evidence6boolrequire_evidence indicates whether all findings must include proof-of-concept evidence before being recorded.
blocked_tools7repeated stringblocked_tools lists tool names that must not be invoked during this mission. The daemon enforces this at dispatch time.
blocked_domains8repeated stringblocked_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_agent9int32max_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_techniques10repeated stringallowed_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_techniques11repeated stringblocked_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_call12int32max_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).

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#TypeDescription
id1stringID is the unique identifier for this mission definition
name2stringName is a human-readable name for the mission
description3stringDescription provides additional context about what this mission does
version4stringVersion is the semantic version of the mission definition
target_ref5stringTargetRef is a reference to the target (name or ID) This needs to be resolved to a TargetID when creating a mission instance
nodes6map<string, MissionNode>Nodes contains all the nodes in the mission, indexed by node ID
edges7repeated MissionEdgeEdges contains all the directed edges connecting nodes in the mission
entry_points8repeated stringEntryPoints contains the IDs of nodes that can serve as entry points to the mission These are nodes with no incoming edges
exit_points9repeated stringExitPoints contains the IDs of nodes that can serve as exit points from the mission These are nodes with no outgoing edges
metadata10map<string, string>Metadata contains additional custom metadata for the mission
dependencies11MissionDependenciesDependencies specifies required agents and tools for this mission
source12stringSource is the git URL this mission was installed from (if applicable)
installed_at13google.protobuf.TimestampInstalledAt is the timestamp when this mission was installed
created_at14google.protobuf.TimestampCreatedAt is the timestamp when the mission definition was created
workspace15WorkspaceConfigWorkspace 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).
constraints16optional MissionConstraintsConstraints 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: MissionConstraints proto promotion.
decider_slot17optional LLMSlotConfigDeciderSlot names the mission-level LLM the brain's Decider runs on — the orchestration decision-maker, distinct from per-node agent slots. 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#TypeDescription
agents1repeated stringAgents lists required agent components by name or URL
tools2repeated stringTools lists required tool components by name or URL
plugins3repeated stringPlugins lists required plugin components by name or URL

MissionEdge

MissionEdge represents a directed edge in the mission DAG.

The graph is acyclic. A loop is never an edge. Work that repeats until it passes an acceptance step loops INSIDE one node: a job node runs its verify loop against the same job, and a node's RetryPolicy retries the node itself.

Field#TypeDescription
from1stringFrom is the source node ID
to2stringTo is the destination node ID
condition3stringCondition is an optional condition that must be satisfied for the edge to be traversed
metadata4map<string, string>Metadata contains additional metadata for the edge

MissionNode

MissionNode represents a single node in a mission DAG

Field#TypeDescription
id1stringID is the unique identifier for this node within the mission
type2NodeTypeType is the node type
name3stringName is a human-readable name for the node
description4stringDescription provides additional context about this node
agent_config5AgentNodeConfigAgentConfig for agent nodes
tool_config6ToolNodeConfigToolConfig for tool nodes
plugin_config7PluginNodeConfigPluginConfig for plugin nodes
condition_config8ConditionNodeConfigConditionConfig for condition nodes
parallel_config9ParallelNodeConfigParallelConfig for parallel nodes
dependencies10repeated stringDependencies lists node IDs that must complete before this node executes
timeout11google.protobuf.DurationTimeout is the maximum execution time for this node
retry_policy12RetryPolicyRetryPolicy defines retry behavior for this node
data_policy13DataPolicyDataPolicy defines data handling policy for this node. Deprecated: data reuse + scoping are no longer node-declared. Under the ECS brain (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.
metadata14map<string, string>Metadata contains additional custom metadata for this node
join_config15JoinNodeConfigJoinConfig 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_policy16ReusePolicyReusePolicy declares how this node's I/O is scoped + reused across mission runs. Deprecated: superseded by the ECS brain (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.
job_config17JobNodeConfigJobConfig for job nodes. Field number 17 because 16 is the sibling reuse_policy field.

oneof config — one of: agent_config, tool_config, plugin_config, condition_config, parallel_config, join_config, job_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#TypeDescription
sub_nodes1repeated MissionNodeSubNodes contains the nodes to execute in parallel
max_concurrency2int32MaxConcurrency 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#TypeDescription
plugin_name1stringPluginName is the name of the plugin to query
method2stringMethod is the plugin method to call
params3map<string, string>Params contains the method parameters
max_tokens_per_call4optional int32max_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.

RepositoryConfig

RepositoryConfig defines a single repository to clone. Maps directly to the SDK's workspace.RepositoryConfig type.

Field#TypeDescription
name1stringName is the unique identifier for this repository within the mission. Required.
url2stringURL is the Git repository URL (HTTPS or SSH). Required.
branch3stringBranch is the Git branch to checkout after cloning. Defaults to the repository's default branch when empty.
credential_name4stringCredentialName references a credential in the credential store. Optional — public repos don't need credentials.
shallow5boolShallow enables git clone --depth 1.
depends_on6repeated stringDependsOn lists repository names that must clone first. Enables topological ordering for multi-repo missions.

RetryPolicy

Field#TypeDescription
max_retries1int32MaxRetries is the maximum number of retry attempts
backoff_strategy2BackoffStrategyBackoffStrategy determines how delays are calculated between retries
initial_delay3google.protobuf.DurationInitialDelay is the delay before the first retry attempt
max_delay4google.protobuf.DurationMaxDelay is the maximum delay between retry attempts (used for exponential backoff)
multiplier5doubleMultiplier 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 (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#TypeDescription
output_scope1stringOutputScope: "mission_run" | "mission" | "global". Default: "mission".
input_scope2stringInputScope: "mission_run" | "mission" | "global". Default: "mission".
reuse3stringReuse: "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#TypeDescription
tool_name1stringToolName is the name of the tool to execute
input2map<string, string>Input contains the tool input parameters
max_tokens_per_call3optional int32max_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.

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#TypeDescription
repositories1repeated RepositoryConfigRepositories to clone for this mission. Each entry becomes a workspace addressable from agents via harness.Workspace(name).
settings2WorkspaceSettingsSettings carries workspace-wide knobs (cleanup, LSP, isolation).

WorkspaceSettings

WorkspaceSettings carries workspace-wide options.

Field#TypeDescription
cleanup_on_complete1boolCleanupOnComplete deletes workspace directories after the mission ends. Defaults to true at the daemon when unset (cleanup is the safe default).
use_worktrees2boolUseWorktrees enables Git worktrees for per-agent isolation — concurrent modifications without conflicts.
lsp_enabled3boolLSPEnabled starts language servers for code validation.
lsp_timeout4google.protobuf.DurationLSPTimeout caps LSP validation duration. Encoded as a protobuf Duration to preserve sub-second precision.
base_directory5stringBaseDirectory 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_UNSPECIFIED0Sentinel value - must be first
BACKOFF_STRATEGY_CONSTANT1Constant returns a constant delay for all retry attempts
BACKOFF_STRATEGY_LINEAR2Linear increases the delay linearly with each retry attempt
BACKOFF_STRATEGY_EXPONENTIAL3Exponential 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_UNSPECIFIED0Sentinel value - treated as LANGUAGE_CEL by the daemon.
LANGUAGE_CEL1Common 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_UNSPECIFIED0Sentinel - must be first.
MERGE_STRATEGY_CONCAT1CONCAT preserves source order in the merged output.
MERGE_STRATEGY_REDUCE2REDUCE applies a built-in reducer (semantics defined in the CONDITION/JOIN executor design).
MERGE_STRATEGY_FIRST3FIRST returns the first source to complete.
MERGE_STRATEGY_LAST4LAST returns the last source to complete.
MERGE_STRATEGY_CUSTOM5CUSTOM evaluates the JoinNodeConfig.aggregator CEL expression against the source results.

NodeType

NodeType defines the type of mission node

Value#Description
NODE_TYPE_UNSPECIFIED0Sentinel value - must be first
NODE_TYPE_AGENT1Agent node executes an agent
NODE_TYPE_TOOL2Tool node executes a tool
NODE_TYPE_PLUGIN3Plugin node calls a named method on a multi-method plugin component.
NODE_TYPE_CONDITION4Condition node performs conditional branching
NODE_TYPE_PARALLEL5Parallel node executes sub-nodes in parallel
NODE_TYPE_JOIN6Join node waits for multiple branches to complete
NODE_TYPE_JOB7Job node drives a job on a bank of always-on agents. Its executor opens the job, runs the verify loop against the acceptance the spec declares, and closes the job with a verdict.

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#TypeDescription
kind1PluginError.Kind—
message2stringmessage is human-readable. NEVER includes resolved secret values.

PluginInvokeRequest

Field#TypeDescription
plugin_name1stringplugin_name is the manifest.metadata.name of the target plugin.
method2stringmethod is the name of the plugin method to invoke. Must match one of the plugin's declared methods in its manifest.
request3google.protobuf.Anyrequest 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_ms4int64deadline_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#TypeDescription
result1google.protobuf.Anyresult carries the typed response payload, populated on success. Empty on error.
error2PluginErrorerror is populated when the plugin returned an error or the dispatch failed.

Enums

PluginError.Kind

Value#Description
PLUGIN_ERROR_KIND_UNSPECIFIED0—
PLUGIN_ERROR_KIND_UNAVAILABLE1PLUGIN_ERROR_KIND_UNAVAILABLE: no serving install or all installs unreachable.
PLUGIN_ERROR_KIND_UNAUTHORIZED2PLUGIN_ERROR_KIND_UNAUTHORIZED: FGA deny — defense in depth (ext-authz already denied at edge).
PLUGIN_ERROR_KIND_METHOD_NOT_FOUND3PLUGIN_ERROR_KIND_METHOD_NOT_FOUND: method not in the plugin's declared methods.
PLUGIN_ERROR_KIND_DEADLINE_EXCEEDED4PLUGIN_ERROR_KIND_DEADLINE_EXCEEDED: plugin did not return within deadline_ms.
PLUGIN_ERROR_KIND_HANDLER_FAILED5PLUGIN_ERROR_KIND_HANDLER_FAILED: plugin handler returned a non-nil error.
PLUGIN_ERROR_KIND_INTERNAL6PLUGIN_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#TypeDescription
install_id1string—
declared_name2string—
new_existing_ref3string—

EditPluginSecretBindingResponse

No fields.

GetPluginInstallRequest

Field#TypeDescription
install_id1string—

GetPluginInstallResponse

Field#TypeDescription
install1PluginInstallSummary—

ListPluginInstallsRequest

Field#TypeDescription
name_filter1string—
status_filter2PluginInstallStatus—
limit3int32—
offset4int32—

ListPluginInstallsResponse

Field#TypeDescription
installs1repeated PluginInstallSummary—
total2int32—

PluginInstallSummary

PluginInstallSummary is the wire-shape returned by ListPluginInstalls and GetPluginInstall.

Field#TypeDescription
install_id1string—
name2string—
version3string—
declared_methods4repeated string—
runtime_mode5string—
setec_required6bool—
host_id7string—
status8PluginInstallStatus—
address9string—
last_heartbeat_at_unix10int64—
created_at_unix11int64—
bound_secret_refs12repeated string—

PluginManifestValidationError

PluginManifestValidationError carries one structured manifest error.

Field#TypeDescription
field1stringfield is the dotted JSONPath into the manifest.
line2int32—
code3string—
message4string—

PluginSecretBinding

PluginSecretBinding describes one secret binding in a RegisterPlugin request.

Field#TypeDescription
declared_name1stringdeclared_name is the name as declared in the plugin manifest's spec.secrets[] entry.
mode2stringmode is one of: "existing" (bind to existing secret) or "create" (create new secret inline).
existing_ref3stringexisting_ref is the broker-namespaced name of an already-stored secret to bind to. Set when mode = "existing".
create_value4bytescreate_value is the plaintext bytes to store under declared_name when mode = "create". TLS in transit; never logged.

RegisterPluginRequest

Field#TypeDescription
manifest_yaml1bytesmanifest_yaml is the plugin manifest YAML bytes.
bindings2repeated PluginSecretBinding—
dry_run3booldry_run, when true, validates manifest + bindings without creating any state.
remote4boolremote, 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#TypeDescription
install_id1string—
plugin_principal_id2string—
bootstrap_token3stringbootstrap_token is the single-use enrollment token. Empty when dry_run.
bootstrap_token_expires_at_unix4int64—
validation_errors5repeated PluginManifestValidationError—

RevokePluginSecretBindingRequest

Field#TypeDescription
install_id1string—
declared_name2string—

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_UNSPECIFIED0—
PLUGIN_INSTALL_STATUS_SERVING1PLUGIN_INSTALL_STATUS_SERVING: install heartbeated within TTL and is accepting work.
PLUGIN_INSTALL_STATUS_UNREACHABLE2PLUGIN_INSTALL_STATUS_UNREACHABLE: install has not heartbeated within 90 seconds; not eligible for dispatch.
PLUGIN_INSTALL_STATUS_DEGRADED3PLUGIN_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#TypeDescription
id1stringid is the server-minted UUID. Empty on a CreateTarget request (ignored if set); always populated on responses.
name2stringname is a human-readable label (metadata only, not an identifier).
type3stringtype is the schema-based target type.
provider4stringprovider identifies the backing provider for model/provider targets.
connection5google.protobuf.Structconnection holds schema-based connection parameters (e.g. url, headers).
model6stringmodel is the model identifier for model targets.
config7google.protobuf.Structconfig holds free-form target configuration.
capabilities8repeated stringcapabilities lists capability tags advertised by the target.
auth_type9stringauth_type is the authentication scheme for the target.
credential_id10stringcredential_id references a stored credential. Empty when none.
status11stringstatus is the target lifecycle status.
description12stringdescription is free-text describing the target.
tags13repeated stringtags are user-assigned labels for filtering/organization.
timeout14int32timeout is the per-operation timeout in seconds.
created_at15google.protobuf.Timestampcreated_at is when the target was registered.
updated_at16google.protobuf.Timestampupdated_at is when the target was last modified.
url17stringurl is the target endpoint. Deprecated: prefer connection["url"].
headers18map<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#TypeDescription
provider1stringprovider filters by backing provider.
type2stringtype filters by schema-based target type.
status3stringstatus filters by lifecycle status.
tags4repeated stringtags filters to targets carrying all of the given tags.
limit5int32limit caps the number of results. Zero means the server default.
offset6int32offset 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 honor 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#TypeDescription
input_json1string—
timeout_ms2int64—

ExecuteResponse

Field#TypeDescription
output_json1string—
error2gibson.common.v1.Error—

GetDescriptorRequest

No fields.

GetDescriptorResponse

Field#TypeDescription
name1string—
description2string—
version3string—
tags4repeated string—
input_schema5gibson.common.v1.JSONSchema—
output_schema6gibson.common.v1.JSONSchema—

HealthRequest

No fields.

HealthResponse

Field#TypeDescription
status1gibson.common.v1.HealthStatus—

StreamExecuteRequest

Client -> Tool messages for streaming

Field#TypeDescription
start1ToolStartRequest—
cancel2ToolCancelRequest—

oneof payload — one of: start, cancel.

StreamExecuteResponse

Tool -> Client messages for streaming

Field#TypeDescription
progress1ToolProgress—
partial2ToolPartialResult—
warning3ToolWarning—
complete4ToolComplete—
error5ToolError—
trace_id10string—
span_id11string—
sequence12int64—
timestamp_ms13int64—

oneof payload — one of: progress, partial, warning, complete, error.

ToolCancelRequest

Field#TypeDescription
reason1string—

ToolComplete

Field#TypeDescription
output_json1stringFinal JSON-encoded output matching the tool's output schema

ToolError

Field#TypeDescription
error1gibson.common.v1.Error—
fatal2boolWhether this error is recoverable

ToolPartialResult

Field#TypeDescription
output_json1stringJSON-encoded partial output matching the tool's output schema
description2stringOptional description of this partial result

ToolProgress

Field#TypeDescription
percent1int32Progress percentage (0-100)
stage2stringCurrent stage description
message3stringHuman-readable status message

ToolStartRequest

Field#TypeDescription
input_json1string—
timeout_ms2int64—
trace_id3stringTrace ID for distributed tracing (propagated from agent/orchestrator).
parent_span_id4stringParent span ID for distributed tracing (propagated from agent/orchestrator).

ToolWarning

Field#TypeDescription
message1stringWarning message
code2stringOptional warning code

Package gibson.types.v1

Messages

ComplianceMapping

ComplianceMapping links a Finding to a compliance framework control. See finding/compliance_mapping.go for the author-side Go type.

Field#TypeDescription
framework1stringCompliance framework identifier (e.g. SOC2, NIST_AI_RMF, MITRE_ATLAS, MITRE_ATTACK, PLATFORM).
control_id2stringControl identifier within the framework.
rationale3stringOptional human-readable rationale.
evidence_ref4stringOptional pointer to supporting evidence.

Evidence

Evidence represents supporting evidence for a finding.

Field#TypeDescription
title1string—
type2EvidenceType—
content3string—
metadata4map<string, string>—

Finding

Finding represents a security vulnerability or issue discovered during testing.

Field#TypeDescription
id1string—
mission_id2string—
agent_name3string—
delegated_from4string—
title5string—
description6string—
category7string—
subcategory8string—
severity9FindingSeverity—
confidence10double—
status11FindingStatus—
mitre_attack12MitreMapping—
mitre_atlas13MitreMapping—
evidence14repeated Evidence—
reproduction15repeated ReproStep—
cvss_score16double—
risk_score17double—
remediation18string—
references19repeated string—
target_id20string—
technique21string—
tags22repeated string—
created_at23int64—
updated_at24int64—
compliance_mappings25repeated ComplianceMappingCompliance 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#TypeDescription
text1string—
embedding2repeated float—
top_k3int32—
node_types4repeated string—
min_score5double—
max_score6double—
mission_id7string—
mission_run_id8string—
scope9QueryScope—
filters10map<string, string>—
vector_weight11doubleWeights for hybrid scoring (must sum to 1.0)
graph_weight12double—

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#TypeDescription
mission_id1string—
run_number2int32run_number is sequential from 1.
status3stringstatus is the final status of this run.
findings_count4int32—
created_at5int64—
completed_at6int64completed_at is 0 while the run is still in flight.

MitreMapping

MitreMapping represents a mapping to MITRE ATT&CK or ATLAS framework.

Field#TypeDescription
matrix1string—
tactic_id2string—
tactic_name3string—
technique_id4string—
technique_name5string—
sub_techniques6repeated string—

ReproStep

ReproStep represents a step in reproducing a finding.

Field#TypeDescription
order1int32—
description2string—
input3string—
output4string—

Result

Result represents the outcome of a task execution.

Field#TypeDescription
status1ResultStatus—
output2gibson.common.v1.TypedValue—
finding_ids3repeated string—
metadata4map<string, gibson.common.v1.TypedValue>—
error5ResultError—

ResultError

ResultError represents a structured error with retry information.

Field#TypeDescription
code1gibson.common.v1.ErrorCode—
message2string—
details3map<string, string>—
retryable4bool—

Task

Task represents a goal-oriented task with context and constraints.

context is free-form: the daemon does not read it. Anything the daemon must enforce lives in a declared field. Resources a dispatched task needs (repositories, credential names, World inputs, acceptance) live in job, because the daemon reads them before it mints the task grant.

Field#TypeDescription
id1string—
goal2string—
context3map<string, gibson.common.v1.TypedValue>—
constraints4TaskConstraints—
metadata5map<string, gibson.common.v1.TypedValue>—
job6gibson.job.v1.JobSpecjob names the typed resources this task needs and how it is judged. It is set when the task opens or continues a job on a bank member. goal stays the goal; the spec's own goal is ignored on a dispatched task. Absent on a task that needs no repository, no credential and no acceptance step.

TaskConstraints

TaskConstraints represents execution constraints for a task.

Field#TypeDescription
max_turns1int32—
max_tokens2int32—
allowed_tools3repeated string—
blocked_tools4repeated string—

Enums

EvidenceType

EvidenceType represents the type of evidence collected.

Value#Description
EVIDENCE_TYPE_UNSPECIFIED0—
EVIDENCE_TYPE_REQUEST1—
EVIDENCE_TYPE_RESPONSE2—
EVIDENCE_TYPE_SCREENSHOT3—
EVIDENCE_TYPE_CODE4—
EVIDENCE_TYPE_LOG5—
EVIDENCE_TYPE_OTHER6—

FindingSeverity

FindingSeverity represents the severity level of a security finding.

Value#Description
FINDING_SEVERITY_UNSPECIFIED0—
FINDING_SEVERITY_CRITICAL1—
FINDING_SEVERITY_HIGH2—
FINDING_SEVERITY_MEDIUM3—
FINDING_SEVERITY_LOW4—
FINDING_SEVERITY_INFO5—

FindingStatus

FindingStatus represents the current status of a security finding.

Value#Description
FINDING_STATUS_UNSPECIFIED0—
FINDING_STATUS_OPEN1—
FINDING_STATUS_CONFIRMED2—
FINDING_STATUS_CLOSED3—
FINDING_STATUS_FALSE_POSITIVE4—

QueryScope

QueryScope represents the scope of a GraphRAG query.

Value#Description
QUERY_SCOPE_UNSPECIFIED0—
QUERY_SCOPE_MISSION_RUN1—
QUERY_SCOPE_MISSION2—
QUERY_SCOPE_GLOBAL3—

ResultStatus

ResultStatus represents the execution status of a task or operation.

Value#Description
RESULT_STATUS_UNSPECIFIED0—
RESULT_STATUS_SUCCESS1—
RESULT_STATUS_FAILED2—
RESULT_STATUS_PARTIAL3—
RESULT_STATUS_CANCELLED4—
RESULT_STATUS_TIMEOUT5—

Package taxonomy.v1

Messages

Account

Account represents: A principal/account on a target system or identity provider.

Field#TypeDescription
id1string—
provider2stringProperties
subject3string—
username4optional string—
status5optional string—
roles6repeated string—

AgentRun

AgentRun represents: Single execution of an agent within a mission

Field#TypeDescription
id1string—
agent_name2stringProperties
mission_run_id3optional string—
status4optional string—
started_at5optional int64—
completed_at6optional int64—
error_message7optional string—
actor_id8string—
actor_tenant_id9string—
api_key_id10optional string—
component_name11string—
component_version12string—
system_owned13bool—
parent_agent_run_id14optional string—
delegation_depth15optional int32—

Certificate

Certificate represents: TLS/SSL certificate

Field#TypeDescription
id1string—
subject2optional stringProperties
issuer3optional string—
serial_number4optional string—
not_before5optional int64—
not_after6optional int64—
fingerprint_sha2567optional string—
san8optional 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#TypeDescription
framework1string—
control_id2string—
rationale3optional string—
evidence_ref4optional 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#TypeDescription
id1string—
signal_id2stringProperties
actor_id3string—
actor_tenant_id4string—
api_key_id5optional string—
on_behalf_of6optional string—
roles_snapshot7repeated string—
mission_id8optional string—
mission_run_id9optional string—
agent_run_id10optional string—
parent_agent_run_id11optional string—
delegation_depth12optional int32—
trace_id13optional string—
caller_chain14repeated string—
caller_component15string—
caller_component_version16string—
target_component17string—
target_component_version18string—
system_owned19bool—
action20string—
effect21string—
resource_type22string—
resource_node_id23optional string—
resource_uri24optional string—
decision25string—
policy_id26optional string—
decision_reason27optional string—
success28bool—
error_code29optional string—
latency_ms30int64—
bytes_in31optional int64—
bytes_out32optional int64—
tokens_prompt33optional int32—
tokens_completion34optional int32—
occurred_at35int64—
resource_tags36optional string—
custom37optional string—
control_ids38repeated string—

Credential

Credential represents: A credential (secret material), identified by the hash of its secret. May work across scopes.

Field#TypeDescription
id1string—
hash2stringProperties
kind3optional string—
username4optional string—
source5optional string—
validated6optional bool—

Domain

Domain represents: Root domain entity (e.g., example.com)

Field#TypeDescription
id1string—
name2stringProperties
registrar3optional string—
created_date4optional int64—
expiry_date5optional int64—
nameservers6optional string—

Endpoint

Endpoint represents: Web endpoint or URL

Field#TypeDescription
id1string—
url2stringProperties
method3optional string—
status_code4optional int32—
content_type5optional string—
content_length6optional int64—
title7optional string—
parent_service_id8stringParent reference

Evidence

Evidence represents: Supporting evidence for a finding

Field#TypeDescription
id1string—
type2stringProperties
content3optional string—
content_type4optional string—
url5optional string—
parent_finding_id6stringParent reference

Finding

Finding represents: Security vulnerability or issue

Field#TypeDescription
id1string—
title2stringProperties
description3optional string—
severity4string—
confidence5optional double—
category6optional string—
subcategory7optional string—
remediation8optional string—
cvss_score9optional double—
cve_ids10optional string—
cwe_ids11optional string—
compliance_mappings12repeated 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#TypeDescription
id1stringIdentity
type2string—
properties3map<string, Value>Properties (flexible key-value)
parent_id4optional stringParent reference (set by BelongsTo)
parent_type5optional string—
parent_relationship6optional string—
mission_id10stringScoping (injected by harness - agents never set these)
mission_run_id11string—
agent_run_id12string—
discovered_by13string—
discovered_at14int64—
created_at20int64Timestamps
updated_at21int64—

Host

Host represents: IP address or hostname

Field#TypeDescription
id1string—
ip2optional stringProperties
hostname3optional string—
os4optional string—
os_version5optional string—
mac_address6optional string—
state7optional string—

ListValue

Field#TypeDescription
values1repeated Value—

LlmCall

LlmCall represents: Call to a large language model

Field#TypeDescription
id1string—
model2stringProperties
provider3optional string—
slot_name4optional string—
agent_run_id5optional string—
prompt_tokens6optional int32—
completion_tokens7optional int32—
total_tokens8optional int32—
latency_ms9optional int64—
started_at10optional int64—
actor_id11string—
actor_tenant_id12string—
api_key_id13optional string—
component_name14string—
component_version15string—
model_id16string—

MapValue

Field#TypeDescription
fields1map<string, Value>—

Mission

Mission represents: Top-level security assessment mission

Field#TypeDescription
id1string—
name2stringProperties
target3string—
status4optional string—
description5optional string—
started_at6optional int64—
completed_at7optional int64—

MissionRun

MissionRun represents: Single execution of a mission pipeline

Field#TypeDescription
id1string—
run_number2int32Properties
status3optional string—
started_at4optional int64—
completed_at5optional int64—
actor_id6string—
actor_tenant_id7string—
api_key_id8optional string—
mission_yaml_digest9string—
parent_mission_id10stringParent reference

Port

Port represents: Network port on a host

Field#TypeDescription
id1string—
number2int32Properties
protocol3string—
state4optional string—
reason5optional string—
parent_host_id6stringParent reference

Relationship

Relationship represents a connection between two nodes.

Field#TypeDescription
id1string—
from_id2string—
to_id3string—
type4string—
properties5map<string, Value>—
weight6double—
mission_id10stringScoping
mission_run_id11string—
created_at20int64Timestamps

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#TypeDescription
id1string—
scope_id2stringProperties
name3optional string—
kind4optional string—
cidrs5repeated string—
gateway_fingerprint6optional string—
reachable7optional bool—

Service

Service represents: Service running on a port

Field#TypeDescription
id1string—
name2stringProperties
product3optional string—
version4optional string—
extra_info5optional string—
banner6optional string—
cpe7optional string—
parent_port_id8stringParent reference

Subdomain

Subdomain represents: Subdomain under a root domain

Field#TypeDescription
id1string—
name2stringProperties
full_name3optional string—
parent_domain_id4stringParent reference

Technique

Technique represents: Attack technique (MITRE/Gibson)

Field#TypeDescription
id1string—
technique_id2stringProperties
name3string—
taxonomy4optional string—
tactic5optional string—
description6optional string—
url7optional string—

Technology

Technology represents: Technology/framework detected

Field#TypeDescription
id1string—
name2stringProperties
version3optional string—
category4optional string—
confidence5optional int32—
cpe6optional string—

ToolExecution

ToolExecution represents: Execution of a security tool

Field#TypeDescription
id1string—
tool_name2stringProperties
command3optional string—
exit_code4optional int32—
started_at5optional int64—
completed_at6optional int64—
stdout7optional string—
stderr8optional string—
actor_id9string—
actor_tenant_id10string—
api_key_id11optional string—
component_name12string—
component_version13string—
system_owned14bool—
parent_agent_run_id15stringParent reference

Value

Value represents a dynamic property value.

Field#TypeDescription
string_value1string—
int_value2int64—
double_value3double—
bool_value4bool—
bytes_value5bytes—
timestamp_value6int64—
list_value7ListValue—
map_value8MapValue—

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_UNSPECIFIED0—
CORE_NODE_TYPE_MISSION1—
CORE_NODE_TYPE_MISSION_RUN2—
CORE_NODE_TYPE_AGENT_RUN3—
CORE_NODE_TYPE_TOOL_EXECUTION4—
CORE_NODE_TYPE_LLM_CALL5—
CORE_NODE_TYPE_DOMAIN6—
CORE_NODE_TYPE_SUBDOMAIN7—
CORE_NODE_TYPE_HOST8—
CORE_NODE_TYPE_PORT9—
CORE_NODE_TYPE_SERVICE10—
CORE_NODE_TYPE_ENDPOINT11—
CORE_NODE_TYPE_TECHNOLOGY12—
CORE_NODE_TYPE_CERTIFICATE13—
CORE_NODE_TYPE_FINDING14—
CORE_NODE_TYPE_EVIDENCE15—
CORE_NODE_TYPE_TECHNIQUE16—
CORE_NODE_TYPE_COMPLIANCE_SIGNAL17—
CORE_NODE_TYPE_SCOPE18—
CORE_NODE_TYPE_CREDENTIAL19—
CORE_NODE_TYPE_ACCOUNT20—

CoreRelationType

CoreRelationType enumerates all core relationship types.

Value#Description
CORE_RELATION_TYPE_UNSPECIFIED0—
CORE_RELATION_TYPE_USED_TOOL1—
CORE_RELATION_TYPE_DELEGATED_TO2—
CORE_RELATION_TYPE_EMITTED_SIGNAL3—
CORE_RELATION_TYPE_T_R_I_G_G_E_R_E_D4—
CORE_RELATION_TYPE_HAS_SUBDOMAIN5—
CORE_RELATION_TYPE_RESOLVES_TO6—
CORE_RELATION_TYPE_HAS_PORT7—
CORE_RELATION_TYPE_RUNS_SERVICE8—
CORE_RELATION_TYPE_HAS_ENDPOINT9—
CORE_RELATION_TYPE_USES_TECHNOLOGY10—
CORE_RELATION_TYPE_SERVES_CERTIFICATE11—
CORE_RELATION_TYPE_A_F_F_E_C_T_S12—
CORE_RELATION_TYPE_HAS_EVIDENCE13—
CORE_RELATION_TYPE_USES_TECHNIQUE14—
CORE_RELATION_TYPE_LEADS_TO15—

On this page

Package gibson.agent.v1ServicesAgentServiceExecuteGetDescriptorGetSlotSchemaHealthMessagesAgentSlotConfigAgentSlotConstraintsAgentSlotDefinitionExecuteRequestExecuteResponseGetDescriptorRequestGetDescriptorResponseGetSlotSchemaRequestGetSlotSchemaResponseHealthRequestHealthResponseTargetSchemaProtoPackage gibson.agentidentity.v1ServicesAgentIdentityServiceCreateAgentIdentityListAgentIdentitiesRevokeAgentIdentityMessagesAgentIdentityComponentGrantCreateAgentIdentityRequestCreateAgentIdentityResponseListAgentIdentitiesRequestListAgentIdentitiesResponseRevokeAgentIdentityRequestRevokeAgentIdentityResponseEnumsPrincipalKindPackage gibson.bank.v1ServicesBankServiceCreateBankDeleteBankGetBankListBanksListMembersStartSignInStreamSignInSubmitSignInCodeUpdateBankMessagesBankCreateBankRequestCreateBankResponseDeleteBankRequestDeleteBankResponseGetBankRequestGetBankResponseListBanksRequestListBanksResponseListMembersRequestListMembersResponseMemberMemberStatusStartSignInRequestStartSignInResponseStreamSignInRequestStreamSignInResponseSubmitSignInCodeRequestSubmitSignInCodeResponseUpdateBankRequestUpdateBankResponseEnumsLoginShapeMemberStateSpillPolicyPackage gibson.budget_status.v1MessagesBudgetExceededEnumsBudgetScopePackage gibson.capability.v1MessagesCapabilityGrantInfoEnumsIsolationModeRecipientClassPackage gibson.common.v1MessagesErrorHealthStatusJSONSchemaMetadataPrincipalTypedArrayTypedMapTypedValueEnumsErrorCodeHealthStateNullValuePrincipal.KindPackage gibson.component.v1ServicesComponentServiceCallToolCallToolStreamCancelMissionCompleteCompleteStreamCompleteStructuredCompleteWithToolsCreateMissionDelegateToAgentDisablePluginEnablePluginFindSimilarAttacksFindSimilarFindingsGetAttackChainsGetCredentialGetFindingsGetMissionResultsGetMissionRunHistoryGetMissionStatusGetPluginConfigGetRelatedFindingsGetRunFindingsGetTaxonomySchemaHeartbeatListAgentsListAvailablePluginsListMissionsListTenantPluginsListToolsPollWorkQueryNodesQueryPluginQueueToolWorkRegisterComponentReportStepHintsRunMissionSubmitFindingSubmitResultTestPluginConnectionToolResultsUpdatePluginConfigWaitMissionWatchComponentEventsMessagesAgentDescriptorProtoCallToolRequestCallToolResponseCallToolStreamRequestCallToolStreamResponseCancelMissionRequestCancelMissionResponseCompleteRequestCompleteResponseCompleteStreamRequestCompleteStreamResponseCompleteStructuredRequestCompleteStructuredResponseCompleteWithToolsRequestCompleteWithToolsResponseComponentDescriptorComponentErrorComponentEventComponentMethodCreateMissionRequestCreateMissionResponseDelegateToAgentRequestDelegateToAgentResponseDisablePluginRequestDisablePluginResponseEnablePluginRequestEnablePluginResponseFindSimilarAttacksRequestFindSimilarAttacksResponseFindSimilarFindingsRequestFindSimilarFindingsResponseGetAttackChainsRequestGetAttackChainsResponseGetCredentialRequestGetCredentialResponseGetFindingsRequestGetFindingsResponseGetMissionResultsRequestGetMissionResultsResponseGetMissionRunHistoryRequestGetMissionRunHistoryResponseGetMissionStatusRequestGetMissionStatusResponseGetPluginConfigRequestGetPluginConfigResponseGetRelatedFindingsRequestGetRelatedFindingsResponseGetRunFindingsRequestGetRunFindingsResponseGetTaxonomySchemaRequestGetTaxonomySchemaResponseHeartbeatRequestHeartbeatResponseLLMMessageListAgentsRequestListAgentsResponseListAvailablePluginsRequestListAvailablePluginsResponseListMissionsRequestListMissionsResponseListTenantPluginsRequestListTenantPluginsResponseListToolsRequestListToolsResponsePluginAccessProtoPluginCatalogEntryProtoPollWorkRequestPollWorkResponseQueryNodesRequestQueryNodesResponseQueryPluginRequestQueryPluginResponseQueueToolWorkRequestQueueToolWorkResponseRegisterComponentRequestRegisterComponentResponseReportStepHintsRequestReportStepHintsResponseResourcesRunMissionRequestRunMissionResponseSubmitFindingRequestSubmitFindingResponseSubmitResultRequestSubmitResultResponseTestPluginConnectionRequestTestPluginConnectionResponseTokenUsageToolCallResultToolDefinitionToolDescriptorProtoToolResultsRequestToolResultsResponseUpdatePluginConfigRequestUpdatePluginConfigResponseWaitMissionRequestWaitMissionResponseWatchComponentEventsRequestEnumsContentTrustDispatchModeParseQualityPackage gibson.daemon.v1ServicesDaemonServiceBuildComponentCompleteMissionCUEConnectCreateMissionCreateMissionDefinitionCreateTargetDeleteTargetGetAgentStatusGetCapabilityManifestGetComponentLogsGetMissionDefinitionGetMissionGraphGetMissionHistoryGetMissionLayoutGetMyPermissionsGetTargetHoverMissionCUEListAgentsListMissionDefinitionsListMissionsListMyMembershipsListPluginsListTargetsListToolsPauseMissionPingQueryPluginRenewCapabilityGrantResumeMissionRunMissionSaveMissionLayoutShowComponentStartComponentStatusStopComponentStopMissionSubscribeUpdateMissionDefinitionUpdateTargetValidateMissionCUEWatchManifestInvalidationsMessagesAgentEventAgentInfoBuildComponentRequestBuildComponentResponseCUECompletionItemCUEDiagnosticCapabilitiesCheckpointMetadataCompleteMissionCUERequestCompleteMissionCUEResponseConnectRequestConnectResponseCreateMissionDefinitionRequestCreateMissionDefinitionResponseCreateMissionRequestCreateMissionResponseCreateTargetRequestCreateTargetResponseDeleteTargetRequestDeleteTargetResponseEventFindingEventFindingInfoGetAgentStatusRequestGetAgentStatusResponseGetComponentLogsRequestGetComponentLogsResponseGetMissionDefinitionRequestGetMissionDefinitionResponseGetMissionGraphRequestGetMissionGraphResponseGetMissionHistoryRequestGetMissionHistoryResponseGetMissionLayoutRequestGetMissionLayoutResponseGetMyPermissionsRequestGetMyPermissionsResponseGetTargetRequestGetTargetResponseHoverMissionCUERequestHoverMissionCUEResponseLLMEventListAgentsRequestListAgentsResponseListMissionDefinitionsRequestListMissionDefinitionsResponseListMissionsRequestListMissionsResponseListMyMembershipsRequestListMyMembershipsResponseListPluginsRequestListPluginsResponseListTargetsRequestListTargetsResponseListToolsRequestListToolsResponseLogEntryMembershipMissionMissionCheckpointMissionDefinitionInfoMissionEventMissionGraphMissionGraphEdgeMissionGraphNodeMissionGraphViewportMissionInfoMissionLayoutMissionMetricsMissionRunNodePositionOperationResultOrchestratorEventPauseMissionRequestPauseMissionResponsePermissionComponentGrantPermissionTeamMembershipPingRequestPingResponsePluginInfoQueryPluginRequestQueryPluginResponseRenewCapabilityGrantRequestRenewCapabilityGrantResponseResumeMissionRequestResumeMissionResponseRunMissionRequestRunMissionResponseSaveMissionLayoutRequestSaveMissionLayoutResponseShowComponentRequestShowComponentResponseStartComponentRequestStartComponentResponseStatusRequestStatusResponseStopComponentRequestStopComponentResponseStopMissionRequestStopMissionResponseSubscribeRequestSubscribeResponseToolEventToolInfoUpdateMissionDefinitionRequestUpdateMissionDefinitionResponseUpdateTargetRequestUpdateTargetResponseValidateMissionCUERequestValidateMissionCUEResponseEnumsMissionStatusPackage gibson.graph.v1ServicesGraphServiceGetFindingCountsGetFindingTimeSeriesGetFindingsGetGraphContextGetGraphStatsGetGraphSummaryGetMissionGraphGetTenantGraphQueryPathsWatchGraphUpdatesMessagesCountBucketEdgeFindingGetFindingCountsRequestGetFindingCountsResponseGetFindingTimeSeriesRequestGetFindingTimeSeriesResponseGetFindingsRequestGetFindingsResponseGetGraphContextRequestGetGraphContextResponseGetGraphStatsRequestGetGraphStatsResponseGetGraphSummaryRequestGetGraphSummaryResponseGetMissionGraphRequestGetMissionGraphResponseGetTenantGraphRequestGetTenantGraphResponseGraphSummaryStatsGraphUpdateNeighborEdgeNodeNodeCountByLabelPathQueryPathsRequestQueryPathsResponseTimeSeriesPointWatchGraphUpdatesRequestEnumsFindingCountGroupByGraphUpdate.KindPackage gibson.graphrag.v1MessagesAttackChainAttackPatternAttackStepCertificateCustomNodeDiscoveryResultDomainEndpointEvidenceExplicitRelationshipFindingFindingNodeGraphNodeGraphQueryHierarchyDefHostIFPDefListValueMapValueOntologyExtensionPortQueryResultRelationshipSameAsPairServiceSubdomainTechnologyValueEnumsQueryScopePackage gibson.harness.v1ServicesHarnessCallbackServiceApplicationFindingsAuthorizeCallToolProtoCallToolProtoStreamCancelMissionCloseJobCreateMissionDelegateToAgentDeleteSessionContextDevboxExecFindSimilarAttacksFindSimilarFindingsGenerateNodeIDGetAttackChainsGetCredentialGetFindingsGetMissionResultsGetMissionRunHistoryGetMissionStatusGetPlanContextGetRelatedFindingsGetRunFindingsGetSessionContextGetTaxonomySchemaLLMCompleteLLMCompleteStructuredLLMCompleteWithToolsLLMStreamListAgentsListMissionsListPluginsListToolsObserveOpenJobPullJobPutSessionContextQueryNodesQueryPluginQueueToolWorkRecordSpanRecordSpansReportDeliverableReportJobStateReportStepHintsRunMissionSearchToolsSendInputSubmitFindingSubscribeInputToolResultsValidateFindingValidateGraphNodeValidateRelationshipWaitForMissionWorkspaceCommitWorkspaceGetInfoWorkspaceListWorkspaceListFilesWorkspacePushWorkspaceReadFileWorkspaceWriteFileWorldViewMessagesAccountObservationAnyValueApplicationFindingApplicationFindingsRequestApplicationFindingsResponseAttackChainAttackPatternAttackStepAuthorizeRequestAuthorizeResponseBasicAuthCallToolProtoRequestCallToolProtoResponseCallToolProtoStreamRequestCallToolProtoStreamResponseCancelMissionRequestCancelMissionResponseCertificateObservationCloseJobRequestCloseJobResponseContextInfoCreateMissionRequestCreateMissionResponseCredentialCredentialObservationDelegateToAgentRequestDelegateToAgentResponseDeleteSessionContextRequestDeleteSessionContextResponseDevboxExecExitDevboxExecRequestDevboxExecResponseDomainObservationEndpointObservationFindSimilarAttacksRequestFindSimilarAttacksResponseFindSimilarFindingsRequestFindSimilarFindingsResponseFindingFilterFindingNodeGenerateNodeIDRequestGenerateNodeIDResponseGetAttackChainsRequestGetAttackChainsResponseGetCredentialRequestGetCredentialResponseGetFindingsRequestGetFindingsResponseGetMissionResultsRequestGetMissionResultsResponseGetMissionRunHistoryRequestGetMissionRunHistoryResponseGetMissionStatusRequestGetMissionStatusResponseGetPlanContextRequestGetPlanContextResponseGetRelatedFindingsRequestGetRelatedFindingsResponseGetRunFindingsRequestGetRunFindingsResponseGetSessionContextRequestGetSessionContextResponseGetTaxonomySchemaRequestGetTaxonomySchemaResponseGraphNodeGraphRAGResultHarnessAgentDescriptorHarnessErrorHarnessHealthStatusHarnessPluginDescriptorHarnessToolDescriptorHistoricalValueItemHostObservationJSONSchemaNodeKeyValueLLMCompleteRequestLLMCompleteResponseLLMCompleteStructuredRequestLLMCompleteStructuredResponseLLMCompleteWithToolsRequestLLMCompleteWithToolsResponseLLMMessageLLMStreamRequestLLMStreamResponseLifecycleEntityEdgeLifecycleEntityObservationListAgentsRequestListAgentsResponseListMissionsRequestListMissionsResponseListPluginsRequestListPluginsResponseListToolsRequestListToolsResponseLongTermMemoryResultMemoryObservationMissionConstraintsMissionFilterMissionInfoMissionMemoryItemMissionMemoryResultMissionMetricsMissionResultMissionRunSummaryMissionStatusInfoNodeReferenceOAuthCredentialObserveRequestObserveResponseOpenJobRequestOpenJobResponsePlanContextPortObservationPropertyMappingPullJobRequestPullJobResponsePutSessionContextRequestPutSessionContextResponseQueryNodesRequestQueryNodesResponseQueryPluginRequestQueryPluginResponseQueueToolWorkRequestQueueToolWorkResponseRecordSpanRequestRecordSpanResponseRecordSpansRequestRecordSpansResponseRelationshipRelationshipMappingReportDeliverableRequestReportDeliverableResponseReportJobStateRequestReportJobStateResponseReportStepHintsRequestReportStepHintsResponseRunMissionRequestRunMissionResponseSearchToolsCandidateSearchToolsRequestSearchToolsResponseSendInputRequestSendInputResponseSpanSpanEventStepHintsSubdomainObservationSubmitFindingRequestSubmitFindingResponseSubscribeInputRequestSubscribeInputResponseTaxonomyCapabilityTaxonomyMappingTaxonomyNodeTypeTaxonomyPropertyTaxonomyRelationshipTypeTaxonomyTargetTypeTaxonomyTechniqueTaxonomyTechniqueTypeTechnologyObservationTokenUsageToolCallToolCompleteEventToolDefToolErrorEventToolPartialResultEventToolProgressEventToolResultToolResultsRequestToolResultsResponseToolWarningEventTraversalOptionsTraversalResultValidateFindingRequestValidateFindingResponseValidateGraphNodeRequestValidateGraphNodeResponseValidateRelationshipRequestValidateRelationshipResponseValidationErrorValidationResponseWaitForMissionRequestWaitForMissionResponseWorkspaceCommitRequestWorkspaceCommitResponseWorkspaceGetInfoRequestWorkspaceGetInfoResponseWorkspaceInfoWorkspaceListFilesRequestWorkspaceListFilesResponseWorkspaceListRequestWorkspaceListResponseWorkspacePushRequestWorkspacePushResponseWorkspaceReadFileRequestWorkspaceReadFileResponseWorkspaceWriteFileRequestWorkspaceWriteFileResponseWorldEntityWorldViewRequestWorldViewResponseEnumsCredentialTypeMemoryTierMissionStatusRunScopeSpanKindStatusCodeWorldEntityKindPackage gibson.identity.v1ServicesIdentityServiceWhoAmIMessagesComponentGrantEffectiveGrantSourcePluginGrantEffectiveWhoAmIRequestWhoAmIResponseEnumsGrantSource.KindPrincipalKindPackage gibson.job.v1ServicesJobServiceCloseJobGetJobListJobsOpenJobSendInputStreamJobEventsMessagesAcceptanceCloseJobRequestCloseJobResponseDeliverableGetJobRequestGetJobResponseInputJobJobEventJobSpecListJobsRequestListJobsResponseOpenJobRequestOpenJobResponseRepositorySpecSendInputRequestSendInputResponseStreamJobEventsRequestStreamJobEventsResponseEnumsDeliverableKindInputKindJobEventKindJobStateJobVerdictPackage gibson.manifest.v1MessagesAgentContractCapabilityManifestComponentCapabilityComponentLivenessCrossComponentRuleGetCapabilityManifestRequestGetCapabilityManifestResponseLimitsAndQuotasManifestInvalidationEventMemoryPermissionsPluginContractPluginMethodTenantContextToolContractWatchManifestInvalidationsRequestWatchManifestInvalidationsResponseEnumsCrossComponentRule.EffectManifestInvalidationEvent.EventTypeToolIdempotencyPackage gibson.mission.v1MessagesAgentNodeConfigConditionNodeConfigDataPolicyJobNodeConfigJoinNodeConfigLLMSlotConfigMissionConstraintsMissionDefinitionMissionDependenciesMissionEdgeMissionNodeParallelNodeConfigPluginNodeConfigRepositoryConfigRetryPolicyReusePolicyToolNodeConfigWorkspaceConfigWorkspaceSettingsEnumsBackoffStrategyLanguageMergeStrategyNodeTypePackage gibson.plugin.v1ServicesPluginInvokeServicePluginInvokeMessagesPluginErrorPluginInvokeRequestPluginInvokeResponseEnumsPluginError.KindPackage gibson.pluginadmin.v1ServicesPluginAdminServiceEditPluginSecretBindingGetPluginInstallListPluginInstallsRegisterPluginRevokePluginSecretBindingMessagesEditPluginSecretBindingRequestEditPluginSecretBindingResponseGetPluginInstallRequestGetPluginInstallResponseListPluginInstallsRequestListPluginInstallsResponsePluginInstallSummaryPluginManifestValidationErrorPluginSecretBindingRegisterPluginRequestRegisterPluginResponseRevokePluginSecretBindingRequestRevokePluginSecretBindingResponseEnumsPluginInstallStatusPackage gibson.target.v1MessagesTargetTargetFilterPackage gibson.tool.v1ServicesToolServiceExecuteGetDescriptorHealthStreamExecuteMessagesExecuteRequestExecuteResponseGetDescriptorRequestGetDescriptorResponseHealthRequestHealthResponseStreamExecuteRequestStreamExecuteResponseToolCancelRequestToolCompleteToolErrorToolPartialResultToolProgressToolStartRequestToolWarningPackage gibson.types.v1MessagesComplianceMappingEvidenceFindingGraphQueryMissionRunSummaryMitreMappingReproStepResultResultErrorTaskTaskConstraintsEnumsEvidenceTypeFindingSeverityFindingStatusQueryScopeResultStatusPackage taxonomy.v1MessagesAccountAgentRunCertificateComplianceMappingComplianceSignalCredentialDomainEndpointEvidenceFindingGraphNodeHostListValueLlmCallMapValueMissionMissionRunPortRelationshipScopeServiceSubdomainTechniqueTechnologyToolExecutionValueEnumsCoreNodeTypeCoreRelationType