@rafter-security/cli 0.7.0 → 0.7.1
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/README.md +20 -1
- package/dist/commands/agent/audit-skill.js +2 -1
- package/dist/commands/agent/audit.js +27 -0
- package/dist/commands/agent/components.js +800 -0
- package/dist/commands/agent/disable.js +47 -0
- package/dist/commands/agent/enable.js +50 -0
- package/dist/commands/agent/index.js +6 -0
- package/dist/commands/agent/init.js +162 -164
- package/dist/commands/agent/list.js +72 -0
- package/dist/commands/brief.js +20 -0
- package/dist/commands/docs/index.js +18 -0
- package/dist/commands/docs/list.js +37 -0
- package/dist/commands/docs/show.js +64 -0
- package/dist/commands/mcp/server.js +84 -0
- package/dist/commands/skill/index.js +14 -0
- package/dist/commands/skill/install.js +89 -0
- package/dist/commands/skill/list.js +79 -0
- package/dist/commands/skill/registry.js +273 -0
- package/dist/commands/skill/remote.js +333 -0
- package/dist/commands/skill/review.js +975 -0
- package/dist/commands/skill/uninstall.js +65 -0
- package/dist/core/audit-logger.js +262 -21
- package/dist/core/config-manager.js +3 -0
- package/dist/core/docs-loader.js +148 -0
- package/dist/core/policy-loader.js +72 -1
- package/dist/index.js +6 -0
- package/package.json +1 -1
- package/resources/skills/rafter/SKILL.md +76 -96
- package/resources/skills/rafter/docs/backend.md +106 -0
- package/resources/skills/rafter/docs/cli-reference.md +199 -0
- package/resources/skills/rafter/docs/finding-triage.md +79 -0
- package/resources/skills/rafter/docs/guardrails.md +91 -0
- package/resources/skills/rafter/docs/shift-left.md +64 -0
- package/resources/skills/rafter-code-review/SKILL.md +91 -0
- package/resources/skills/rafter-code-review/docs/api.md +90 -0
- package/resources/skills/rafter-code-review/docs/asvs.md +120 -0
- package/resources/skills/rafter-code-review/docs/cwe-top25.md +78 -0
- package/resources/skills/rafter-code-review/docs/investigation-playbook.md +101 -0
- package/resources/skills/rafter-code-review/docs/llm.md +87 -0
- package/resources/skills/rafter-code-review/docs/web-app.md +84 -0
- package/resources/skills/rafter-secure-design/SKILL.md +103 -0
- package/resources/skills/rafter-secure-design/docs/api-design.md +97 -0
- package/resources/skills/rafter-secure-design/docs/auth.md +67 -0
- package/resources/skills/rafter-secure-design/docs/data-storage.md +90 -0
- package/resources/skills/rafter-secure-design/docs/dependencies.md +101 -0
- package/resources/skills/rafter-secure-design/docs/deployment.md +104 -0
- package/resources/skills/rafter-secure-design/docs/ingestion.md +98 -0
- package/resources/skills/rafter-secure-design/docs/standards-pointers.md +102 -0
- package/resources/skills/rafter-secure-design/docs/threat-modeling.md +128 -0
- package/resources/skills/rafter-skill-review/SKILL.md +106 -0
- package/resources/skills/rafter-skill-review/docs/authorship-provenance.md +82 -0
- package/resources/skills/rafter-skill-review/docs/changelog-review.md +99 -0
- package/resources/skills/rafter-skill-review/docs/data-practices.md +88 -0
- package/resources/skills/rafter-skill-review/docs/malware-indicators.md +79 -0
- package/resources/skills/rafter-skill-review/docs/prompt-injection.md +85 -0
- package/resources/skills/rafter-skill-review/docs/telemetry.md +78 -0
package/README.md
CHANGED
|
@@ -59,20 +59,39 @@ rafter usage
|
|
|
59
59
|
```bash
|
|
60
60
|
# Initialize local security
|
|
61
61
|
rafter agent init
|
|
62
|
+
rafter agent init --local # write config to ./.rafter (ephemeral/benchmark)
|
|
63
|
+
|
|
64
|
+
# Granular per-component control
|
|
65
|
+
rafter agent list
|
|
66
|
+
rafter agent enable claude-code
|
|
67
|
+
rafter agent disable gemini
|
|
62
68
|
|
|
63
69
|
# Scan files for secrets
|
|
64
70
|
rafter agent scan .
|
|
71
|
+
rafter agent scan --history # full git history (gitleaks engine)
|
|
65
72
|
|
|
66
73
|
# Execute commands safely
|
|
67
74
|
rafter agent exec "git commit -m 'Add feature'"
|
|
68
75
|
|
|
69
|
-
# View audit logs
|
|
76
|
+
# View audit logs (tamper-evident hash chain)
|
|
70
77
|
rafter agent audit
|
|
78
|
+
rafter agent audit --verify # verify chain; exit 1 if tampered
|
|
71
79
|
|
|
72
80
|
# Manage configuration
|
|
73
81
|
rafter agent config show
|
|
74
82
|
```
|
|
75
83
|
|
|
84
|
+
### Skills
|
|
85
|
+
|
|
86
|
+
Four first-party skills ship with the CLI: `rafter` (CYOA router), `rafter-code-review`, `rafter-secure-design`, `rafter-skill-review`.
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
rafter skill list # installed + available
|
|
90
|
+
rafter skill install --all # install all four
|
|
91
|
+
rafter skill review github:owner/repo # audit a third-party skill before install
|
|
92
|
+
rafter skill review --installed # audit every skill already on disk
|
|
93
|
+
```
|
|
94
|
+
|
|
76
95
|
## Global Options
|
|
77
96
|
|
|
78
97
|
| Flag | Description |
|
|
@@ -7,11 +7,12 @@ import { SkillManager } from "../../utils/skill-manager.js";
|
|
|
7
7
|
import { fmt } from "../../utils/formatter.js";
|
|
8
8
|
export function createAuditSkillCommand() {
|
|
9
9
|
return new Command("audit-skill")
|
|
10
|
-
.description("Security audit of a Claude Code skill file")
|
|
10
|
+
.description("[deprecated] Security audit of a Claude Code skill file — use `rafter skill review` instead")
|
|
11
11
|
.argument("<skill-path>", "Path to skill file to audit")
|
|
12
12
|
.option("--skip-openclaw", "Skip OpenClaw integration, show manual review prompt")
|
|
13
13
|
.option("--json", "Output results as JSON")
|
|
14
14
|
.action(async (skillPath, opts) => {
|
|
15
|
+
process.stderr.write("[deprecated] `rafter agent audit-skill` is deprecated; use `rafter skill review <path-or-url>` instead.\n");
|
|
15
16
|
await auditSkill(skillPath, opts);
|
|
16
17
|
});
|
|
17
18
|
}
|
|
@@ -13,13 +13,28 @@ export function createAuditCommand() {
|
|
|
13
13
|
.option("--event <type>", "Filter by event type")
|
|
14
14
|
.option("--agent <type>", "Filter by agent type (openclaw, claude-code)")
|
|
15
15
|
.option("--since <date>", "Show entries since date (YYYY-MM-DD)")
|
|
16
|
+
.option("--repo <pattern>", "Filter by git repo path (substring match)")
|
|
17
|
+
.option("--cwd <pattern>", "Filter by working directory (substring match)")
|
|
16
18
|
.option("--share", "Generate a redacted excerpt for issue reports")
|
|
19
|
+
.option("--verify", "Verify the audit log hash chain and report tampering")
|
|
17
20
|
.action((opts) => {
|
|
18
21
|
if (opts.share) {
|
|
19
22
|
generateShareExcerpt();
|
|
20
23
|
return;
|
|
21
24
|
}
|
|
22
25
|
const logger = new AuditLogger();
|
|
26
|
+
if (opts.verify) {
|
|
27
|
+
const breaks = logger.verify();
|
|
28
|
+
if (breaks.length === 0) {
|
|
29
|
+
console.log("✓ Audit log hash chain intact");
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
console.error(`✗ Audit log hash chain broken (${breaks.length} break${breaks.length === 1 ? "" : "s"}):`);
|
|
33
|
+
for (const b of breaks) {
|
|
34
|
+
console.error(` line ${b.line}: ${b.reason}`);
|
|
35
|
+
}
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
23
38
|
const filter = {
|
|
24
39
|
limit: parseInt(opts.last, 10)
|
|
25
40
|
};
|
|
@@ -32,6 +47,12 @@ export function createAuditCommand() {
|
|
|
32
47
|
if (opts.since) {
|
|
33
48
|
filter.since = new Date(opts.since);
|
|
34
49
|
}
|
|
50
|
+
if (opts.repo) {
|
|
51
|
+
filter.gitRepo = opts.repo;
|
|
52
|
+
}
|
|
53
|
+
if (opts.cwd) {
|
|
54
|
+
filter.cwd = opts.cwd;
|
|
55
|
+
}
|
|
35
56
|
const entries = logger.read(filter);
|
|
36
57
|
if (entries.length === 0) {
|
|
37
58
|
console.log("No audit log entries found");
|
|
@@ -46,6 +67,12 @@ export function createAuditCommand() {
|
|
|
46
67
|
if (entry.agentType) {
|
|
47
68
|
console.log(` Agent: ${entry.agentType}`);
|
|
48
69
|
}
|
|
70
|
+
if (entry.gitRepo) {
|
|
71
|
+
console.log(` Repo: ${entry.gitRepo}`);
|
|
72
|
+
}
|
|
73
|
+
else if (entry.cwd) {
|
|
74
|
+
console.log(` Cwd: ${entry.cwd}`);
|
|
75
|
+
}
|
|
49
76
|
if (entry.action?.command) {
|
|
50
77
|
console.log(` Command: ${entry.action.command}`);
|
|
51
78
|
}
|