Repository navigation
lantern 0.1.4
lantern 0.1.4
The assessment flow now takes an instruction in words, not just flags.
lantern ask runs the same pipeline as lantern run, but the operator's
directive — a sentence or a whole framework — travels with the flow instead
of a fixed mission string.
lantern ask
lantern ask --target shop.example.com --scope "shop.example.com" --file framework.md
lantern ask --target example.com --scope "example.com" --prompt "Check TLS and headers, defensive only"
echo "Check DNS and TLS on example.com" | lantern ask --target example.com --scope "example.com"The full text is stored verbatim as a retention-tracked directive.md
artifact with the flow; each role objective and the plan phase see its
3,000-character head, so a 35-section framework fits the 6,000-token working
set. A framework excerpt measured here reports 7,257 in / 16 out tokens (scripted - estimate) with peak 369/6,000 — headroom confirmed, not assumed.
Intent is read, authority is not moved
The prompt is reduced to intent deterministically — no model call, no tokens,
covered by tests:
- action verbs and gated tool names (
exploit,hydra,sqlmap, active
testing) mean active testing; coverage nouns alone do not (a framework
listing "privilege escalation" as a checklist item is a topic, not an
instruction to escalate); - an explicit restraint (
defensive only,do not exploit,read-only)
always wins — even over--offensive; - contract fields (
SYSTEM_NAMEthroughSPECIAL_INSTRUCTIONS) parse out,
and--targetstays the authority: if it disagrees with the contract's
TARGETS line, the run warns naming both and the flag governs.
The rule, stated once: the prompt can restrain --offensive, never grant
it. Ask for exploitation without the flag and you get reconnaissance plus the
flag named; pass the flag with a defensive-only prompt and the prompt wins.
Both cases say why, on screen, before anything runs:
instruction : Exploit the login form with hydra and run sqlmap against search
intent : active testing requested
contract : none declared (TARGETS etc. all empty)
note : prompt asks for active testing but --offensive was not passed: running reconnaissance only (re-run with --offensive to allow it)
run and ask report a finished flow through one shared outcome block, so
the two lines at the end — spend and context — read identically either way.
Verified
- 227 tests pass, 1 ignored (the live NVD query), 0 warnings — up from 213
at 0.1.3. Fourteen new: ten for intent (including restraint-beats-verbs and
nouns-are-not-instructions), three for theaskgate, one proving the
directive artifact lands and the flow options record its length. - All four gate paths run live against
--dry-run: recon restraint,
exploit-ask downgrade, flag-vs-restraint, contract parse with eight fields,
--targetmismatch warning, and piped-stdin instruction. run --dry-run: 0.34–0.99 s for the full pipeline;ask --dry-run:
0.36–0.66 s.lantern doctorexits 0 in 36–39 ms.- No warnings across
cargo check --workspace --all-targets, and no line
added here passes the 100-column style. - The 20% disk floor did its job on the author again: at 5.82 GB free against
a 6.16 GB floor,runrefused with both numbers in the message — and the
first "benchmark" pass of this release measured those 5 ms refusals, not
runs. The timings above are re-measured after clearing regenerable build
weight.
Upgrade
git pull
cargo build --release # ~/.cargo/bin/cargo if it is not on PATH
./target/release/lantern doctorNo database schema change: the directive length joins the flow-options blob,
so flows recorded on 0.1.0–0.1.3 still render. No new required variables and
no new required flags — ask reuses --target, --scope, --roles,
--steps, --interactive and --offensive with their existing meanings.
Attached: lantern-v0.1.4-aarch64-linux-gnu (8,612,232 bytes), built on Debian
13 / glibc 2.41 / aarch64. For anything else, build from source as above.