pentesting 0.100.14 → 0.101.2

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 (3) hide show
  1. package/ARCHITECTURE.md +92 -37
  2. package/README.md +102 -79
  3. package/package.json +4 -5
package/ARCHITECTURE.md CHANGED
@@ -130,19 +130,35 @@ request hot path. Explicit event metadata is routed deterministically; absent
130
130
  metadata receives one general strategy. Named profiles may add context, but
131
131
  coarse labels do not authorize or reject tool calls.
132
132
 
133
- CTF engagement metadata may select `ctf-competition` prompt context, and
134
- `flag_check` remains a verification tool and evidence source rather than a
135
- default completion gate. `explore` is always available; `[exploration]` only
136
- sets node and fan-out caps. Installed users edit the relevant engagement, flag,
137
- and frontier fields through `/config`.
133
+ CTF engagement metadata may select `ctf-competition` prompt context, and
134
+ `flag_check` remains a verification tool and evidence source rather than a
135
+ default completion gate. `explore` is always available; `[exploration]` only
136
+ sets node and fan-out caps. Installed users edit the relevant engagement, flag,
137
+ and frontier fields through `/config`.
138
138
 
139
139
  The shipped exploration tool does not replace the core execution strategy.
140
140
  It provides a bounded `EvidenceKind::Lead` ledger and explicit dispatch. Stable
141
141
  generated identity is separate from semantic deduplication. Dead probes suppress
142
142
  an execution branch without rejecting its knowledge hypothesis, and fresh
143
- evidence reopens scheduling. There is no passive `/frontier` command, detached
144
- task registry, or second scheduler. `orch_spec::exploration_e2e` pins the off
145
- path and the explicit breadth/depth/pivot/reseed/merge behavior.
143
+ evidence reopens scheduling. An explicit `explore op=frontier` call reads one
144
+ canonical snapshot and returns a bounded attention brief: one visible focus, at
145
+ most two alternatives, at most two alerts, state counts, and an omitted count.
146
+ Focus is visibility, not a recommendation, authorization, or execution lock;
147
+ priority scores stay internal and the model must name leads in a separate
148
+ `dispatch` call. The model-facing payload stays within 4 KiB after JSON and HTML
149
+ escaping. On an explicit `/status`, the same pure projection is loaded once and
150
+ rendered as Battlefield Lite: at most eight logical rows and 1.5 KiB, containing
151
+ only typed counts/enums/numeric metadata and revalidated Lead IDs. It omits Lead
152
+ title, detail, parent/sample IDs, evidence references, tool output, and score;
153
+ that is a narrow Lead-prose disclosure boundary, not a general secret scanner
154
+ for the rest of the diagnostic output. There is no passive mission-control
155
+ injection, model-request hot-path repository read, `/frontier` command, detached
156
+ task registry, advisor, or second scheduler.
157
+ `orch_spec::exploration_e2e` pins the explicit frontier/pivot/dispatch/merge
158
+ behavior. A deterministic 256-Lead Phase 4 fixture measured the legacy rendered
159
+ frontier at 121,420 bytes and the bounded brief at 1,858 bytes (98.46% smaller),
160
+ while the existing completion-provenance corpus remained 9/9. This supports the
161
+ bounded visibility decision; it is not a claim of improved live-model solve rate.
146
162
 
147
163
  Reliability guards sit below the profile layer. Provider protocol capabilities
148
164
  default native tool support for OpenAI/Anthropic-compatible responses on
@@ -179,16 +195,16 @@ flowchart TD
179
195
  The core agent team is domain-neutral. Each agent ships as a markdown persona
180
196
  definition under `crates/builder_repo/src/agents/`.
181
197
 
182
- Subagents are explicit and bounded. A `task` call selects one agent; its tasks
183
- run concurrently up to four per call and delegation stops at depth two.
184
- Separate top-level tool calls are sequenced. Built-ins include `crypto`, `rev`,
185
- and `pwn`.
186
-
187
- `explore dispatch` is a separate path. It runs selected leads as `builder`
188
- clones with category overlays, defaults to breadth one, is hard-capped at four,
189
- and waits for the batch. It does not auto-route leads to specialist personas.
190
- Every child uses the same tool/policy gateway, budget, lineage, and evidence
191
- merge contracts.
198
+ Subagents are explicit and bounded. A `task` call selects one agent; its tasks
199
+ run concurrently up to four per call and delegation stops at depth two.
200
+ Separate top-level tool calls are sequenced. Built-ins include `crypto`, `rev`,
201
+ and `pwn`.
202
+
203
+ `explore dispatch` is a separate path. It runs selected leads as `builder`
204
+ clones with category overlays, defaults to breadth one, is hard-capped at four,
205
+ and waits for the batch. It does not auto-route leads to specialist personas.
206
+ Every child uses the same tool/policy gateway, budget, lineage, and evidence
207
+ merge contracts.
192
208
 
193
209
  | Agent | Default role | Runtime profile |
194
210
  | --- | --- | --- |
@@ -367,13 +383,52 @@ trusted verifier with explicit provenance is the only mission-promotion path;
367
383
 
368
384
  ## Diagnostic UI boundary
369
385
 
370
- The default TUI renders the response stream and deterministic input queue. It
371
- does not maintain a second workflow engine. `/status` consumes one immutable
386
+ The default TUI renders the response stream and deterministic input queue. It
387
+ does not maintain a second workflow engine. `/status` consumes one immutable
372
388
  `RunStatusProjection`; `/workflow report` is the explicit offline export. The
373
- former bare `/workflow` alias has been removed. The live status row deliberately
374
- shows only actionable progress/wait state; frontier JSON is not parsed into
375
- hidden chrome state, and full run/tool detail remains in explicit output and
376
- `/status`.
389
+ former bare `/workflow` alias has been removed. For an active run the projection
390
+ adds exactly one optional canonical Lead-ledger read and immediately reduces it
391
+ to `Option<AttentionBrief>`; raw nodes never cross the API boundary, an optional
392
+ read failure only renders `BATTLEFIELD [UNAVAILABLE]`, and no Lead produces no
393
+ battlefield rows. Core status read failures retain their existing error path.
394
+ With no recorded run, `/status` still shows goal, manual/auto mode, queue, and
395
+ usage without an evidence read. Recorded `TurnExit` and typed `MissionState` are
396
+ shown separately so model Stop or run completion cannot appear as verified
397
+ mission completion. The live status row deliberately remains limited to
398
+ actionable progress/wait state: there is no frontier parsing, background refresh,
399
+ write, dispatch shortcut, or hidden chrome state.
400
+
401
+ Completed type-ahead inputs carry an explicit active-turn behavior. Safe
402
+ inspection commands (`/info`, `/usage`, `/context`, `/memory`, `/status`,
403
+ `/help`, `/skill`, and `/tools`) are atomically extracted and
404
+ rendered without cancelling the response stream. State-changing and modal
405
+ commands, including `/log` and `/model`, remain in FIFO order until the next safe turn
406
+ boundary. `/new`, `/retry`, `/exit`, and explicit `/replace` retain interrupt
407
+ semantics and take priority over active-turn query extraction. The input buffer
408
+ rebuilds replay events after extraction so queued messages and the current draft
409
+ preserve their original order and cursor. Esc cancellation preserves submitted
410
+ queued input and starts its FIFO replay after stream cleanup; Ctrl+C remains the
411
+ explicit clear-buffer interrupt. A conversation reset consumes `/new` but retains
412
+ its FIFO tail for the new conversation. Modal prompts isolate that pre-existing
413
+ tail from widget input and expose it again only after modal ownership ends.
414
+ Commands that eventually open a modal keep the outer interrupt listener during
415
+ their asynchronous prefetch and persistence phases. Before the widget starts,
416
+ the terminal session requests a reader pause and waits for its acknowledgement;
417
+ the reader resumes after modal ownership ends. Type-ahead is therefore buffered
418
+ FIFO instead of racing or leaking into a later model, agent, or configuration
419
+ field. Service-layer approval, secret, selection, and follow-up prompts acquire
420
+ the same lifetime-bound modal handoff through the prompt-entry hook, and
421
+ concurrent service prompts are serialized so two widgets never read stdin at
422
+ once.
423
+
424
+ Typing `/` opens the complete registered command catalog. Search includes
425
+ canonical names and aliases; Up/Down changes the selection, and Enter inserts
426
+ the selected template into the editor for partial matches and commands that
427
+ require arguments. A later Enter submits that populated input; a fully typed
428
+ exact command that needs no expansion submits normally. Palette descriptions
429
+ expose `[now]`, `[queued]`, and `[interrupt]` so the queue behavior is visible
430
+ before submission. The selected entry is rendered as the first hint row so it
431
+ remains visible when the terminal can show only a constrained input viewport.
377
432
 
378
433
  ## Distribution — single source, two surfaces
379
434
 
@@ -422,14 +477,14 @@ Compilation is outside the application runtime boundary and is always executed
422
477
  through resource-capped Docker wrappers. Host Cargo is not an emergency
423
478
  fallback. `dbuild.sh` owns individual Cargo commands, `dverify.sh` owns
424
479
  sequential gate profiles, and `dbuild-image.sh` owns BuildKit. Each path shares
425
- storage admission, effective-limit inspection, a machine-wide lock, watchdogs,
426
- and structured failure reports. Automated CI/CD is disabled; maintainers invoke
427
- these wrappers explicitly. The
428
- normative contract is [Docker-only build safety](https://github.com/agnusdei1207/pentesting/blob/main/docs/BUILD_SAFETY.md).
429
-
430
- Patch publication performs one Cross build. The version-checked, checksummed
431
- AMD64 musl artifact is uploaded to GitHub and packaged into Docker from a
432
- minimal context; its dependency cache stays in a versioned Docker volume.
480
+ storage admission, effective-limit inspection, a machine-wide lock, watchdogs,
481
+ and structured failure reports. Automated CI/CD is disabled; maintainers invoke
482
+ these wrappers explicitly. The
483
+ normative contract is [Docker-only build safety](https://github.com/agnusdei1207/pentesting/blob/main/docs/BUILD_SAFETY.md).
484
+
485
+ Patch publication performs one Cross build. The version-checked, checksummed
486
+ AMD64 musl artifact is uploaded to GitHub and packaged into Docker from a
487
+ minimal context; its dependency cache stays in a versioned Docker volume.
433
488
 
434
489
  The measured next-stage simplification and deletion plan is indexed at
435
490
  [Minimal Core plan](https://github.com/agnusdei1207/pentesting/blob/main/docs/plans/2026/07/10/minimal-core/README.md).
@@ -443,9 +498,9 @@ overridden by project-local `.pentesting.toml` files discovered by walking up
443
498
  from the working directory. Local storage is the default; normal setup only
444
499
  needs the public model endpoint environment.
445
500
 
446
- The full file shape is represented in `builder.schema.json`; common runtime and
447
- CTF fields are editable through `/config`. Set `PENTESTING_CONFIG` to override
448
- the global config directory.
501
+ The full file shape is represented in `builder.schema.json`; common runtime and
502
+ CTF fields are editable through `/config`. Set `PENTESTING_CONFIG` to override
503
+ the global config directory.
449
504
 
450
505
  | Variable | Description |
451
506
  | --- | --- |
@@ -474,7 +529,7 @@ Inside an interactive session, these commands inspect and drive runtime state
474
529
  (`/help` lists the full set):
475
530
 
476
531
  ```text
477
- /status Show the current run phase, active tasks, hooks, and budget signals
532
+ /status Show goal/mode/queue, turn vs mission, run gates, budgets, and a bounded read-only battlefield
478
533
  /workflow report
479
534
  Export the active run, engagement metadata, evidence, and large outputs to Markdown
480
535
  /context Show recent context-budget snapshots for the current conversation
@@ -483,7 +538,7 @@ Inside an interactive session, these commands inspect and drive runtime state
483
538
  /agent Switch the active agent
484
539
  /conversation Browse conversations for the active workspace
485
540
  /goal <task> Set the active goal without enabling autonomous mode
486
- /auto Toggle autonomous mode for the current goal (default: off; Esc stops it)
541
+ /auto Toggle autonomous mode for the current goal (default: off; Esc stops it)
487
542
  /update Download and apply the latest public release asset for supported native targets
488
543
  /help Show all commands
489
544
  /exit Quit
package/README.md CHANGED
@@ -1,103 +1,126 @@
1
- # Pentesting 🔓
2
-
1
+ # Pentesting 🔓
2
+
3
3
  <div align="center">
4
4
  <img src="https://api.iconify.design/hugeicons:bash.svg" alt="pentesting bash icon" width="120" />
5
- <h1>pentesting</h1>
6
- <p>Security-Focused Agent Runtime</p>
7
-
8
- [![MIT License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
9
- [![npm](https://img.shields.io/npm/v/pentesting.svg)](https://www.npmjs.com/package/pentesting)
10
- </div>
5
+ <h1>A High-Efficiency Penetration-Testing Agent</h1>
6
+ <p>Designed to achieve strong results with low-cost models. Powered by Rust.</p>
7
+
8
+ [![MIT License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
9
+ [![npm](https://img.shields.io/npm/v/pentesting.svg)](https://www.npmjs.com/package/pentesting)
10
+ </div>
11
+
12
+ ---
13
+
14
+ ## 🚀 Quick Start
15
+
16
+ Install globally, or run once with a Node package runner (Node.js 18.18+):
17
+
18
+ ```bash
19
+ npm install -g pentesting && pentesting # install
20
+ npx pentesting # or run once, no install
21
+ pnpm dlx pentesting
22
+ yarn dlx pentesting
23
+ ```
24
+
25
+ ### 🐳 Run with Docker
26
+
27
+ No local toolchain needed. Published images are `linux/amd64` only.
28
+
29
+ ```bash
30
+ export OPENAI_API_KEY="sk-..." # provider API key or gateway token
31
+ export OPENAI_BASE_URL="https://api.openai.com/v1"
32
+ export OPENAI_MODEL="gpt-4o"
33
+ export OPENAI_MAX_TOKENS="4096"
34
+
35
+ docker run -it --rm \
36
+ -v "$(pwd):/workspace" \
37
+ -v pentesting-config:/root/.pentesting \
38
+ -w /workspace \
39
+ -e OPENAI_API_KEY \
40
+ -e OPENAI_BASE_URL \
41
+ -e OPENAI_MODEL \
42
+ -e OPENAI_MAX_TOKENS \
43
+ agnusdei1207/pentesting:latest
44
+ ```
45
+
46
+ Provider variables are optional — the TUI launches without them and lets you log in inside the persistent `pentesting-config` volume. The TUI pre-fills output max tokens from the model; `OPENAI_MAX_TOKENS` overrides it.
47
+
48
+ ---
49
+
50
+ ## ✅ Capabilities
51
+
52
+ | Area | What it does |
53
+ | --- | --- |
54
+ | Verified agent loop | Streams actions and observations; a model Stop ends only the turn, evidence-backed verification closes the mission, and the full trajectory is persisted |
55
+ | Unified tool boundary | Built-in, delegated, and MCP calls share schema validation, provenance, permissions, policy, and resource limits |
56
+ | Context economy | Automatic micro-pruning and model-triggered summaries preserve useful context for low-cost models |
57
+ | Deterministic steering | Esc stops the current turn and auto loop, while submitted input resumes in FIFO order at safe turn boundaries |
58
+ | Reverse-shell & PTY lifecycle | One control plane manages authorized callbacks and local PTY/pipe sessions, from tagging, probing, and verified upgrades to transcripts, evidence, FD accounting, and deterministic reclamation |
59
+ | Bounded battlefield | A persistent Lead ledger produces a compact on-demand attention brief and read-only `/status` view; dispatch stays explicit and is capped at four branches |
60
+ | Adversarial pathfinding | A localized AlphaGo-inspired minimax technique models an opponent's best defensive move and improves the ability to find viable bypass paths |
61
+ | Dynamic fan-out / fan-in | The model sizes each specialist batch to the task, runs up to four delegated branches concurrently, then returns their results to the parent with bounded depth and recorded lineage |
62
+ | Extensible skills & tools | Discovers MCP tools dynamically and layers Markdown skills onto the same guarded runtime surface |
63
+ | Forgetting-aware memory | Ebbinghaus-style decaying notes combine with lexical, semantic, and graph retrieval |
11
64
 
12
65
  ---
13
66
 
14
- ## 🚀 Quick Start
15
-
16
- Install globally, or run once with a Node package runner (Node.js 18.18+):
17
-
18
- ```bash
19
- npm install -g pentesting && pentesting # install
20
- npx pentesting # or run once, no install
21
- pnpm dlx pentesting
22
- yarn dlx pentesting
23
- ```
67
+ ## 🧭 Philosophy
24
68
 
25
- ### 🐳 Run with Docker
26
-
27
- No local toolchain needed. Published images are `linux/amd64` only.
28
-
29
- ```bash
30
- export OPENAI_API_KEY="sk-..." # provider API key or gateway token
31
- export OPENAI_BASE_URL="https://api.openai.com/v1"
32
- export OPENAI_MODEL="gpt-4o"
33
- export OPENAI_MAX_TOKENS="4096"
34
-
35
- docker run -it --rm \
36
- -v "$(pwd):/workspace" \
37
- -v pentesting-config:/root/.pentesting \
38
- -w /workspace \
39
- -e OPENAI_API_KEY \
40
- -e OPENAI_BASE_URL \
41
- -e OPENAI_MODEL \
42
- -e OPENAI_MAX_TOKENS \
43
- agnusdei1207/pentesting:latest
44
- ```
69
+ | Principle | What it means here |
70
+ | --- | --- |
71
+ | Simplicity is best | Prefer the smallest design that preserves the capability, makes ownership clear, and remains easy to verify |
72
+ | If it cannot be measured, it cannot be improved | Instrument outcomes, compare them under repeatable conditions, and let evidence drive the next change |
73
+ | The best design blueprint is the human being | Better systems begin with better self-observation: understand how we perceive, decide, learn, and recover, then make those loops observable |
74
+ | The agent is the bottleneck | As AI models advance, the agent framework and the surrounding system must evolve with them |
45
75
 
46
- Provider variables are optional — the TUI launches without them and lets you log in inside the persistent `pentesting-config` volume. The TUI pre-fills output max tokens from the model; `OPENAI_MAX_TOKENS` overrides it.
76
+ ### Capability record
47
77
 
48
- ---
78
+ | Date | Record | Test conditions |
79
+ | --- | --- | --- |
80
+ | 2026-04 | Project work began | Initial implementation and baseline work |
81
+ | 2026-07-15 | First project-reported result in which Pentesting exceeded Claude Code on the tested penetration-testing capability set; reported margin: approximately 40% | Pentesting with MiniMax M3 versus Claude Code with Sonnet 5; identical prompts; CTF tasks ranging from easy to hard; a 60-minute test window for each system |
49
82
 
50
- ## Capabilities
83
+ This is a project-maintained, task-specific record, not an independent or general-purpose benchmark. It does not claim broader general-purpose superiority.
51
84
 
52
- | Area | What it does |
53
- | --- | --- |
54
- | Model-driven loop | Streaming action/observation loop; a model Stop ends a turn, verified artifacts close a mission, and the full turn trajectory is persisted |
55
- | Tool guardrails | Read-before-edit enforcement, repeat-call guard, policy-gated file/shell/network |
56
- | Permissions | Allow / Deny / Confirm, with once/always decisions persisted |
57
- | Context compaction | Automatic micro-pruning + model-triggered summarization |
58
- | Interrupt & steering | Esc stops the current turn and auto loop; queued input uses revisioned FIFO amend/replace semantics |
59
- | Reverse-shell control plane | Accept and track authorized callbacks, tag/probe sessions, verify PTY upgrades, keep transcript/evidence records |
60
- | PTY session control | One actor owns each socket/PTY/pipe, command queue, transcript, and child lifecycle, with FD accounting and deterministic reclamation |
61
- | Frontier-guided exploration | Persistent lead ledger with explicit dispatch; breadth defaults to one and is hard-capped at four |
62
- | Subagents | Explicit delegation to built-in specialists (`crypto`, `rev`, `pwn`); one selected agent can run up to four tasks concurrently |
63
- | MCP & skills | Dynamic MCP tool discovery, layered markdown skills |
64
- | Memory | Ebbinghaus-style decaying notes + hybrid lexical/semantic/graph retrieval |
85
+ > Claude Code's strength is generality, an area where Pentesting was weaker. Even so, it was strong enough to become a foundation that other products wrapped for penetration-testing workflows. To me, it felt like a formidable wall—and, at the same time, the goal I wanted to surpass.
65
86
 
66
87
  ---
67
88
 
68
- ## ⌨️ Interactive commands
69
-
70
- Sessions start with auto mode off. Esc stops both the current turn and autonomous continuation. Queued input replays in FIFO order.
89
+ ## ⌨️ Slash commands
71
90
 
72
91
  | Command | Purpose |
73
92
  | --- | --- |
74
- | `/help` | List every command |
75
- | `/model [query]` | Choose a provider/model or custom endpoint |
76
- | `/goal <objective>` · `/auto` | Record a goal, then toggle autonomous continuation; Esc stops it |
77
- | `/status` · `/usage` | Inspect run state, gates, budgets, tokens, and requests |
78
- | `/context` · `/memory` | Inspect context-budget snapshots and stored memories |
79
- | `/agent` · `/builder` · `/planner` · `/researcher` | Select the active agent |
80
- | `/new` · `/retry` · `/compact` | Start fresh, retry the last turn, or compact context |
81
- | `/config` · `/tools` · `/skill` | Configure the runtime and inspect capabilities |
82
- | `/workflow report` | Export the active run as Markdown |
83
- | `/update` · `/exit` | Update the native release or quit |
84
-
85
- > The command you run is always **`pentesting`**. The internal engine is **`builder`** — `pentesting` runs it under the hood; the engine name never surfaces in normal use.
86
-
87
- ---
88
-
93
+ | `/help` | Show commands |
94
+ | `/model [query]` | Switch provider, model, or custom endpoint |
95
+ | `/goal <objective>` | Set or clear the active goal |
96
+ | `/auto` | Run the active goal automatically; Esc stops it |
97
+ | `/status` | Show the current run and verified mission status |
98
+ | `/new` · `/retry` | Start a new conversation or retry the last turn |
99
+ | `/config` | Edit runtime configuration |
100
+ | `/exit` | Quit |
101
+
102
+ > The command you run is always **`pentesting`**. The internal engine is **`builder`** — `pentesting` runs it under the hood; the engine name never surfaces in normal use.
103
+
104
+ ---
105
+
89
106
  ## 🎹 From the Developer
90
107
 
91
108
  <div align="center">
92
109
  <img src="https://github.com/user-attachments/assets/abe73474-f27b-4536-b358-fedef1e461f0" alt="Chopin Ballade No.4" width="600" />
93
110
  </div>
94
-
95
- <br/>
96
-
97
- > "I believe playing the piano is also a form of orchestration."
98
- >
99
- > The harmony of polyphony — multiple voices — and homophony — a single melodic line.
100
- >
111
+
112
+ <br/>
113
+
114
+ > "I believe playing the piano is also a form of orchestration."
115
+ >
116
+ > The harmony of polyphony — multiple voices — and homophony — a single melodic line.
117
+ >
101
118
  > Each voice sings its most beautiful song from its own place, yet when combined, they create one grand, beautiful melody. I believe this structure is no different from AI agents.
102
119
  >
103
120
  > — *agnusdei1207*
121
+
122
+ ### First principles
123
+
124
+ > Since the AI era began, I have studied many highly starred agent systems, but their machinery often obscured a clear philosophy. The ideas that actually improved performance came from observing myself and returning to computer science fundamentals—Kruskal and Prim, divide and conquer, backtracking, Monte Carlo methods, and time/space complexity. My conclusion is simple: observe yourself, master the fundamentals, and build from there.
125
+
126
+ > I use Pentesting to study CTFs and penetration testing.
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "pentesting",
3
- "version": "0.100.14",
4
- "builderReleaseTag": "v0.100.14",
5
- "description": "pentesting coding agent runtime with audited reverse-shell capture, verified PTY session upgrades, pivot control, evidence transcripts, and safe session reclamation.",
3
+ "version": "0.101.2",
4
+ "builderReleaseTag": "v0.101.2",
5
+ "description": "Penetration testing AI agent powered by Rust, with audited reverse-shell capture, verified PTY upgrades, and evidence-first orchestration.",
6
6
  "license": "MIT",
7
7
  "author": "agnusdei1207",
8
8
  "type": "module",
@@ -36,8 +36,7 @@
36
36
  "hacker",
37
37
  "ai",
38
38
  "autonomous",
39
- "claude",
40
- "anthropic",
39
+ "rust",
41
40
  "tui",
42
41
  "cli",
43
42
  "nmap",