Requirements, build, and the one-time setup for SkillSpector and a Brave Search key. For what to run once it is installed, see USAGE.md.
- JDK 25 (compiled with
--release 25). Gradle provisions the JDK 25 toolchain automatically (auto-detected or downloaded via the Foojay resolver), so you don't need JDK 25 onJAVA_HOME— any JDK that runs Gradle will do. - A local LLM exposed over an OpenAI-compatible API (e.g. Ollama).
- Python 3.12–3.14 (only for
setup; SkillSpector's supported range). - A Brave Search API key for discovery.
./gradlew build # compile + full quality gate (analysis) + tests
./gradlew test # tests only (JUnit + ArchUnit)
./gradlew run --args="..." # run the CLIbuild runs the complete quality gate — see Development.
./gradlew run --args="setup"This provisions a local Python venv and installs SkillSpector into it. learn
runs SkillSpector with --no-llm so vetting stays fully local (static analysis only).
Discovery uses the Brave Search API — the only
external service learn needs.
- Create an account at https://brave.com/search/api/.
- Subscribe to a plan. The Free tier (a few thousand queries/month) is enough to try Skill3; a card may be required for verification even on the free plan.
- Create a subscription token (your API key).
- Provide it one of two ways:
# Option A — environment variable (picked up automatically)
export BRAVE_SEARCH_API_KEY="your-token"
# Option B — per run
./gradlew run --args="learn mcp --llm-model qwen2.5-coder:7b --brave-key your-token"The token is sent in the X-Subscription-Token header. If no key is found,
learn stops early with a clear message; the key is treated as a secret
(@AIPrivacy — never logged).
You don't strictly need a key to evaluate the pipeline: the example in
examples/was produced from seeded source URLs, and the tests stub discovery behind theSearchClientinterface. For a real run with no key and no network at all, supply your own sources with--input-file(see Offline discovery).