AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
OrgX는 AI 작업 증거로, 의사결정·산출물·승인·영수증이 Claude Code·Codex·Cursor·OpenClaw와 연결됩니다
OrgX is proof for AI-delivered work: decisions, artifacts, approvals, and receipts stay connected across Claude Code, Codex, Cursor, and OpenClaw.
개발 도구TypeScript · JavaScriptGitHub @useorgx온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Account-free Agent Work Receipt v0.1 schema, types, conformance vectors, and deterministic validator.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Agent Work Receipt is an account-free interchange contract for recording what an
agent was asked to do, what authority it had, what it did, what changed, how the
result was checked, and what it cost.
The contract does not require an OrgX account, workspace id, UUID, database row,
or proprietary runtime. Every cross-system identifier is an opaque
{ system, type, id } reference owned by its producer. Git commits, GitHub pull
requests, MCP calls, A2A tasks, deployments, and OpenTelemetry traces can all be
represented without translation into an OrgX identifier.README 전문 보기 ↗Agent Work Receipt is an account-free interchange contract for recording what an agent was asked to do, what authority it had, what it did, what changed, how the result was checked, and what it cost.
The contract does not require an OrgX account, workspace id, UUID, database row,
or proprietary runtime. Every cross-system identifier is an opaque
{ system, type, id } reference owned by its producer. Git commits, GitHub pull
requests, MCP calls, A2A tasks, deployments, and OpenTelemetry traces can all be
represented without translation into an OrgX identifier.
agent-work-receipt/v0.1, agent-work-receipt/v0.2, and agent-work-receipt/v0.3schema/agent-work-receipt.v0.1.schema.json, schema/agent-work-receipt.v0.2.schema.json, schema/agent-work-receipt.v0.3.schema.jsonoutcome.claim_level) the validator holds to its supporting fields, per-action and per-effect coverage, verifier lineage on checks with a self-verification rule, and trace commitments (lineage.trace_commitments[]). See docs/v0.3.md.The required top-level records are:
intentactorauthorityactionsartifactsevidenceoutcomeverificationcostlineagehuman_interventionstimestampsintegrity is optional, but when present it always contains content_hash;
signatures without that hash are invalid. Artifact and evidence digests describe
their referenced bytes. Receipt content_hash hashes the UTF-8 bytes of RFC 8785
canonical JSON for the receipt with the entire root integrity property omitted.
The portable profile uses the exact algorithm identifiers sha-256 or sha256
and supports hex, canonical padded base64, and canonical unpadded base64url;
omitting digest encoding means hex.
Agent Work Receipt signature profile agent-work-receipt-signature/v0.1 uses
Ed25519 with a canonical unpadded base64url 64-byte signature. Its signed message
is the UTF-8 encoding of RFC 8785 canonical JSON with this semantic shape:
{
"content_hash": {
"algorithm": "sha-256",
"value": "lowercase 64-character hex"
},
"profile": "agent-work-receipt-signature/v0.1",
"protected": {
"algorithm": "ed25519",
"encoding": "base64url",
"key_id": "producer-owned key reference",
"signed_at": "optional protected timestamp",
"signer": "optional protected AgentWorkActor",
"attests": "optional protected attestation (v0.3.1): ingested | observed"
}
}
attests (any receipt version, since SDK 0.3.1; the signature profile is shared) says what the signature means, inside the
signed payload: ingested attests custody and integrity of the bytes the signer
received and is not an endorsement of the receipt's claim level, coverage,
verification, or acceptance; observed attests that the signer itself observed
or recorded the facts the receipt states. A signature without attests makes no
statement about its meaning, and its payload is unchanged from 0.3.0.
The hash is normalized to lowercase hex inside this envelope regardless of its receipt encoding. The signature value itself is excluded. This domain-separated payload binds the algorithm, key id, optional signer attribution, and optional signing time instead of leaving envelope metadata mutable.
Content equality, cryptographic signature validity, and signer trust are three
different states. verifyAgentWorkReceiptIntegrity reports them independently
and deliberately has no aggregate valid boolean. The SDK computes content
hashes itself. Since 0.3.0 it also verifies Ed25519 signatures itself (Web
Crypto) when given a resolve_public_key resolver; key resolution and trust
roots remain consumer policy. A caller can instead supply its own
verify_signature callback, which takes precedence and receives the exact
canonical signature payload, its UTF-8 bytes, and decoded signature bytes.
Numeric values follow the interoperable JSON/IEEE-754 boundary: they must be
finite and between -9007199254740991 and 9007199254740991; integer fields
must be safe integers. RFC 8785 hashing therefore has the same number semantics
in JavaScript, JSONB, and conforming consumers. Arbitrary-precision values
belong in a namespaced string extension with an explicit unit or encoding.
Install the account-free package from npm:
npm install @useorgx/agent-work-receipt
import {
createAgentWorkKeyResolver,
hashAgentWorkReceiptContent,
parseAgentWorkReceipt,
validateAgentWorkReceipt,
verifyAgentWorkReceiptIntegrity,
withAgentWorkReceiptContentHash,
type AgentWorkReceipt,
} from '@useorgx/agent-work-receipt';
const result = validateAgentWorkReceipt(input);
if (!result.ok) {
console.error(result.issues);
}
const receipt: AgentWorkReceipt = parseAgentWorkReceipt(input);
const portableReceipt = await withAgentWorkReceiptContentHash(receipt);
const digest = await hashAgentWorkReceiptContent(portableReceipt);
// Verify an independently received signed receipt without rehashing it first.
const signedReceipt: AgentWorkReceipt = parseAgentWorkReceipt(signedInput);
// Built-in Ed25519 verification with a pluggable key resolver (0.3.0+).
const report = await verifyAgentWorkReceiptIntegrity(signedReceipt, {
resolve_public_key: createAgentWorkKeyResolver({ keys: yourJwks }),
});
// Or keep full control with your own verifier callback.
const integrity = await verifyAgentWorkReceiptIntegrity(signedReceipt, {
verify_signature: async ({ signature, signature_payload, signature_bytes }) =>
verifyWithYourKeyring(signature.key_id, signature_payload, signature_bytes)
? 'verified'
: 'invalid',
evaluate_signer_trust: async ({ signature }) =>
yourTrustPolicy(signature) ? 'trusted' : 'untrusted',
});
The package ships an awr-verify command that validates a receipt, recomputes
its content hash, and verifies its signatures without any network access:
npx awr-verify receipt.json --key <base64url | hex | key file>
npx awr-verify receipt.json --keys jwks.json --strict --json
It exits 0 when the receipt is valid with no integrity failure, 1 when it is
invalid (including claim-level violations), 2 on a content-hash or signature
failure, 3 when --strict requirements are unmet, and 64 on a usage error. See
docs/v0.3.md.
withAgentWorkReceiptContentHash removes existing signatures by default because
rehashing can make them stale. A caller that has independently proved the
signatures still cover identical content may pass
{ preserve_signatures: true } as the third argument.
The hashing helpers use the Web Crypto API available in modern browsers and Node.js 20+. Canonicalization rejects cycles, non-JSON values, non-finite numbers, sparse arrays, non-plain objects, and unpaired UTF-16 surrogates instead of silently producing a non-conforming digest.
Duplicate JSON object names must be rejected before ordinary JSON parsing,
because JSON.parse and many other parsers irreversibly collapse them. Use
parseAgentWorkReceiptJson(rawText) at any raw-text boundary, or provide an
equivalent duplicate-aware parser before calling the object validator. Escaped
and literal spellings that decode to the same member name are duplicates.
Validation failures use RFC 6901 JSON Pointer paths and are sorted by path,
code, then message. This makes errors stable for CLIs, APIs, tests, and import
pipelines. parseAgentWorkReceipt throws AgentWorkReceiptValidationError with
the same structured issues. validateAgentWorkReceipt returns at most 100
issues; failure results include issue_count and issues_truncated so callers
can report the observed finding count without returning an amplified payload.
Schema validation fails fast at the first structural violation; schema-valid
receipts can receive multiple bounded semantic findings.
The standard JSON Schema date-time and uri-reference formats are validated
with AJV Formats in full mode. Timestamps therefore follow RFC 3339 (including
the permitted lowercase t and z forms), while URI references reject malformed
percent escapes, IP literals, and whitespace.
Before JSON Schema evaluation, the SDK applies bounded traversal guards: at
most 64 levels and 50,000 visited JSON nodes. These limits prevent adversarial
recursive extensions values from exhausting a validator. A document can
therefore satisfy the standalone JSON Schema yet still fail SDK/API admission
with input.structure_limit; public validator metadata exposes both limits.
The validator enforces the JSON Schema plus cross-record invariants:
The fixtures directory contains valid, account-free receipts emitted in the
style of Codex,
Claude Code, and
OpenClaw. The OpenClaw fixture demonstrates MCP, A2A,
and OpenTelemetry references in a single lineage record. The Claude Code fixture
carries the deterministic Ed25519 conformance signature and a public test key is
published in the integrity vectors; it is test material, not a production key.
The behavior-spec fixture demonstrates carrying an external trajectory-evaluation verdict — see Carrying evaluation verdicts.
Two reusable negative fixtures demonstrate distinct failure boundaries:
Portable implementations can consume two versioned, JSON-only boundaries:
conformance/agent-work-receipt-integrity-vectors.v0.1.json
fixes the RFC 8785 canonical strings and Appendix B number cases, SHA-256
encodings, receipt hash scope, raw duplicate-member rejection, protected
Ed25519 payload, and content/signature tamper vectors;conformance/agent-work-receipt-integrity-report.v0.1.schema.json
defines the language-neutral result states for content, cryptography, and
trust;conformance/agent-work-receipt-v0.3-vectors.json
fixes v0.3 validation results (valid cases, claim-level and self-verification
violations, schema violations), signature results for the signed
v0.3 fixture (wrong key, unknown key id,
tampered signature, tampered content), and awr-trace-merkle/v1 roots.The Codex fixture carries the published digest from those vectors. Conforming
implementations must reproduce it after removing only the root integrity
member. Changing claimed outcome or cost must change the digest; changing a
declared signature or hash does not change the computed content digest, but can
make the corresponding integrity state fail.
Conforming signature verifiers must reproduce the published payload bytes and
Ed25519 result. Altering key_id, signed_at, signer, signature bytes, or the
declared digest must fail cryptographic verification. Signer trust remains a
separate consumer decision.
Trajectory-evaluation standards such as
behavior specs (Braintrust +
Basis) compose with receipts rather than competing with them: the spec defines
how the agent should work, the judge produces a verdict, and the receipt binds
that verdict to the completed episode. The convention — verdicts as
verification.checks[] entries (true → passed, false → failed, NA →
skipped or inconclusive depending on the native na_reason), the exact spec
pinned by name + producer revision + digest under an evaluated_against lineage
edge, the judge as verification.verifier, and the rationale as evidence — is
specified in
docs/agent-behavior-spec-crosswalk.md
and demonstrated by
fixtures/braintrust-behavior-spec.json.
It introduces no new schema fields.
Portable receipts can remain entirely outside OrgX. Producers that want a
hosted ledger can POST https://useorgx.com/api/v1/agent-work-receipts with a
bearer token or authenticated session and this JSON body:
{
"workspace_id": "00000000-0000-0000-0000-000000000000",
"receipt": {},
"idempotency_key": "producer-owned-retry-key"
}
workspace_id and receipt are required; idempotency_key is optional. A new
import returns 201, and a safe retry of the same content returns 200. When no
key is supplied, OrgX derives one from the canonical SHA-256 hash of the full
receipt. An explicit key is workspace-scoped, and reuse for different content
returns 409. Imported producer claims remain unverified until OrgX records
hosted verification or human review. See the
public OpenAPI contract for complete
request, response, and authentication details.
extensions['org.orgx.review/v1'] carries what a reviewer needs to approve or
send back work: criteria with their quoted source and a source_check, four
proof lenses per criterion, episodes with stable ids tied to commits, and which
layers of the record exist. See docs/review-extension.md. Validate it with
validateOrgxReviewExtension(receipt); it never changes the result of
validateAgentWorkReceipt.
v0.1, v0.2, and v0.3 are interoperability previews; the validator dispatches on schema_version. Producers must emit the exact
schema_version they implement. Breaking field or meaning changes require a new
schema version; additions that older strict validators cannot accept also require
a new version. Runtime-specific data belongs in namespaced extensions and must
not be required to interpret the core receipt.