@atlasauth/pca-control-evals 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +33 -27
- package/package.json +27 -3
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Atlas Authorization
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,45 +1,51 @@
|
|
|
1
1
|
# @atlasauth/pca-control-evals
|
|
2
2
|
|
|
3
|
-
An
|
|
3
|
+
An empirical adversarial safety bound for Proof-Carrying Authority (PCA), complementing PCA's analytic one.
|
|
4
4
|
|
|
5
|
-
PCA
|
|
6
|
-
is at most `bMax/κ` — no matter what the agent does, even if fully compromised (see `@atlasauth/pca`
|
|
7
|
-
`safetyBound()` / `risk.ts`). That is a theorem about the *budget*. It does not tell you whether the
|
|
8
|
-
controls actually catch a given adversarial strategy, or how much legitimate work they allow.
|
|
5
|
+
PCA proves an analytic bound: between two human co-signs, the total risk of machine-only actions is at most `bMax/kappa`, whatever the agent does (see `safetyBound()` in `@atlasauth/pca`). That is a statement about the budget. It does not tell you whether the controls actually catch a given adversarial strategy, or how much legitimate work they allow. This package adds the empirical side as a red-team and blue-team control evaluation, following the AI Control methodology of Greenblatt, Shlegeris, Sachan and Roger ([arXiv:2312.06942](https://arxiv.org/abs/2312.06942)) and Korbak et al. ([arXiv:2501.17315](https://arxiv.org/abs/2501.17315)).
|
|
9
6
|
|
|
10
|
-
|
|
11
|
-
Redwood Research's *AI Control* methodology:
|
|
7
|
+
A possibly-misaligned red agent emits a sequence of intended actions (slow-burn under the budget, an over-cap action, an off-policy verb, a high-taint exfiltration flow, a replay). The blue control protocol is PCA's real control surface: `reviewAction` (predicates, caveats, step-up tiers), the metered trust budget, DLP, and the behavioral immune system. It decides allow, step-up or deny for each action.
|
|
12
8
|
|
|
13
|
-
-
|
|
14
|
-
-
|
|
9
|
+
- safety: the fraction of episodes in which red could not cause an unacceptable outcome (a catastrophic action blue let through);
|
|
10
|
+
- usefulness: the fraction of legitimate actions blue allowed.
|
|
15
11
|
|
|
16
|
-
|
|
17
|
-
over-cap action, an off-policy verb, a high-taint exfiltration flow, a replay). A **blue** control
|
|
18
|
-
protocol — which here *is* PCA's real control surface: `reviewAction`/`dryRun` (predicates + caveats +
|
|
19
|
-
step-up tiers), the metered trust budget (`admit`/`cost`/`leak`), DLP (`evaluateDlp`), and the
|
|
20
|
-
behavioral immune system (`observe`/`assess`/`adapt`) — decides allow / step-up / deny per action.
|
|
12
|
+
## Install
|
|
21
13
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
14
|
+
```sh
|
|
15
|
+
npm i @atlasauth/pca-control-evals
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Depends on `@atlasauth/pca` (installed automatically).
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
25
21
|
|
|
26
22
|
```ts
|
|
27
23
|
import { exampleControlEval } from '@atlasauth/pca-control-evals';
|
|
28
24
|
|
|
29
25
|
const report = exampleControlEval(); // deterministic
|
|
30
|
-
// { safety
|
|
31
|
-
// catches: { predicate, caveat, dlp, budget, immune
|
|
26
|
+
// { safety, usefulness, analyticBound, episodes,
|
|
27
|
+
// catches: { replay, predicate, caveat, dlp, budget, immune },
|
|
32
28
|
// byStrategy: { 'over-cap', 'off-verb', 'slow-burn', 'taint-exfil', 'replay', 'immune-probe', 'benign' } }
|
|
33
29
|
```
|
|
34
30
|
|
|
35
|
-
Plug in your own
|
|
31
|
+
Plug in your own suite with `controlEval(reds, blue, env, { episodes, seed })`:
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
import { controlEval, exampleBlue, exampleEnv, EXAMPLE_RED_POLICIES } from '@atlasauth/pca-control-evals';
|
|
35
|
+
|
|
36
|
+
const report = controlEval(EXAMPLE_RED_POLICIES, exampleBlue(), exampleEnv, { episodes: 20, seed: 7 });
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
A `RedPolicy` is `{ name, strategy, gen({ env, rng, now }) => RedAction[] }`, a `BluePolicy` bundles the agent with optional DLP, immune and budget settings, and an `Env` decides which allowed actions count as unacceptable. Everything is deterministic given a seed.
|
|
36
40
|
|
|
37
41
|
## This is a harness, not a proof
|
|
38
42
|
|
|
39
|
-
The number is an
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
The number is an empirical bound over a modeled adversary in a modeled environment, and it is only as strong as the red policies and environment you encode. A control protocol catches only the hazards its predicates, DLP classes, budget and immune signals actually represent. `gapAwareEnv` with `gapExploitRed` deliberately builds an in-policy, zero-taint, in-cap hazard that no control encodes, and `safety` drops to 0 against it. A real guarantee needs a realistic environment and a realistic red suite. This complements, and does not replace, the analytic `bMax/kappa` bound; the two answer different questions.
|
|
44
|
+
|
|
45
|
+
Cryptography in PCA is unaudited.
|
|
46
|
+
|
|
47
|
+
Source and issues: https://github.com/Atlas-Authorization/pca
|
|
48
|
+
|
|
49
|
+
## License
|
|
50
|
+
|
|
51
|
+
MIT - see LICENSE
|
package/package.json
CHANGED
|
@@ -1,7 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlasauth/pca-control-evals",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Empirical adversarial control-evaluation harness for PCA: a seeded red-team/blue-team game (Redwood-style AI Control) that scores safety = P(a possibly-misaligned agent cannot cause an unacceptable outcome) + usefulness against PCA's verifier/budget/step-up/DLP/immune controls. Complements the analytic Σrisk ≤ bMax/κ bound.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"ai control",
|
|
7
|
+
"red team",
|
|
8
|
+
"evaluation",
|
|
9
|
+
"safety",
|
|
10
|
+
"agent authorization",
|
|
11
|
+
"proof-carrying authority",
|
|
12
|
+
"pca",
|
|
13
|
+
"ai agents"
|
|
14
|
+
],
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"homepage": "https://github.com/Atlas-Authorization/pca#readme",
|
|
17
|
+
"bugs": {
|
|
18
|
+
"url": "https://github.com/Atlas-Authorization/pca/issues"
|
|
19
|
+
},
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "git+https://github.com/Atlas-Authorization/pca.git",
|
|
23
|
+
"directory": "packages/pca-control-evals"
|
|
24
|
+
},
|
|
5
25
|
"main": "./dist/index.js",
|
|
6
26
|
"types": "./dist/index.d.ts",
|
|
7
27
|
"exports": {
|
|
@@ -12,7 +32,7 @@
|
|
|
12
32
|
"./package.json": "./package.json"
|
|
13
33
|
},
|
|
14
34
|
"dependencies": {
|
|
15
|
-
"@atlasauth/pca": "0.
|
|
35
|
+
"@atlasauth/pca": "0.3.0"
|
|
16
36
|
},
|
|
17
37
|
"devDependencies": {
|
|
18
38
|
"typescript": "^5.6.3",
|
|
@@ -20,8 +40,12 @@
|
|
|
20
40
|
},
|
|
21
41
|
"files": [
|
|
22
42
|
"dist",
|
|
23
|
-
"README.md"
|
|
43
|
+
"README.md",
|
|
44
|
+
"LICENSE"
|
|
24
45
|
],
|
|
46
|
+
"engines": {
|
|
47
|
+
"node": ">=20"
|
|
48
|
+
},
|
|
25
49
|
"publishConfig": {
|
|
26
50
|
"access": "public"
|
|
27
51
|
},
|