@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.
Files changed (56) hide show
  1. package/README.md +20 -1
  2. package/dist/commands/agent/audit-skill.js +2 -1
  3. package/dist/commands/agent/audit.js +27 -0
  4. package/dist/commands/agent/components.js +800 -0
  5. package/dist/commands/agent/disable.js +47 -0
  6. package/dist/commands/agent/enable.js +50 -0
  7. package/dist/commands/agent/index.js +6 -0
  8. package/dist/commands/agent/init.js +162 -164
  9. package/dist/commands/agent/list.js +72 -0
  10. package/dist/commands/brief.js +20 -0
  11. package/dist/commands/docs/index.js +18 -0
  12. package/dist/commands/docs/list.js +37 -0
  13. package/dist/commands/docs/show.js +64 -0
  14. package/dist/commands/mcp/server.js +84 -0
  15. package/dist/commands/skill/index.js +14 -0
  16. package/dist/commands/skill/install.js +89 -0
  17. package/dist/commands/skill/list.js +79 -0
  18. package/dist/commands/skill/registry.js +273 -0
  19. package/dist/commands/skill/remote.js +333 -0
  20. package/dist/commands/skill/review.js +975 -0
  21. package/dist/commands/skill/uninstall.js +65 -0
  22. package/dist/core/audit-logger.js +262 -21
  23. package/dist/core/config-manager.js +3 -0
  24. package/dist/core/docs-loader.js +148 -0
  25. package/dist/core/policy-loader.js +72 -1
  26. package/dist/index.js +6 -0
  27. package/package.json +1 -1
  28. package/resources/skills/rafter/SKILL.md +76 -96
  29. package/resources/skills/rafter/docs/backend.md +106 -0
  30. package/resources/skills/rafter/docs/cli-reference.md +199 -0
  31. package/resources/skills/rafter/docs/finding-triage.md +79 -0
  32. package/resources/skills/rafter/docs/guardrails.md +91 -0
  33. package/resources/skills/rafter/docs/shift-left.md +64 -0
  34. package/resources/skills/rafter-code-review/SKILL.md +91 -0
  35. package/resources/skills/rafter-code-review/docs/api.md +90 -0
  36. package/resources/skills/rafter-code-review/docs/asvs.md +120 -0
  37. package/resources/skills/rafter-code-review/docs/cwe-top25.md +78 -0
  38. package/resources/skills/rafter-code-review/docs/investigation-playbook.md +101 -0
  39. package/resources/skills/rafter-code-review/docs/llm.md +87 -0
  40. package/resources/skills/rafter-code-review/docs/web-app.md +84 -0
  41. package/resources/skills/rafter-secure-design/SKILL.md +103 -0
  42. package/resources/skills/rafter-secure-design/docs/api-design.md +97 -0
  43. package/resources/skills/rafter-secure-design/docs/auth.md +67 -0
  44. package/resources/skills/rafter-secure-design/docs/data-storage.md +90 -0
  45. package/resources/skills/rafter-secure-design/docs/dependencies.md +101 -0
  46. package/resources/skills/rafter-secure-design/docs/deployment.md +104 -0
  47. package/resources/skills/rafter-secure-design/docs/ingestion.md +98 -0
  48. package/resources/skills/rafter-secure-design/docs/standards-pointers.md +102 -0
  49. package/resources/skills/rafter-secure-design/docs/threat-modeling.md +128 -0
  50. package/resources/skills/rafter-skill-review/SKILL.md +106 -0
  51. package/resources/skills/rafter-skill-review/docs/authorship-provenance.md +82 -0
  52. package/resources/skills/rafter-skill-review/docs/changelog-review.md +99 -0
  53. package/resources/skills/rafter-skill-review/docs/data-practices.md +88 -0
  54. package/resources/skills/rafter-skill-review/docs/malware-indicators.md +79 -0
  55. package/resources/skills/rafter-skill-review/docs/prompt-injection.md +85 -0
  56. 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
  }