Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Skill for the steganography infrastructure module providing QR code generation with dynamic mailto links, hash manifests, metadata payloads, and document-wide overlay processing. Use this module to insert opt-in cryptographic and steganographic provenance data onto PDFs.
.claude/skills/docxology-infrastructure-steganography/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 2% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 12% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -6% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 10% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 79% | 0% |
The steganography module applies cryptographic hash manifests, text overlays, and interactive metadata objects (like mailto QR barcodes) directly to PDF post-rendering.
core.py)The primary orchestrator of steganography operations. It handles config extraction, hashing, alpha-text watermarking, and barcodes.
pythonfrom infrastructure.steganography import SteganographyConfig, SteganographyProcessor from pathlib import Path processor = SteganographyProcessor(SteganographyConfig(enabled=True, overlay_mode="text")) final_pdf = processor.process( Path("output.pdf"), author_emails=["test@example.com"], )
barcodes.py)Responsible for generating dense Error-Correction Q-Level QR codes and Code128 barcode strips.
pythonfrom infrastructure.steganography.barcodes import create_barcode_strip_overlay overlay_pdf_bytes = create_barcode_strip_overlay( page_width=612, page_height=792, code128_data="paper-id-001", )
hashing.py)Provides deterministic SHA-256 and SHA-512 manifest exports alongside standard PDF payloads.
pythonfrom infrastructure.steganography.hashing import compute_file_hashes, write_hash_manifest hashes = compute_file_hashes(Path("file.pdf")) write_hash_manifest(Path("file.pdf"), hashes)
overlays.py)For applying visual steganographic traits like diagonally rendered strings across every page.
pythonfrom infrastructure.steganography.overlays import create_watermark_overlay overlay_bytes = create_watermark_overlay(page_width=612, page_height=792, text="CONFIDENTIAL", opacity=0.08)
kmyth_adapter.py)Optional TPM-backed sealing of hash manifests and steganography PDFs into .ski sidecar files using the Kmyth toolkit.
pythonfrom infrastructure.steganography.kmyth_adapter import ( KmythSealOptions, seal_file_with_kmyth, validate_kmyth_installation, ) # Validate that kmyth-seal/kmyth-unseal are available avail = validate_kmyth_installation(binary_dir="infrastructure/steganography/kmyth/bin") print(avail.summary()) # Seal a file (requires running TPM backend on macOS) ski_path = seal_file_with_kmyth( Path("output.pdf"), options=KmythSealOptions( binary_dir=Path("infrastructure/steganography/kmyth/bin"), tcti_config="mssim:host=127.0.0.1,port=2321", timeout_seconds=15, ), )
macOS has no hardware TPM. Use the bundled swtpm + proxy:
bash# Start TPM backend eval "$(uv run python infrastructure/steganography/start_tpm_backend.py start)" # Run pipeline with Kmyth sealing uv run python projects/templates/template_redacted_report/scripts/generate_dev_variants.py \ --kmyth-binary-dir infrastructure/steganography/kmyth/bin # Stop when done uv run python infrastructure/steganography/start_tpm_backend.py stop
See AGENTS.md for full TPM setup details.
> > Master Documentation: For comprehensive details regarding the framework structure, refer directly to the central docs hub: > > - 📚 Core: docs/README.md, docs/AGENTS.md, docs/documentation-index.md > - 🏛️ Architecture: docs/architecture/, docs/core/, docs/modules/ > - 🔒 Security & Provenance: docs/security/, docs/best-practices/ > - 🛠️ Usage & Ops: docs/usage/, docs/operational/, docs/development/, docs/guides/, docs/prompts/, docs/reference/
For detailed documentation on the entire system, refer to the central documentation hub:
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 14,730 | 7,536 | -49% | 1 | 1 | 0% | 3,471 | 2,930 | -16% | 0 | 0 | — |
case-02 | fail→pass | 12,712 | 5,990 | -53% | 1 | 1 | 0% | 2,609 | 2,653 | +2% | 0 | 0 | — |
case-03 | fail→pass | 11,485 | 4,646 | -60% | 1 | 1 | 0% | 2,052 | 2,296 | +12% | 0 | 0 | — |
case-04 | fail→pass | 9,334 | 2,398 | -74% | 1 | 1 | 0% | 1,900 | 1,787 | -6% | 0 | 0 | — |
case-05 | fail→pass | 8,892 | 2,532 | -72% | 1 | 1 | 0% | 1,635 | 1,803 | +10% | 0 | 0 | — |
case-06 | fail→pass | 5,141 | 1,980 | -61% | 1 | 1 | 0% | 837 | 1,502 | +79% | 0 | 0 | — |
case-07 | pass→pass | 7,836 | 1,647 | -79% | 1 | 1 | 0% | 1,393 | 1,585 | +14% | 0 | 0 | — |
case-08 | fail→pass | 6,416 | 2,300 | -64% | 1 | 1 | 0% | 1,199 | 1,751 | +46% | 0 | 0 | — |
case-09 | fail→pass | 8,895 | 3,846 | -57% | 1 | 1 | 0% | 1,575 | 2,122 | +35% | 0 | 0 | — |
case-10 | fail→pass | 9,765 | 2,204 | -77% | 1 | 1 | 0% | 1,961 | 1,718 | -12% | 0 | 0 | — |
case-11 | fail→pass | 6,813 | 2,016 | -70% | 1 | 1 | 0% | 1,334 | 1,569 | +18% | 0 | 0 | — |
case-12 | fail→pass | 14,462 | 1,693 | -88% | 1 | 1 | 0% | 1,273 | 1,583 | +24% | 0 | 0 | — |
case-13 | fail→pass | 5,880 | 1,660 | -72% | 1 | 1 | 0% | 1,019 | 1,608 | +58% | 0 | 0 | — |
case-14 | pass→pass | 9,353 | 1,664 | -82% | 1 | 1 | 0% | 1,545 | 1,531 | -1% | 0 | 0 | — |
case-15 | fail→fail | 4,887 | 2,722 | -44% | 1 | 1 | 0% | 793 | 1,450 | +83% | 0 | 0 | — |
case-16 | fail→pass | 23,014 | 1,724 | -93% | 1 | 1 | 0% | 349 | 1,601 | +359% | 0 | 0 | — |
case-17 | fail→pass | 3,325 | 2,264 | -32% | 1 | 1 | 0% | 618 | 1,669 | +170% | 0 | 0 | — |
case-18 | fail→pass | 7,267 | 2,106 | -71% | 1 | 1 | 0% | 1,407 | 1,617 | +15% | 0 | 0 | — |
case-19 | fail→pass | 12,546 | 1,604 | -87% | 1 | 1 | 0% | 2,079 | 1,520 | -27% | 0 | 0 | — |
case-20 | fail→pass | 7,137 | 1,883 | -74% | 1 | 1 | 0% | 1,303 | 1,592 | +22% | 0 | 0 | — |
case-21 | pass→pass | 12,360 | 6,795 | -45% | 1 | 1 | 0% | 1,936 | 2,399 | +24% | 0 | 0 | — |
case-22 | fail→pass | 12,633 | 9,187 | -27% | 1 | 1 | 0% | 2,582 | 3,193 | +24% | 0 | 0 | — |
case-23 | fail→fail | 18,282 | 20,798 | +14% | 1 | 1 | 0% | 3,461 | 4,614 | +33% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +74 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.