The Wizard's Pick
A terminal assistant for authorized security testing, with local inference by default.
Status: Working, public. Version 0.2.0 is the current release.
[!WARNING] Pick proposes and can execute shell commands. Use it only on systems you own or have explicit written permission to test. You are responsible for the authorized targets, techniques, testing window, credentials, data handling, and operating environment.
What The Wizard's Pick does
Pick keeps assessment context, model conversation, command results, findings, and reports in a
local SQLite-backed workflow. It uses an OpenAI-compatible model endpoint, configured by default
for a project-local Ollama server at 127.0.0.1:11435.
flowchart LR
U[Operator] --> P[Pick terminal]
P -->|127.0.0.1:11435| O[Project-local Ollama]
O --> M[DeepHat-V1-7B]
P --> C[Shell command]
C --> D[(SQLite session)]
D --> R[Markdown report]
The model can return structured command proposals and findings. Pick records commands executed through the application and exports all recorded command and audit entries for a session, with bounded output excerpts.
Execution model
Pick is intentionally lean. It does not include a scope matcher, command denylist, sandbox, approval service, or output redaction. Commands are passed to the host shell as written. Operators who need those controls should provide them through the account, container, virtual machine, network, and engagement process used to run Pick.
| Mode | Behavior |
|---|---|
manual |
Default. The model proposes commands; the operator runs them elsewhere and can paste the output back. |
assisted |
Pick asks once before executing a proposal. |
automated |
Pick executes parsed model proposals without confirmation, including proposals influenced by captured target output. |
/exec always executes the supplied command, independent of the current mode. The default
wall-clock timeout is 300 seconds, and combined captured output is limited to 1,000,000 bytes. Pick
terminates the POSIX process group when either bound is reached. These resource bounds do not
inspect or rewrite the command.
Requirements
- Python 3.11 or newer
- Linux or WSL2 for the bundled model setup script
- x86-64 for the pinned Ollama archive
curl,tar, andsha256sum- approximately 20 GB of free storage for the runtime, downloaded GGUF, and imported model
The Python client may work on other platforms when you manage a compatible endpoint yourself. The repository's end-to-end setup and CI target Linux.
Install
Install the CLI from PyPI:
python -m pip install wizards-pick
A source checkout includes the project-local Ollama and model setup scripts:
git clone https://github.com/wizards-ecosystem/wizards-pick.git
cd wizards-pick
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e .
See the release checklist for maintainer steps.
Set up the model
In the first terminal:
scripts/ollama-local.sh install
scripts/ollama-local.sh serve
In a second terminal:
scripts/ollama-local.sh build
build downloads DeepHat-V1-7B Q8_0 from a pinned Hugging Face revision, verifies its SHA-256
digest, and creates the deephat Ollama model in .wizards-pick/. To use another GGUF, set both
DEEPHAT_GGUF_URL and DEEPHAT_GGUF_SHA256.
The application code is MIT-licensed. The default model repository identifies the model license as Apache-2.0. Review the model card and license before redistribution: mradermacher/DeepHat-V1-7B-GGUF.
scripts/bake_rope.py can write experimental YaRN metadata for larger context windows. Install the
optional dependency with python -m pip install -e ".[rope]" and evaluate the resulting model for
your workload.
Run The Wizard's Pick
wizards-pick
The first session wizard records targets and context, focus areas, exclusions, testing window, authorization reference, intensity, emergency contact, and notes. This information guides the model. Pick does not enforce it against generated commands.
Interactive commands
| Command | Behavior |
|---|---|
/context, /scope |
Show the session context |
/sessions |
List saved sessions |
/plan [phase|all] |
Show an offline assessment plan |
/tools |
Check common assessment tools on PATH |
/mode manual|assisted|automated |
Change execution mode |
/timeout [seconds] |
Show or set the positive command timeout |
/exec <command> |
Execute a shell command and record the result |
/paste |
Paste external output, ending with a line containing only EOF |
/findings |
List recorded findings |
/report [path] |
Export a Markdown report |
/help, /exit |
Show help or quit |
Data and network behavior
By default, CLI state is written to .wizards-pick/ under the directory where Pick starts. Set
WIZARDS_PICK_DATA_DIR to choose another location. The setup script keeps its Ollama runtime,
model, cache, home, and logs in the repository's .wizards-pick/ directory.
State directories are created with owner-only permissions on POSIX systems. SQLite files and
reports are written with mode 0600. Reports and command history are unredacted and may contain
sensitive assessment data.
Inference uses loopback by default. The setup commands download Ollama and the model, and executed
assessment commands can use the network. WIZARDS_PICK_URL can point the client at another
OpenAI-compatible endpoint, but Pick does not add authentication headers. A remote endpoint
receives session context and conversation content.
Related settings:
| Variable | Default |
|---|---|
WIZARDS_PICK_DATA_DIR |
<current directory>/.wizards-pick |
WIZARDS_PICK_MODEL |
deephat |
WIZARDS_PICK_OLLAMA_HOST |
127.0.0.1:11435 |
WIZARDS_PICK_URL |
http://127.0.0.1:11435/v1/chat/completions |
WIZARDS_PICK_CONTEXT_TOKENS |
32768 |
WIZARDS_PICK_RESPONSE_TOKENS |
2048 |
Development
python -m pip install -e ".[dev]"
make check
make release-check
make check runs Ruff, mypy, and pytest. The test suite does not require a model server or network
access. See the
contribution guide
and security policy.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wizards_pick-0.2.0.tar.gz.
File metadata
- Download URL: wizards_pick-0.2.0.tar.gz
- Upload date:
- Size: 130.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a15ed8ebe7e21c8a10790955e7801ab996716f1ead1859507dfbf92d9f3c736f
|
|
| MD5 |
c118bed939d2fcfa0b0cd17ca36fa417
|
|
| BLAKE2b-256 |
05f364e932caa1a27ff2916aca15a453a8b2f652233aa8e966e6c932150385bb
|
Provenance
The following attestation bundles were made for wizards_pick-0.2.0.tar.gz:
Publisher:
publish.yml on wizards-ecosystem/wizards-pick
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wizards_pick-0.2.0.tar.gz -
Subject digest:
a15ed8ebe7e21c8a10790955e7801ab996716f1ead1859507dfbf92d9f3c736f - Sigstore transparency entry: 2733026238
- Sigstore integration time:
-
Permalink:
wizards-ecosystem/wizards-pick@9f93731965d97bb3ceb71dd0c30ec37fe442c4c5 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/wizards-ecosystem
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9f93731965d97bb3ceb71dd0c30ec37fe442c4c5 -
Trigger Event:
release
-
Statement type:
File details
Details for the file wizards_pick-0.2.0-py3-none-any.whl.
File metadata
- Download URL: wizards_pick-0.2.0-py3-none-any.whl
- Upload date:
- Size: 30.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2ab77b2418e1297f0d29350da517539e885b46d2d8145ec5c692773f0ab18010
|
|
| MD5 |
7507ee60c3bdb88244e7504b92cc0f94
|
|
| BLAKE2b-256 |
5dc07cafc913a3345b607885026abafb62694027fad4d0e1f1bd01ac7bb6aaf3
|
Provenance
The following attestation bundles were made for wizards_pick-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on wizards-ecosystem/wizards-pick
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wizards_pick-0.2.0-py3-none-any.whl -
Subject digest:
2ab77b2418e1297f0d29350da517539e885b46d2d8145ec5c692773f0ab18010 - Sigstore transparency entry: 2733026305
- Sigstore integration time:
-
Permalink:
wizards-ecosystem/wizards-pick@9f93731965d97bb3ceb71dd0c30ec37fe442c4c5 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/wizards-ecosystem
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9f93731965d97bb3ceb71dd0c30ec37fe442c4c5 -
Trigger Event:
release
-
Statement type: