veil

Verified private changes for coding agents

Seal agent changes
before they reach Git.

Give a coding agent a workspace without Git history or publication credentials. Veil seals the result, checks the exact snapshot—including with private gates—and publishes only after your approval.

A normal clone is already private. Veil is for controlled agent work.

veil / reviewed resultlocal
settings.ts×
const change = private;
await veil.check();
edited locally
current resultencrypted
tests
private gates
verified: 4 / 4
draft PRready

CheckReview the current result and its verified, failed, unchecked, or unavailable status.

The honest difference

Why not just use a local clone?

For ordinary manual work, you should. A clone already keeps unpushed changes private. Veil adds controls for delegated agent work and deliberate release.

LOCAL CLONEPrivate by default

Your filesystem. Your judgment.

  • Unpushed changes stay local
  • Full Git history and credentials available
  • You manually decide what was tested and pushed
VEIL WORKSPACEControlled by design

Your agent. A narrower boundary.

  • Agent workspace contains no .git
  • Configured recipes are rebuilt and checked offline
  • Results without a recipe are labeled unchecked
Repository + objectiveAgent workspace no .git · no GitHub credentialsVerification status recipe-driven · honest when uncheckedYou approve patch or draft PR

The practical use case

Use Veil when an agent is doing work you still own.

The value is not hiding a folder on your laptop. It is putting a reviewable boundary between an agent and your repository history.

AGENT ACCESS

Proprietary repository, bounded workspace.

The agent receives the code it needs, but no .git directory or GitHub publication credentials.

PRIVATE CHECKS

Test with rules that never ship.

Run private acceptance or security gates independently without adding those gate sources to the published patch.

PROVABLE RELEASE

Publish what actually passed.

Bind the approved patch to its base commit, verification receipt, and hash before creating a patch or draft PR.

A concrete proof chain

Follow one signed result all the way out.

This illustrative receipt uses shortened identifiers, but the relationships are the real ones Veil checks: immutable base, captured result, pinned recipe, authenticated event, and exact published patch.

Read how evidence is checked
CHANGE EVENTevent_01JVEIL7
integrity verified
  1. 01 / BASE
    Repository pinnedcommit 7f3a1c2
  2. 02 / RESULT
    Agent output capturedsnapshot snap_c84e…91a2
  3. 03 / CHECK
    Recipe passed offlinerecipe d2e7…f02d · gates 4/4
  4. 04 / RELEASE
    Approved patch matchedsha256 b48d…77e0 · draft PR #184
EVENT AUTHENTICATORhmac-sha256:9d63…05af

The local context key authenticates the ChangeEvent. Publication rebuilds the patch from the reviewed snapshot and refuses a different hash.

A deliberate lifecycle

Make the diff
the moment of truth.

Veil seals the current result, removes the disposable view, and verifies the exact diff you can publish.

See the security model
workspaceresultverify
− readFile(join(root, name))+ assertContained(root, path)✓ reconstruction passed