Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
ef60322
Add phase-1 proxy guardrails and strict egress enforcement
theoephraim Jun 6, 2026
23f68a6
Fix proxy guard typecheck and add bumpy changeset
theoephraim Jun 6, 2026
73ec833
feat(varlock): add proxy sessions and placeholder-safe proxy behavior
theoephraim Jun 8, 2026
afae696
feat(varlock): harden local proxy for agent runs
theoephraim Jun 10, 2026
641e62c
feat(varlock): proxy security invariants (verified-identity injection…
theoephraim Jun 12, 2026
ca943c6
feat(varlock): proxy per-call policy (path/method matching + block-de…
theoephraim Jun 12, 2026
d9c1fca
feat(varlock): proxy append-only audit log (Invariant #7)
theoephraim Jun 13, 2026
b8160a3
refactor(varlock): remove dead proxy config (pin/sign/transform)
theoephraim Jun 13, 2026
dd72af4
feat(varlock): proxy require-approval verdict (Invariant #8)
theoephraim Jun 13, 2026
153d01d
fix(varlock): allow @proxy in the schema header (detached rules)
theoephraim Jun 13, 2026
e6d9753
feat(varlock): proxy omits unhandled sensitive items by default
theoephraim Jun 13, 2026
bc24b0a
feat(varlock): warn (not just notice) when proxy omits unhandled sens…
theoephraim Jun 13, 2026
6c4c40e
feat(varlock): exclude _VARLOCK_* reserved keys from proxy omit policy
theoephraim Jun 13, 2026
f1572a6
feat(varlock): dual-form @proxy decorator (function or value), replac…
theoephraim Jun 13, 2026
ba72d24
feat(varlock): scoped proxy approvals (once/session/duration) with st…
theoephraim Jun 13, 2026
436871a
feat(varlock): proxy approval granularity (approvalEach) + max-durati…
theoephraim Jun 13, 2026
d4f4b4e
feat(varlock): proxy schema fingerprint covers full definition (value…
theoephraim Jun 14, 2026
3a4c1ba
feat(varlock): proxy run attaches to a running proxy (--session / aut…
theoephraim Jun 14, 2026
c88c930
feat(varlock): session-as-record reorg — co-locate per-session files,…
theoephraim Jun 14, 2026
fbcf20a
docs(varlock): document the credential proxy (guide + decorator & CLI…
theoephraim Jun 16, 2026
43615bc
feat(varlock): @proxy uses array literals for domain/method lists and…
theoephraim Jun 16, 2026
c2e0f3b
fix(varlock): proxy fingerprint treats domain=a and domain=[a] as ide…
theoephraim Jun 16, 2026
dda3c7e
feat(varlock): proxy refresh hot-reloads a running daemon (live polic…
theoephraim Jun 17, 2026
a0427d0
feat(varlock): blocking proxy refresh via file reload channel (replac…
theoephraim Jun 17, 2026
1b788a9
harden proxy secret isolation + fail-closed config, dedup handlers
theoephraim Jun 18, 2026
930c714
refactor(proxy): group approval options into an approval={...} object
theoephraim Jun 18, 2026
6ddcec3
refactor(proxy): nest approval granularity in the runtime ProxyRule type
theoephraim Jun 19, 2026
91b86f4
feat(proxy): live request/response log in `proxy start`
theoephraim Jun 19, 2026
4cd2a47
fix(proxy): keep the live log from corrupting the approval prompt
theoephraim Jun 19, 2026
15bc0c7
feat(proxy): color the proxy-start request log
theoephraim Jun 20, 2026
9cc1acd
feat(proxy): add `proxy rules` summary, document limitations
theoephraim Jun 20, 2026
c5ad3c0
fix(proxy): close secret-leak blockers, gate reload, post-review hard…
theoephraim Jun 26, 2026
45ba0a4
docs(proxy): remove approval from docs, fix headline example, sharpen…
theoephraim Jun 26, 2026
0cc8439
ci: run the proxy verified-TLS invariant check under Bun
theoephraim Jun 26, 2026
b65973f
docs(proxy): drop em dashes; add a no-em-dash convention to AGENTS.md
theoephraim Jun 26, 2026
0c18861
feat(proxy): group policies under one domain via @proxy(domain=x, rul…
theoephraim Jun 26, 2026
b93bc55
docs(proxy): drop em dashes from proxy CLI output and messages
theoephraim Jun 26, 2026
2028d54
docs(agents): clarify a plain hyphen is fine; only em/en dashes are b…
theoephraim Jun 26, 2026
1aae5e7
docs(proxy): explain the session model and how commands target a session
theoephraim Jun 26, 2026
8c440c8
docs(proxy): name the credential-broker pattern and link references
theoephraim Jun 26, 2026
c0ba87f
docs(proxy): show @sensitive explicitly in the examples
theoephraim Jun 26, 2026
f831e5d
feat(proxy): varlock explain shows when @proxy forces a key sensitive
theoephraim Jun 26, 2026
974a607
docs(proxy): add a flow diagram near the top of the guide
theoephraim Jun 26, 2026
9325f51
docs(website): add a credential proxy section to the homepage
theoephraim Jun 26, 2026
30d340a
docs(website): make the homepage credential-proxy section a large hig…
theoephraim Jun 26, 2026
6c4a335
docs(website): homepage proxy section uses "credential broker", no bo…
theoephraim Jun 29, 2026
efef840
docs(proxy): note a sandbox makes the proxy a real boundary
theoephraim Jun 29, 2026
dd5131a
docs(proxy): @enableProxy is optional egress config, not required
theoephraim Jun 30, 2026
d382db9
refactor(proxy): rename @enableProxy to @proxyConfig (object-value form)
theoephraim Jun 30, 2026
15809d9
fix(proxy): unbiased session short-id via crypto.randomInt
theoephraim Jun 30, 2026
5da1fc7
fix(proxy): auto-detect TTY for proxy run stdio so interactive tools …
theoephraim Jul 2, 2026
39a5c2e
refactor(cli): share stdout-redaction logic between run and proxy run
theoephraim Jul 2, 2026
78c3fbd
docs(proxy): note to use ANTHROPIC_API_KEY for Claude Code, not an OA…
theoephraim Jul 3, 2026
3186f23
feat(proxy): configurable reload posture + refuse agent-triggered rel…
theoephraim Jul 3, 2026
6532abe
feat(proxy): proxy start interactivity: keypress reload, schema drift…
theoephraim Jul 3, 2026
c8e8a5f
chore(proxy): finish refresh to reload wording in guard messages and …
theoephraim Jul 3, 2026
3e61c4c
fix(proxy): attribute block responses to varlock and name the blocked…
theoephraim Jul 3, 2026
d771946
feat(proxy): attaching proxy run adopts the session's env via a varlo…
theoephraim Jul 3, 2026
762466b
refactor(blob): flatten override provenance to a plain overrideKeys f…
theoephraim Jul 4, 2026
bdfee80
feat(proxy): harden the varlock.internal control endpoint
theoephraim Jul 4, 2026
e829e16
fix(run): honor @encryptInjectedEnv when spawning with blob-only inje…
theoephraim Jul 4, 2026
24db425
docs(proxy): close doc-vs-code drift found by audit
theoephraim Jul 4, 2026
605110a
chore: consolidate proxy changesets into one; drop stale phase-1 notes
theoephraim Jul 4, 2026
5d3400c
refactor(proxy): dedup and dead-code cleanup from simplification pass
theoephraim Jul 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .bumpy/encrypt-injected-blob-on-spawn.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
varlock: patch
---

`@encryptInjectedEnv` is now honored when `varlock run` / `varlock proxy run` inject the env blob.

Previously the setting only applied to the library auto-load path and build-time integrations; the CLI spawn paths injected a plaintext `__VARLOCK_ENV` blob and merely forwarded a pre-existing key. In blob-only inject mode (`--inject blob`), the blob is now encrypted with an ephemeral key carried alongside it, so resolved values never sit in plaintext in the child's environment. This is leak resistance (crash reporters, env dumps, logs), not protection from an attacker who can read the full environment.
7 changes: 7 additions & 0 deletions .bumpy/proxy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
varlock: patch
---

Add `varlock proxy`: a local credential proxy for AI agents (preview).

Run an agent (or any untrusted tool) through a local MITM proxy so it only ever sees placeholder secrets: real values are injected at the wire (bound to a verified upstream TLS identity), responses are scrubbed back to placeholders, and every request is policy-checked and audited. Mark a secret with `@proxy(domain="api.example.com")`; sensitive items are shown to the child as placeholders by default, with `@proxy=passthrough` / `@proxy=omit` escape hatches. Route with host/path/method rules (`block`, `approval`), set egress with `@proxyConfig={egress="strict"}`, and hot-reload live policy with `varlock proxy reload`. Sessions are durable and auditable (`varlock proxy status` / `rules` / `audit`); `proxy start` runs a daemon with a live request log that other `proxy run` invocations attach to. Preview: same-uid, not a sandbox. See the [proxy guide](https://varlock.dev/guides/proxy/).
5 changes: 5 additions & 0 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,11 @@ jobs:
run: bun run build:libs
- name: Run tests
run: bun run test:ci
# The vitest suite runs under Node; this check runs the proxy's verified-TLS
# injection (Invariant #1) under Bun, the runtime the compiled binary uses —
# Node cannot catch the Bun-specific pre-write leak it guards against.
- name: Proxy verified-TLS injection (Bun)
run: bun run --filter varlock test:proxy:bun

# Determine which packages will be preview-released (used to gate native builds)
- name: Check release packages
Expand Down
6 changes: 5 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,5 +62,9 @@ This is a monorepo managed with bun workspaces and Turborepo:
## Linting

- Run **`bun run lint:fix`** from the repo root after completing a significant chunk of work (new feature, refactor, bug fix, etc.)
- The linter uses ESLint with `@stylistic` and other plugins auto-fix handles most formatting issues
- The linter uses ESLint with `@stylistic` and other plugins; auto-fix handles most formatting issues
- Do not leave lint errors unresolved; fix any that `--fix` cannot handle automatically

## Writing style

- **Do not use em dashes (`—`) or en dashes (`–`)** in any prose you write: docs, code comments, commit messages, PR descriptions, changeset entries, or design notes. They read as an AI-writing tell. Rewrite with a colon, comma, semicolon, parentheses, two sentences, or a plain hyphen (`-`) where that reads naturally. Only the em/en dash characters are banned; a regular hyphen is fine.
38 changes: 38 additions & 0 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ Varlock does not auto-load a global schema (that would make two developers' mach
<TabItem label="Claude">
[Claude Code](https://docs.claude.com/en/docs/claude-code/overview) is Anthropic's CLI tool for AI-assisted coding.

**Environment variable:** `ANTHROPIC_API_KEY` see [supported env variables](https://docs.claude.com/en/docs/claude-code/settings#environment-variables).
**Environment variable:** `ANTHROPIC_API_KEY` (see [supported env variables](https://docs.claude.com/en/docs/claude-code/settings#environment-variables)). Use the API key, not `CLAUDE_CODE_OAUTH_TOKEN`: that (from `claude setup-token`) only works for headless `claude -p` requests, not the interactive TUI.

**In a project** — add to `.env.schema`:

Expand Down
Loading
Loading