[EPIC][module-lish] Native LISH module console: search, use, info, options, run, jobs, and sessions #193

Open
opened 2026-09-05 08:07:21 +00:00 by nsaspy · 0 comments
Owner

Parent: #192

Mission

Make LISH the first-class operator surface for the native Hackmode module framework, providing the useful workflow ergonomics familiar from Metasploit-style consoles without adding a second REPL/runtime.

Build on #14 and #178. LISH is presentation/control over typed Common Lisp APIs.

Operator workflow

Provide coherent command groups equivalent in capability to:

modules search ...
modules show [family]
module use <id>
module info [id]
module options
module set <name> <typed-value>
module unset <name>
module check
module run [--background]
module status
jobs list/show/cancel
sessions list/show/close

Exact command spelling should follow LISH conventions; conceptual parity matters more than copying msfconsole syntax.

Required behavior

Catalog

  • search module metadata;
  • filter by family/tags/service/applicability;
  • show full typed module information;
  • show deprecation/supersession and required capabilities.

Selected module context

  • select/use one module instance;
  • inspect current operation + module identity;
  • show typed option schema, defaults, effective values and source layer;
  • set/unset/reset run-local/module-instance values;
  • validate configuration without dispatch;
  • explain blocked/missing values.

Execution

  • preflight/check where module contract supports it;
  • run foreground/background through canonical module runtime;
  • surface authority/scope admission or denial;
  • show structured result/evidence references;
  • never invoke an implementation directly from shell parsing.

Jobs + sessions

  • list/show/cancel module jobs;
  • inspect terminal stop reason/evidence;
  • list/show/close typed session handles;
  • reject stale/closed handle operations cleanly.

UX requirements

  • completion for module IDs, family names and option names;
  • typed rendering rather than raw printed structs where practical;
  • stable machine-readable output mode for scripting;
  • no sensitive option values in command history/status by default;
  • clear distinction between selected operation, module, authority mode and reasoning mode;
  • inspection commands cause zero provider dispatches;
  • errors/denials are structured and explainable.

Architecture

LISH command
   -> typed shell adapter
   -> Hackmode module API
   -> module registry/options/runtime
   -> capability/provider boundary when a run is admitted

Do not add module framework state inside the shell layer.

Acceptance

  • catalog search/info/show is usable entirely through LISH;
  • operator can select a module and configure typed options;
  • invalid config can be diagnosed without dispatch;
  • foreground/background run paths use the same module runtime;
  • jobs are inspectable/cancellable;
  • typed sessions are inspectable/closable where present;
  • passive authority visibly blocks effectful module runs;
  • sensitive values are redacted from normal display/history;
  • machine-readable output exists for core catalog/run/status commands;
  • direct Common Lisp API and LISH adapter return equivalent semantic state;
  • packaged flake/check surface exercises the module shell load path.

Non-goals

  • No separate Hackmode module REPL.
  • No direct provider execution from LISH parser code.
  • No copying of Metasploit console internals.

First slice

Wire modules search, module info, module use, module options, typed set/unset, and a harmless foreground fixture run over #193/#194 before adding background jobs/session controls.

Parent: #192 ## Mission Make LISH the first-class operator surface for the native Hackmode module framework, providing the useful workflow ergonomics familiar from Metasploit-style consoles without adding a second REPL/runtime. Build on #14 and #178. LISH is presentation/control over typed Common Lisp APIs. ## Operator workflow Provide coherent command groups equivalent in capability to: ```text modules search ... modules show [family] module use <id> module info [id] module options module set <name> <typed-value> module unset <name> module check module run [--background] module status jobs list/show/cancel sessions list/show/close ``` Exact command spelling should follow LISH conventions; conceptual parity matters more than copying `msfconsole` syntax. ## Required behavior ### Catalog - search module metadata; - filter by family/tags/service/applicability; - show full typed module information; - show deprecation/supersession and required capabilities. ### Selected module context - select/use one module instance; - inspect current operation + module identity; - show typed option schema, defaults, effective values and source layer; - set/unset/reset run-local/module-instance values; - validate configuration without dispatch; - explain blocked/missing values. ### Execution - preflight/check where module contract supports it; - run foreground/background through canonical module runtime; - surface authority/scope admission or denial; - show structured result/evidence references; - never invoke an implementation directly from shell parsing. ### Jobs + sessions - list/show/cancel module jobs; - inspect terminal stop reason/evidence; - list/show/close typed session handles; - reject stale/closed handle operations cleanly. ## UX requirements - completion for module IDs, family names and option names; - typed rendering rather than raw printed structs where practical; - stable machine-readable output mode for scripting; - no sensitive option values in command history/status by default; - clear distinction between selected operation, module, authority mode and reasoning mode; - inspection commands cause zero provider dispatches; - errors/denials are structured and explainable. ## Architecture ```text LISH command -> typed shell adapter -> Hackmode module API -> module registry/options/runtime -> capability/provider boundary when a run is admitted ``` Do not add module framework state inside the shell layer. ## Acceptance - [ ] catalog search/info/show is usable entirely through LISH; - [ ] operator can select a module and configure typed options; - [ ] invalid config can be diagnosed without dispatch; - [ ] foreground/background run paths use the same module runtime; - [ ] jobs are inspectable/cancellable; - [ ] typed sessions are inspectable/closable where present; - [ ] passive authority visibly blocks effectful module runs; - [ ] sensitive values are redacted from normal display/history; - [ ] machine-readable output exists for core catalog/run/status commands; - [ ] direct Common Lisp API and LISH adapter return equivalent semantic state; - [ ] packaged flake/check surface exercises the module shell load path. ## Non-goals - No separate Hackmode module REPL. - No direct provider execution from LISH parser code. - No copying of Metasploit console internals. ## First slice Wire `modules search`, `module info`, `module use`, `module options`, typed set/unset, and a harmless foreground fixture run over #193/#194 before adding background jobs/session controls.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
nsaspy/hackmode#193
No description provided.