CAP Open Protocol
CAP 1.0: an immutable, content-addressed and independently verifiable scientific snapshot protocol for Claims, Executions, Evidence, Assessments and Attestations.
CAP, the CiteArk Artifact Protocol, is an open protocol for immutable, content-addressed and independently verifiable scientific snapshots. It lets a researcher, Agent, laboratory or platform publish not just files, but the structured relationship between a Claim, the experiment that tested it, the execution that occurred, the evidence that was observed and the bounded assessment made from that evidence.
Claim → Experiment → Execution → Evidence → Assessment → AttestationCAP 1.0 is currently 1.0.0-alpha.1. The protocol library, schemas, pipeline
assembler, platform importer, verifier and conformance vectors implement the
model. CAP accepts 1.0 only:
earlier experimental formats and the .citeark suffix are rejected. The
verifier never guesses a format or silently migrates an unknown version.
CAP is Agent-, model-, cloud- and Registry-neutral. A structurally valid CAP proves content identity and internal bindings. It does not prove that a signer is trusted, that an Assessment is correct, that a result was independently repeated or that a paper is true.
Record, Artifact and Bundle
CAP separates three concepts that older package-oriented formats often combine:
| Concept | Meaning | Identity |
|---|---|---|
| Record | One typed scientific object, such as a Claim, Execution, Evidence or Assessment | Record SHA-256 |
| Artifact | An immutable graph of Records and Blob descriptors forming one scientific snapshot | Manifest SHA-256 |
| Bundle | A transport or presentation of an Artifact | Exact archive SHA-256 |
An Artifact might represent a research plan, a reproduction, a failed run, a
new parameter experiment or an independent assessment. Once addressed by its digest, it is
never modified. A retry or revision creates a new Artifact linked by
derivedFrom, revises, reproduces, extends or another typed relation.
A Bundle may add signatures, current download locations, previews and public metadata without changing the underlying Artifact identity.
Bundle layout
The first CAP 1.0 Bundle transport remains a regular tar+gzip file:
| Property | Value |
|---|---|
| Canonical suffix | .cap |
| Media type | application/vnd.citeark.cap+tar+gzip;version=1 |
| Manifest | cap-manifest.json |
| Current protocol | 1.0.0-alpha.1 |
| Accepted version | CAP 1.0.0-alpha.1 only |
artifact/
├── cap-manifest.json
├── records/
│ └── sha256/<prefix>/<digest>.json
├── blobs/
│ └── sha256/<prefix>/<digest>
├── attestations/
├── ro-crate-metadata.json
├── cap-locations.json
├── projections/
└── preview/The Artifact consists only of the canonical Manifest, declared Record bytes and declared embedded Blob bytes. Attestations, locations, projections and previews are Bundle attachments. A path locates bytes; it is never scientific identity.
Consumers must reject unsafe or duplicate paths, links, non-regular entries and
undeclared files under records/ or blobs/.
Content identity
The stable Artifact identity is computed from exact RFC 8785 canonical Manifest bytes:
artifactDigest = SHA-256(JCS(cap-manifest.json))The Manifest does not contain its own digest. A UUID may be a convenient label,
but sha256:<digest> is the immutable address.
Every normative JSON Record is stored as RFC 8785 JSON Canonicalization Scheme bytes: I-JSON data, UTF-16 key ordering, ECMAScript primitive serialization, UTF-8 encoding, and no whitespace or trailing newline. See RFC 8785.
Scientific decimals use strings rather than binary floating-point values:
{
"decimal": "81.900000",
"unit": "percent"
}Repacking the same Artifact, changing a preview, moving an external object or
adding a detached signature leaves artifactDigest unchanged. Changing a root,
Record, Blob descriptor or Artifact relation changes it.
Manifest and descriptors
cap-manifest.json declares the protocol version, Artifact creator, Profiles,
roots, Record descriptors, Blob descriptors and immutable relations.
{
"$schema": "https://citeark.com/schemas/cap/v1/manifest.schema.json",
"mediaType": "application/vnd.citeark.cap.manifest.v1+json",
"specVersion": "1.0.0-alpha.1",
"artifact": {
"id": "urn:uuid:artifact-01",
"createdAt": "2026-08-24T10:30:00Z",
"createdBy": {
"ref": "urn:uuid:actor-assembler",
"digest": "sha256:..."
}
},
"profiles": [
"https://citeark.com/cap/profiles/core/1.0",
"https://citeark.com/cap/profiles/reproduction/1.0"
],
"roots": [
{
"role": "primaryClaim",
"ref": "urn:uuid:claim-01",
"digest": "sha256:..."
}
],
"records": [],
"blobs": [],
"relations": []
}A Record descriptor binds logical ID, semantic type, Schema, media type, size, digest and current Bundle path. Same-Artifact references may use the logical ID because the Manifest resolves it to one digest. Cross-Artifact references also bind the target Artifact digest, Record digest and Record type.
Blob descriptors use the same digest, size and media-type pattern. Availability is one of:
embedded: the exact bytes are inside the Bundle;external: bytes are obtained separately and verified before use;withheld: sensitive or licensed bytes are intentionally unavailable, while their digest commitment and access policy remain portable.
Mutable download locations live in cap-locations.json, outside Artifact
identity.
Scientific Records
CAP 1.0 defines seven scientific Record types plus Manifest and descriptor schemas:
| Record | Responsibility |
|---|---|
Actor | Human, Agent, model, organization, runner or instrument identity claim |
SourceWork | Paper and digest-bound paper, code, dataset, model or supplement sources |
Claim | A scoped assertion and its source location, without a truth verdict |
Experiment | The prospective plan and exact blinded public execution contract |
Execution | What actually ran, where, when, by whom, and with what exit state |
Evidence | An observation, measurement, failure or output with explicit provenance basis |
Assessment | A bounded interpretation of Evidence with scope and limitations |
Execution never contains reproduced: true. Process success is a runtime
fact; Claim support belongs only in an Assessment.
Evidence records distinguish observed, declared, inferred and attested
basis. A metric derived outside the Agent trust boundary identifies its parser,
version, configuration, implementation digest when available and raw input Blob
digests. This prevents an Agent's self-reported number from silently becoming
verified evidence.
Assessment conclusions are deliberately limited to supports, challenges,
contradicts and inconclusive. notAssessed is not a scientific conclusion;
it is the absence of an Assessment and belongs in a Registry coverage view.
Independent reproduction is multidimensional. An Assessment records operator, implementation, environment, hardware and data independence separately.
Blinded execution and policy commitment
The execution Agent receives only Experiment.publicContract. That contract
must not expose the paper-reported target, tolerance, acceptance criterion or
private verification policy.
Before execution, the coordinator commits to the private policy using a high-entropy nonce:
policyCommitment = SHA-256(JCS({
algorithm: "citeark-policy-commitment-v1",
nonce: <at least 128 bits of entropy>,
policy: <private comparison policy>
}))The later Assessment reveals the policy and nonce. A verifier recomputes the commitment. This prevents post-outcome policy changes without making a low-entropy target enumerable from a salt-free hash.
A failed or partial execution is still a useful Artifact. If integrity fails or
trustworthy Evidence is unavailable, the Assessment is inconclusive rather
than an invented negative or positive result.
Agent Workflow 1.0
The CAP 1.0 reference Agent has one publication path:
Research Compiler
→ Research Plan CAP
→ blinded Execution Contract 1.0 + private policy commitment
→ isolated execution + Execution Result 1.0
→ out-of-sandbox evidence parsing, integrity checks and Assessment
→ Reproduction CAP --reproduces--> Research Plan Artifact DigestExecution Result 1.0 may report only execution state, commands that actually
ran, code changes, evidence files, scientific outputs and limitations. It may
not contain verification or observedResult. Contract-selected deterministic
parsers derive formal measurements from raw Evidence; an independent evaluator
creates the scientific conclusion.
A low-level run directory is recovery and audit input, not an Artifact. The
reference CLI exposes no pipeline replay command that can publish a CAP from
an arbitrary research.json, private policy and run directory. Local
pipeline execute creates both plan and reproduction .cap files. The
platform path instead accepts only a plan digest that it has already verified
and bound to the processing job. A missing reproduces relation, a target
outside the verified plan, or a non-1.0 result envelope fails closed.
The complete pipeline records ten stages: research compilation, research-plan snapshot, execution contract, compute scheduling, autonomous reproduction, evidence parsing, verification, conclusion/card rendering, Artifact assembly and single-file packing. Internal checkpoints may restore execution but never cross the CAP trust boundary or become platform import sources.
Profiles
CAP Core stays small. Versioned Profiles add domain or publication constraints:
| Profile | Adds |
|---|---|
| Core | Manifest, typed Records, Blobs, digests, references and versioning |
| Research Plan | Pre-execution SourceWork, complete Claim coverage, planned Experiments and source-declared values |
| Computational Run | Experiment, Execution, environment, inputs, outputs and Evidence |
| Reproduction | SourceWork, Claim, pre-committed policy, Execution, Evidence and Assessment |
| Agent Trace | Observable prompts, identities, tools, commands, files, errors and retries |
| Public Bundle | Root attestation, rights metadata, RO-Crate projection and portable export |
| Restricted Evidence | External/withheld content commitments and access policy |
Future physical experiments, instruments, samples or mathematical proofs extend CAP through new Profiles rather than expanding Core for every discipline.
Trace without private chain-of-thought
The Agent Trace Profile stores observable NDJSON events with increasing
sequence, eventType, occurredAt, observedAt, actor, execution, parent,
inputs, outputs and attributes. Trace and span identifiers may use OpenTelemetry
conventions.
CAP records prompts approved for publication, model and Agent identity, tool calls, commands, file changes, errors, retries and explicit structured decisions. It never requires hidden chain-of-thought.
Attestation and trust
CAP root attestations are detached. The preferred format is an in-toto Statement inside a DSSE envelope. The Statement subject is the Artifact SHA-256 and the CAP predicate identifies the actor and attestation role.
The reference implementation verifies Ed25519 keys offline. Public publishers may use Sigstore Bundles; institutions may use their own PKI or external key-resolution policy.
Verification reports these questions separately:
- Is the Artifact structurally conformant?
- Are declared Record and embedded Blob bytes intact?
- Is a signature valid and bound to this Artifact?
- Is the signer trusted for this purpose?
- What bounded conclusion does an Assessment contain?
- Has an independent actor published new Evidence or Assessment?
Co-signing identical bytes may add a detached Attestation. New evidence or a new scientific judgment creates a new Artifact that refers to the original.
Rights and interoperability
Rights attach to each source and Blob. A paper, repository, dataset, model and generated checkpoint may all have different terms. CAP does not grant redistribution rights and never lets one global license override those differences.
CAP reuses established standards as projections or envelopes:
- RO-Crate 1.3 for public research-object metadata;
- Workflow Run RO-Crate for existing workflow provenance;
- W3C PROV for Entity, Activity and Agent mappings;
- SPDX 3.0.1 for detailed software, model, dataset, build and rights inventories;
- in-toto and DSSE for authenticated metadata;
- OCI descriptor concepts for future Registry transport.
These projections never override canonical CAP Record contents or digests.
Pipeline and platform import
The CiteArk pipeline uses a two-layer CAP 1.0 snapshot chain. There is no platform-specific import bundle in between:
Research Compiler
→ Research Plan CAP
→ SourceWork / all Claims / planned Experiments / declared Evidence
→ trusted verification and research-plan import
each blinded reproduction target
→ Reproduction CAP --reproduces--> Research Plan Artifact Digest
→ Experiment / Execution / observed Evidence / Assessment
raw evidence + typed outputs
→ content-addressed Blobs + Evidence Records
private policy reveal + comparisons
→ Assessment Record
runner identity + processing binding
→ Actor Records + detached DSSE AttestationA Research Plan CAP declares the research-plan/1.0 Profile. It contains no
Execution or Assessment, and values reported by the paper have basis: declared. A planned Experiment may omit the private verification-policy
commitment. Once scheduled, its Reproduction CAP must bind that commitment and
reveal it in the Assessment. Every Reproduction CAP must use a Manifest
reproduces relation to bind the imported Research Plan Artifact digest.
An internal Research Compiler checkpoint exists only for crash recovery. It has no CAP Artifact identity and cannot create repository, Claim or experiment projections. No pending signature or placeholder attestation crosses the trust boundary.
Small Blobs are embedded. Large Blobs are declared as external; the worker
uploads them by digest before uploading the .cap Bundle. During import, the
platform re-verifies the archive digest, Artifact Digest, every Record,
embedded Blobs, policy commitment reveal, trusted Ed25519 DSSE signature and
the attested jobId, repositoryId, source digest and base commit. A failure at
any boundary prevents publication.
The platform first builds repository, Claim and planned-experiment projections
from a verified Research Plan CAP. It then builds run, Evidence and Assessment
projections from verified Reproduction CAPs whose plan relation matches. The
importer also verifies that the exact Claim and Experiment versions in the
reproduction are present and bound together in that plan; a correct parent
digest alone cannot authorize an out-of-plan target. Files under projections/citeark/ and
preview/ are presentation-only and are never authoritative import inputs.
CAP 1.0 has no platform/import-bundle.json and no compatibility branch for an
older manifest.
Verify and pack
The reference CLI processes CAP 1.0 only:
cd agent
node src/cli.mjs cap verify --dir ./artifact
node src/cli.mjs cap pack --dir ./artifact --output ./artifact.cap
node src/cli.mjs cap verify --file ./artifact.capA CAP 1.0 verifier safely extracts the Bundle, parses exact canonical Manifest
bytes, computes artifactDigest, validates descriptors, checks every Record and
embedded Blob, resolves references, applies supported Profiles, verifies policy
reveals and finally checks detached Attestations.
Inputs without cap-manifest.json, with another specVersion, without the CAP
1.0 Manifest in the archive, or using the .citeark suffix are rejected. To
bring an external paper, repository or dataset package into CAP, an importer
creates a new CAP 1.0 Artifact with explicit source and transformation
provenance; renaming the source bytes is not migration.
It reports structural conformance, materialization, signature validity, signer
trust and scientific Assessment separately. A CLI valid exit status is never a
truth score.
Reference materials in the CiteArk repository:
agent/protocol/CAP.md— normative specification;agent/protocol/profiles/— Profile rules;agent/protocol/MAPPINGS.md— standard mappings;agent/schemas/cap/v1/— nine JSON Schemas;agent/protocol/conformance-v1.0-alpha.1.json— public vectors;agent/src/cap/v1/— reference implementation.
The protocol, schemas and conformance vectors use CC0 1.0. That dedication does not alter the rights of scientific material referenced by a CAP Artifact.
Core Concepts
The object chain behind a research repository snapshot — Paper, Claim, Experiment, Run, Evidence, Attestation — and the rules behind the three verification rings and the License Gate.
Authentication
The two identities — browser sessions and API Keys — plus Key creation, the permission model, error codes, and security recommendations.