opa-ruby

A Ruby library and CLI for building, signing, and verifying Open Prompt Archive (OPA) files.

OPA archives are ZIP-based packages that bundle AI agent prompts with session history, data assets, and execution metadata into portable, distributable archives.

Installation

Add to your Gemfile:

gem "opa-ruby"

Or install directly:

gem install opa-ruby

Zero external dependencies — uses only Ruby stdlib (zlib, openssl).

Library Usage

Creating an archive

require "opa"

archive = OPA::Archive.new
archive.manifest["Title"] = "My Task"
archive.manifest["Execution-Mode"] = "batch"
archive.prompt = "Summarize the attached data."
archive.add_data("report.csv", File.read("report.csv"))

archive.write("my_task.opa")

Signing an archive

key  = OpenSSL::PKey::RSA.new(File.read("key.pem"))
cert = OpenSSL::X509::Certificate.new(File.read("cert.pem"))

archive = OPA::Archive.new
archive.prompt = "Do the thing."
archive.sign(key, cert, algorithm: "SHA-256")
archive.write("signed.opa")

Supported digest algorithms: SHA-256, SHA-384, SHA-512. MD5 and SHA-1 are rejected per spec.

Reading and verifying an archive

verifier = OPA::Verifier.new("signed.opa")

verifier.signed?            # => true
verifier.prompt             # => "Do the thing."
verifier.manifest["Title"]  # => "My Task"
verifier.data_entries       # => { "data/report.csv" => "..." }

# Verify signature (raises OPA::SignatureError on failure)
cert = OpenSSL::X509::Certificate.new(File.read("cert.pem"))
verifier.verify!(certificate: cert)

CLI Usage

The opa command provides three subcommands:

pack

Create an OPA archive from a prompt file.

opa pack prompt.md                                  # basic archive
opa pack prompt.md -t "My Task" -o task.opa         # with title and output path
opa pack prompt.md -d data.csv -d config.json       # with data files
opa pack prompt.md -s session.json                  # with session history
opa pack prompt.md -k key.pem -c cert.pem           # signed archive
opa pack prompt.md -k key.pem -c cert.pem --algorithm SHA-512

verify

Verify a signed archive's integrity.

opa verify archive.opa                    # verify using embedded certificate
opa verify archive.opa -c cert.pem       # verify against a specific certificate

inspect

Display archive metadata and contents.

opa inspect archive.opa

Core Classes

Class Purpose
OPA::Archive Builds .opa ZIP archives with manifest, prompt, data, and session entries
OPA::Verifier Reads archives, extracts entries, and verifies signatures
OPA::Signer JAR-format signing (SIGNATURE.SF + PKCS#7 block)
OPA::Manifest META-INF/MANIFEST.MF parser and generator
OPA::CLI Command-line interface

Development

bundle install
rake spec

License

MIT