Threat Model

July 25, 2026 ยท View on GitHub

This is the canonical threat model for the public OpenCode Agent Orchestration Kit. It inventories the assets and boundaries that the kit can affect, the capabilities it declares, representative abuse cases, the controls that exist today, and the risk that remains.

The model describes observed public contracts. OpenCode permission frontmatter is a policy layer enforced by the OpenCode runtime; it is not an operating-system sandbox. A test proves only the behavior and scope named by that test.

Markdown is the sole source of truth. The tables below use stable IDs so scripts/check-threat-model.mjs can detect structural drift without generating or rewriting this document.

Scope and security objectives

The modeled system includes the published package, its lifecycle scripts, the portable OpenCode harness under opencode/, its agents and commands, durable loop and handoff contracts, review preparation, AHE evidence handling, optional plugins, Open Design, package checks, and the boundary used to prepare public releases.

The principal objectives are:

  • preserve human authorization for sensitive effects;
  • protect workspace, configuration, state, evidence, and package integrity;
  • keep private material out of public or network-facing surfaces;
  • contain filesystem and tool effects to their declared scope;
  • make important controls traceable to a test, check, or explicit limitation;
  • keep managed mutations recoverable and resource use bounded where supported.

OpenCode, Node.js, Git, the operating system, and the authentic sources used to verify pins, checksums, and signatures are part of the trusted computing base. Their internal security is outside this kit's guarantees. Repository content, external services, tool output, models, memory, and plugins are untrusted inputs.

Actors

IDActorTrustCapabilities
AC-001Authorized operator or maintainerTrusted only within the authority explicitly grantedStarts commands, approves gates, selects targets, accepts residual risk, and authorizes publication
AC-002Repository contributor or repository-controlled contentUntrustedControls source, diffs, documentation, filenames, links, and patches read by agents
AC-003Dependency, action, executable reference, or pluginUntrusted until pinned and reviewedCan execute code during installation, checks, CI, or agent runtime
AC-004Registry, Git host, MCP, model, tool, or remote serviceExternal and untrustedReturns artifacts, data, instructions, or failures across a network or tool boundary
AC-005Untrusted local processUntrustedCan race filesystem operations, replace paths, create symlinks, or contend for locks
AC-006Accidental operatorPartially trustedCan select the wrong target, approve the wrong scope, omit checks, or publish the wrong artifact

Assets

IDAssetProtection
A-001Operator intent and approvalIntegrity, authenticity, and durable attribution
A-002User workspace and source filesIntegrity, availability, and path containment
A-003Private configuration, secrets, credentials, and provider dataConfidentiality and integrity
A-004Agent permissions, routing, delegation, and workflow contractsIntegrity and traceability
A-005Handoffs, approvals, loop snapshots, histories, and locksIntegrity, authenticity, and recoverability
A-006Installation manifest, journal, backups, ownership, and rollback stateIntegrity, confidentiality, and recoverability
A-007Review, evaluation, and AHE evidenceIntegrity, confidentiality, and provenance
A-008Package contents, pins, checksums, tags, and release artifactsIntegrity, authenticity, and reproducibility
A-009Sessions, logs, plugin state, and runtime stateConfidentiality, integrity, and availability
A-010Boundary between private preparation and public publicationConfidentiality and data minimization

Trust boundaries

IDBoundaryFlow
TB-001Human to agent and HITL stateRequests, approvals, rejections, and authority enter the agent workflow
TB-002Repository content to instruction contextDiffs, documents, source, filenames, and patches enter prompts and reviews
TB-003Agent to tool, filesystem, shell, network, and delegated taskA model decision can become a local or external effect
TB-004Public package to installed targetVersioned package files can mutate a local installation
TB-005Managed source to user-owned target filesLifecycle ownership rules decide whether existing files are preserved or replaced
TB-006Local runtime to registry, Git, plugin, MCP, model, web, or Open DesignData and executable material cross an external-service boundary
TB-007Raw session or evidence to sanitized artifactPotentially private data is reduced for checks, reports, or publication
TB-008Private preparation to public sync and releaseOnly portable reviewed material may enter the public repository or package
TB-009Temporary workspace or process state to persistent filesystemReviews, journals, locks, backups, histories, sessions, and caches can survive a process

Agent capabilities

The executable source for each row is the corresponding frontmatter file. Shell summaries name the default and important exceptions rather than duplicating every glob. Network combines webfetch and websearch.

AgentEditShellNetworkExternal directoryDelegationRoleSource
debuggerDeny except docs/ai/evolution/**Ask by default; Git status, diff, and log allowedAllowDenyNoneOptional trace and root-cause sidecaropencode/agents/debugger.md
designerAskAsk by default; navigation allowedAllowDenyNoneUX, visual design, and Open Design handoffopencode/agents/designer.md
developerAllowAsk by default; declared test, lint, typecheck, and Git inspection commands allowedAskDenyNoneApproved implementation and validationopencode/agents/developer.md
evaluatorDeny except docs/ai/evolution/**Ask by default; declared evaluation and validation commands allowedAskDenyNoneOptional benchmark and smoke sidecaropencode/agents/evaluator.md
evolverDeny except docs/ai/evolution/**Ask by default; Git inspection allowedAskDenyNoneEvidence-based harness evolution sidecaropencode/agents/evolver.md
leadDenyAsk by default; read-only Git, navigation, search, and evidence collection exceptionsAllowDenydesigner, researcher, specifier, developer, reviewer, evaluator, debugger, evolverPrimary product-development orchestratoropencode/agents/lead.md
researcherAskAsk by default; Git inspection allowedAllowDenyNoneTechnical and product researchopencode/agents/researcher.md
review_apiDenyAsk by default; Git inspection allowed and RTK remains gatedDenyDenyNoneFocused API and compatibility reviewopencode/agents/review_api.md
review_coordinatorDenyAsk by default; deterministic review preparation allowedDenyDenyreview_quality, review_security, review_tests, review_apiPrimary review coordinatoropencode/agents/review_coordinator.md
review_qualityDenyAsk by default; Git inspection allowed and RTK remains gatedDenyDenyNoneFocused correctness and maintainability reviewopencode/agents/review_quality.md
review_securityDenyAsk by default; Git inspection allowed and RTK remains gatedDenyDenyNoneFocused security and supply-chain reviewopencode/agents/review_security.md
review_testsDenyAsk by default; Git inspection and declared test commands allowedDenyDenyNoneFocused test and regression reviewopencode/agents/review_tests.md
reviewerDenyAsk by default; declared validation and Git inspection commands allowedAskDenyNoneSenior diff and specification reviewopencode/agents/reviewer.md
scoperDeny except ask under docs/ai/**Ask by default; Git inspection allowedAllowDenyresearcher, specifierPrimary research-to-spec orchestratoropencode/agents/scoper.md
specifierAskAsk by default; Git status and diff allowedAllowDenyNoneSpecifications, tasks, acceptance criteria, and validation plansopencode/agents/specifier.md

These declarations limit the behavior OpenCode should permit. They do not stop a compromised runtime, dependency, operating-system process, or already-authorized shell command from acting with the privileges of the user account.

External surfaces

SurfaceBoundaryControls or limitations
npm registry and package metadataTB-006Exact dependency versions, lockfile integrity, dependency audit, signature audit, and package smoke reduce drift; registry compromise remains possible
Git repositories and external referencesTB-006Immutable commit pins and supply-chain checks reject unsupported mutable references
GitHub ActionsTB-006Third-party actions are pinned and checked; the CI host and pinned upstream remain trusted dependencies
OpenCode plugin runtimeTB-003
TB-006
Plugin dependencies are scoped and pinned; optional plugin behavior remains partly experimental
Superpowers upstream pluginTB-006The installation contract uses a reviewed immutable Git reference and explicit approval for changes
Open Design service and containerTB-003
TB-006
Documentation recommends local or authenticated network exposure; the service can execute agents and write workspace files
Agent web accessTB-003
TB-006
Frontmatter asks, allows, or denies web tools per role; fetched content remains untrusted
MCP, memory, models, and tool outputTB-003
TB-006
Persistent memory is a hint rather than truth; no general content-isolation guarantee exists
Package, tag, and release publicationTB-008Version checks, exact tarball smoke, canonical checksum, and separate human authorization reduce artifact mismatch

Persistence surfaces

SurfaceOwnerSensitivityLifecycleControls or limitations
.oak manifest, journal, backups, rollback, and lockLifecycle manager and operatorMay contain ownership metadata and copies of replaced private bytesCreated and updated transactionally; backups support rollback; uninstall follows ownershipNo-follow checks, target containment, restrictive backup modes, journal recovery, and exclusive lock; retention is operator-managed
.opencode/loops snapshots, histories, and locksLoop state tool and operatorApproved contract, progress, hashes, and execution historyInitialized, resumed, appended, repaired, migrated, and released through the loop-state toolContract hashes, append-only validation, idempotent action IDs, locks, and symlink containment
.opencode/handoffsHarness workflow and operatorDurable human approval and task contextWritten at approval boundaries and read when work resumesApproval status is explicit; filesystem access by other local processes remains possible
AHE raw and session evidenceEvaluator, debugger, and operatorPotentially contains prompts, paths, code, tool output, or secretsCollected privately, analyzed, and reduced into publishable artifactsSanitization and private/raw boundary are policy controls; retention and deletion depend on the operator
Review temporary workspaceReview preparation scriptsPatch content, filenames, findings, and metadataCreated for deterministic review preparation and cleaned after useSafe path handling, patch delimiters, size budgets, timeouts, and network-restricted review roles
OpenCode sessions, logs, and credentialsOpenCode runtime and operatorHighly sensitiveManaged by OpenCode outside this kit's lifecycleMust stay out of Git and public artifacts; OpenCode storage guarantees are outside scope
Optional plugin caches and runtime statePlugin runtime and operatorUsage metadata and runtime-derived valuesCreated and retained according to the plugin and OpenCode runtimeOptional and partly experimental; not all plugin state is covered by core package smoke

Data flows

  1. Request to effect. Operator intent crosses TB-001 into routing, then an agent decision crosses TB-003 into a tool, filesystem, shell, network call, or delegated task.
  2. Durable approval. A human decision crosses TB-001 into a handoff or loop contract that can survive a restarted process through TB-009.
  3. Installation. Public package material crosses TB-004 and TB-005 into a target, with ownership, journal, backup, conflict, and rollback decisions.
  4. Review. Repository-controlled diff and filenames cross TB-002 into a temporary review workspace, then findings cross TB-007 into sanitized output.
  5. Evidence reduction. Private raw sessions and evidence cross TB-007 only after minimization into a publishable contract or aggregate.
  6. Public sync and release. Portable selected files cross TB-008 into the public repository, package, tag, and release after leak and artifact checks.
  7. External interaction. A local agent, tool, or plugin crosses TB-006 to a registry, Git host, web page, model, MCP, or Open Design and receives an untrusted response.

Risk register

Severity describes operational priority within this system, not a calculated CVSS score. partially-mitigated means that useful controls exist but do not eliminate the documented abuse. No row is accepted on behalf of the maintainer.

IDTitleActor or inputAssetsBoundariesAbuseSeverityControlsEvidenceStatusResidualAuthorityReview trigger
TM-001Prompt injection from a diff or patchAC-002A-001
A-002
A-007
TB-002
TB-003
Patch text is treated as an instruction and causes an unauthorized tool or review actionhighReview prompts delimit patch data, repository content is declared untrusted, and focused roles restrict edits and networktest:opencode/scripts/adversarial-harness.test.mjs diff-injection-is-data
check:opencode/AGENTS.md untrusted repository rule
partially-mitigatedModels can still follow hostile content within an otherwise allowed actionmaintainerPrompt, review preparation, model, or permission change
TM-002Hostile instructions in repository documentationAC-002A-001
A-002
A-004
TB-002
TB-003
A repository document attempts to override active instructions or expand authorityhighLoaded instruction files remain authoritative while ordinary repository documents are treated as datatest:opencode/scripts/adversarial-harness.test.mjs repo-doc-is-data
check:opencode/AGENTS.md instruction precedence
partially-mitigatedNatural-language separation depends on model and runtime behaviormaintainerInstruction-loading or prompt hierarchy change
TM-003Hostile web, tool, MCP, model, or memory contentAC-004A-001
A-002
A-003
A-004
TB-003
TB-006
External output injects instructions, false facts, or malicious payloads into an agent decisionhighNetwork access is role-scoped and memory is explicitly a hint rather than truthcheck:opencode/scripts/check-harness.mjs permission contracts
limitation:no general isolation of external content
partially-mitigatedAllowed external content can influence agents and toolsmaintainerNew MCP, model, tool, plugin, or web-enabled role
TM-004Unauthorized write, delegation, or confused deputyAC-002
AC-004
A-001
A-002
A-004
TB-001
TB-003
A less-authorized input induces a more-authorized agent or delegated task to perform an effecthighClosed orchestration contracts, task allowlists, edit permissions, workflow barriers, and completion authority are checkedcheck:opencode/scripts/check-harness.mjs orchestration contracts
limitation:delegated authority is enforced as policy, not capability tokens
partially-mitigatedAuthority context can be misunderstood across natural-language handoffsmaintainerAgent, delegation, routing, or approval contract change
TM-005Shell allowlist or wrapper bypassAC-002
AC-003
A-002
A-003
A-004
TB-003An allowed wrapper or command pattern carries arguments that produce an unreviewed effecthighShell defaults to ask and wrapper arguments remain gated by declared patternstest:opencode/scripts/adversarial-harness.test.mjs rtk-wrapper-needs-approval
check:opencode/scripts/check-harness.mjs shell permission contracts
partially-mitigatedCorrectness depends on OpenCode matcher and shell semanticsmaintainerShell matcher, wrapper, or allowlist change
TM-006Network exfiltration during agent or review workAC-002
AC-004
A-002
A-003
A-007
TB-003
TB-006
Readable workspace or evidence data is sent through an allowed network toolhighFocused reviewers deny network and other roles ask or allow it explicitly; review policy treats secret-like data as sensitivetest:opencode/scripts/adversarial-harness.test.mjs review-network-not-allowed
check:opencode/scripts/check-harness.mjs reviewer network permissions
partially-mitigatedNetwork-enabled agents can expose data they are already authorized to readmaintainerNetwork permission, review role, or tool change
TM-007Filesystem escape by symlink, traversal, or raceAC-002
AC-005
A-002
A-003
A-006
TB-004
TB-005
TB-009
A managed path resolves outside the intended root or changes between validation and usehighLifecycle and state tools reject external symlinks, unsafe relative paths, and uncontained targets; locks reduce racestest:opencode/scripts/adversarial-harness.test.mjs external-symlink-rejected
test:opencode/scripts/adversarial-harness.test.mjs path-traversal-rejected
test:scripts/manage-installation.test.mjs containment cases
partially-mitigatedOS-level races and compromised local processes cannot be eliminated by path checks alonemaintainerFilesystem, archive, target-resolution, or temporary-file change
TM-008Hostile filenames, control characters, or archive pathsAC-002
AC-003
A-002
A-007
A-008
TB-002
TB-004
TB-009
A filename corrupts a review payload, escapes an archive root, or changes command interpretationhighReview path validation rejects control characters and package smoke rejects unsafe archive names and entry typestest:opencode/scripts/adversarial-harness.test.mjs control-filename-rejected
test:scripts/package-smoke.test.mjs archive validation
partially-mitigatedFilesystem and tool-specific filename semantics vary by platformmaintainerReview path, archive, tar, or platform-support change
TM-009Approval or durable-state tampering, corruption, or replayAC-002
AC-005
A-001
A-005
TB-001
TB-009
Stored approval is altered, an event is repeated, or a stale contract resumes as current authorityhighApproved-contract hashes, append-only validation, idempotent action IDs, journals, locks, and explicit approval status detect key mutationstest:opencode/scripts/adversarial-harness.test.mjs approval-hash-is-immutable
test:opencode/scripts/adversarial-harness.test.mjs repeated-event-rejected
test:opencode/scripts/loop-state.test.mjs durable-state cases
partially-mitigatedA process with the user's filesystem privileges can alter or delete state and force recoverymaintainerHandoff, loop schema, hash, journal, lock, or resume change
TM-010Secret leakage in patches, reviews, or sanitizationAC-002
AC-006
A-003
A-007
A-010
TB-002
TB-007
TB-008
Secret-like content reaches a review payload, evidence artifact, commit, or public packagehighSecret-risk classification, evidence sanitization rules, public leak scan, and package forbidden-state checks reduce exposuretest:opencode/scripts/adversarial-harness.test.mjs credential-canary-stays-local
check:scripts/check.sh public leak scan
test:scripts/package-smoke.test.mjs forbidden state
partially-mitigatedPattern checks cannot identify every secret or semantic disclosuremaintainerEvidence, review, leak-pattern, package-content, or publication change
TM-011Raw session or evidence disclosureAC-004
AC-006
A-003
A-007
A-009
A-010
TB-007
TB-008
Raw prompts, tool output, logs, or transcripts are copied into a public artifacthighRaw evidence is private by contract and public artifacts must be sanitized and minimizedcheck:opencode/docs/ai/harness/evidence.md evidence boundary
limitation:sanitization retains human review and cannot prove all semantic data is removed
partially-mitigatedAccidental copying or incomplete redaction remains possiblemaintainerEvidence collector, sanitizer, report, or sync workflow change
TM-012Sensitive bytes retained in backups or persistent stateAC-005
AC-006
A-003
A-006
A-009
TB-005
TB-009
Replaced private files survive in backups, histories, logs, or plugin caches longer than expectedmediumLifecycle backups use restrictive modes and managed cleanup follows explicit ownershiptest:scripts/manage-installation.test.mjs backup and rollback cases
limitation:operator controls host access and retention
partially-mitigatedRestrictive permissions do not erase data or protect against the same user accountmaintainerBackup, retention, uninstall, logging, or cache change
TM-013Malicious or mutable dependency, action, plugin, or external referenceAC-003
AC-004
A-002
A-003
A-008
TB-004
TB-006
A changed upstream reference or compromised package executes with developer privilegeshighExact pins, immutable Git references, lock integrity, checksums, audits, and explicit approval are checkedtest:opencode/scripts/adversarial-harness.test.mjs unpinned-ref-needs-approval
test:scripts/check-supply-chain.test.mjs pin mutations
check:scripts/check-supply-chain.mjs
partially-mitigatedAn authentic pinned upstream or registry account can still be compromisedmaintainerDependency, action, plugin, registry, pin, or override change
TM-014Experimental plugin behavior outside core smokeAC-003
AC-004
A-002
A-009
TB-003
TB-006
An optional plugin reads runtime state, fails unexpectedly, or gains behavior not exercised by installation smokemediumPlugin dependencies are scoped and typechecked; optional status is documentedcheck:package.json typecheck contract
limitation:plugin runtime is not covered by every core smoke
partially-mitigatedRuntime integration and OpenCode plugin APIs can change independentlymaintainerPlugin code, SDK version, or OpenCode compatibility change
TM-015Unsafe Open Design exposure or agent executionAC-004
AC-006
A-002
A-003
A-009
TB-003
TB-006
A reachable Open Design service accepts work that executes an agent against a sensitive workspacehighSecurity docs require local, trusted, VPN, or authenticated exposure and warn that agents can write filescheck:SECURITY.md supported use
check:docs/security.md Open Design guidance
limitation:network authentication is operator-provided
partially-mitigatedPublic exposure, weak authentication, or a wrongly selected workspace can still lead to compromisemaintainerOpen Design service, container, networking, or tool-registration change
TM-016Installation ownership conflict or incomplete rollbackAC-005
AC-006
A-002
A-006
TB-004
TB-005
TB-009
Installation overwrites user-owned content, loses ownership provenance, or cannot restore an interrupted mutationhighManifest ownership, preserved files, backups, transaction journal, lock, conflict detection, and rollback checks constrain mutationtest:scripts/manage-installation.test.mjs ownership and rollback cases
check:scripts/oak.mjs check command
partially-mitigatedDisk failure, manual state editing, or missing backups can prevent complete recoverymaintainerLifecycle schema, ownership, transaction, install, upgrade, uninstall, or rollback change
TM-017Version, tag, package, checksum, and release mismatchAC-006A-008
A-010
TB-004
TB-008
A different commit or tarball is tagged, checksummed, uploaded, or published than the artifact that passed checkshighVersion contract, package snapshot, canonical checksum, exact tarball smoke, and separate publication authorization reduce mismatchtest:scripts/package-smoke.test.mjs captured tarball and checksum cases
check:scripts/version.mjs
check:docs/supply-chain.md release procedure
partially-mitigatedSkipping the documented release sequence or uploading manually can still divergemaintainerVersion, package, tag, checksum, release, or publication workflow change
TM-018Resource exhaustion from patches, loops, tools, or subprocessesAC-002
AC-004
A-002
A-005
A-007
A-009
TB-002
TB-003
TB-009
Oversized input, repeated iteration, or a hanging process consumes time, memory, disk, or model budgetmediumReview preparation uses budgets and timeouts; loop invocation has an iteration captest:scripts/review-orchestrated-prepare.test.mjs budget and timeout cases
check:opencode/scripts/check-harness.mjs loop iteration contract
limitation:no system-wide resource quota
partially-mitigatedAllowed processes and external services can still exhaust host resourcesmaintainerBudget, timeout, loop, subprocess, or input-size change
TM-019Poisoned memory, MCP data, or reused evidenceAC-004A-001
A-004
A-007
A-009
TB-003
TB-006
TB-007
Stale or malicious remembered content is treated as current truth and changes a decisionhighPersistent memory is documented as a hint and important decisions require verification against current repository statecheck:opencode/AGENTS.md memory-as-hint rule
limitation:no provenance enforcement for every external memory or MCP response
partially-mitigatedPlausible poisoned context can still bias reasoning before verificationmaintainerMemory, MCP, evidence-reuse, retrieval, or provenance change
TM-020Private material crosses public sync or release boundaryAC-006A-003
A-007
A-010
TB-007
TB-008
Private configuration, service wiring, paths, raw evidence, or credentials enter a public diff or packagehighDeliberate file selection, public translation, leak scans, package file allow/deny checks, diff review, and separate commit/release gates constrain the boundarycheck:scripts/check.sh public leak scan
test:scripts/package-smoke.test.mjs forbidden package state
limitation:semantic privacy review remains human
partially-mitigatedNovel identifiers or sensitive prose can evade mechanical patternsmaintainerSync skill, leak scan, package files, documentation, commit, or release change

Adversarial traceability

The public adversarial corpus remains unchanged. Each scenario maps exactly once to its primary risk and to the existing executable defense suite.

Scenario IDRisk IDEvidence
diff-injection-is-dataTM-001test:opencode/scripts/adversarial-harness.test.mjs
repo-doc-is-dataTM-002test:opencode/scripts/adversarial-harness.test.mjs
external-symlink-rejectedTM-007test:opencode/scripts/adversarial-harness.test.mjs
path-traversal-rejectedTM-007test:opencode/scripts/adversarial-harness.test.mjs
control-filename-rejectedTM-008test:opencode/scripts/adversarial-harness.test.mjs
rtk-wrapper-needs-approvalTM-005test:opencode/scripts/adversarial-harness.test.mjs
review-network-not-allowedTM-006test:opencode/scripts/adversarial-harness.test.mjs
approval-hash-is-immutableTM-009test:opencode/scripts/adversarial-harness.test.mjs
credential-canary-stays-localTM-010test:opencode/scripts/adversarial-harness.test.mjs
unpinned-ref-needs-approvalTM-013test:opencode/scripts/adversarial-harness.test.mjs
repeated-event-rejectedTM-009test:opencode/scripts/adversarial-harness.test.mjs

Residual risks and assumptions

  • Permission frontmatter is not process, filesystem, container, or operating-system isolation.
  • A network-enabled agent can ingest hostile content and can expose data it is already able to read.
  • Tool, MCP, plugin, model, web, registry, and memory output remains untrusted.
  • Delegation can create confused-deputy behavior because authority is conveyed through policy and natural-language context rather than capability tokens.
  • Shell safety depends on the real OpenCode matcher, wrapper, and shell semantics.
  • Experimental plugins are outside some core installation and runtime guarantees.
  • Open Design can execute agent CLIs and write workspace files; authentication and network exposure remain operator responsibilities.
  • Raw evidence, sessions, logs, backups, histories, and caches can contain sensitive material.
  • Timeouts, budgets, locks, and iteration caps reduce but do not eliminate denial of service or resource exhaustion.
  • Pins, checksums, signatures, and audits cannot eliminate compromise of an authentic upstream source.
  • Private-to-public preparation still needs human semantic review.
  • Archive, checksum, version, tag, release upload, and registry publication can diverge if release checks and authorization gates are skipped.

Any new agent, external service, plugin, persistent surface, publication path, permission expansion, lifecycle mutation, or evidence pipeline change requires review of the affected rows. Accepted risk requires an explicit maintainer decision and a concrete review trigger.

Private and public boundary

Public artifacts may contain portable agent and workflow contracts, public package paths, generic threat taxonomy, public controls and tests, documented services, and honest limitations.

Public artifacts must not contain active private configuration, provider or MCP wiring, credentials, tokens, secrets, sessions, transcripts, logs, raw evidence, private service inventory, machine-local absolute paths, durable local approval state, or private product documents.

The checker catches structural omissions and a small set of known markers. It does not replace public-diff review, package inspection, or a human judgment about whether otherwise ordinary prose reveals private information.