Zero runtime dependencies
TypeScript run straight from source on Node 24 via native type stripping. No build step, no bundler, no node_modules at runtime.
flashlite streams chat and runs an agent loop with filesystem and terminal tools — against any OpenAI- or Anthropic-compatible endpoint. Zero runtime dependencies. Your keys never leave your machine.
npm i -g flashlite
Not a chat window bolted onto a shell. flashlite inspects your files, makes focused changes, runs the checks, and tells you what it verified.
TypeScript run straight from source on Node 24 via native type stripping. No build step, no bundler, no node_modules at runtime.
OpenAI- or Anthropic-compatible chat. Point flash at your router or provider and pick a model from the live catalog.
Bottom-anchored composer, live agent cards, anchored scrolling, markdown and token-colored diffs, reverse-i-search — all in raw-mode TTY.
Read, write, edit, search, copy, move and remove — with byte pages, bounded previews, and unified-diff previews before anything changes.
Builds, tests and scripts through /bin/zsh -f -c, with bounded output, timeouts, process-group cancellation and honest truncation.
From prompt-for-everything to fully unguarded. Cycle modes with Shift+Tab; catastrophic deletions are refused outright.
For substantial requests, Boost starts independent read-only investigation helpers while the main agent works — then folds their findings back in.
A live context meter with token counts, colour-coded as it fills, plus /compact checkpointing so long sessions stay coherent.
Ctrl+V queues a clipboard screenshot for a vision model. Memory files, custom slash commands, hooks, todos and /undo round it out.
Modes are session-only and switched live with /mode or Shift+Tab. Each one is an explicit choice — never a hidden default.
Each file mutation and every terminal command needs a separate yes. The default for a first run in unfamiliar code.
Writes, edits, copies, moves and removals run without prompting. Terminal commands still ask, one by one.
Arbitrary commands run unprompted — except five categories that still ask: network, installs, sudo, paths outside the project, destructive Git.
No approval prompts and no ask list. Only recognizable catastrophic deletion or disk-erasure is still gated. Use only when you trust the task.
remove_path uses fs.rm with no recovery store — git, or a copy made first, is the only undo. Commands are never sandboxed; a classifier is not proof of safety.
Reads are free. Mutations and commands follow the active permission mode. Every call is scoped, bounded and reported with what it acted on.
| Tool | What it does | Approval |
|---|---|---|
read_file | Read text with UTF-8-safe byte pages up to 256 KiB and continuation metadata | no |
read_files | Read 1–20 files with per-file errors and a shared content budget | no |
file_info | Inspect type, size, permissions and modification time — no content | no |
list_dir | Sorted directory pages via offset and limit | no |
find_files | Find paths by literal substring, files and/or directories | no |
grep | Bounded literal text search with snippets and honest partial-result metadata | no |
write_file | Create or overwrite text, including missing parents, up to 1 MiB | yes |
edit_file | Replace a nonempty, unique exact match; result up to 1 MiB | yes |
make_dir | Create folders and missing parents | yes |
copy_path | Copy a file or directory tree — never overwrites a destination | yes |
move_path | Move or rename — never overwrites a destination | yes |
remove_path | Permanently delete a file or directory. No recovery store | yes |
run_command | Noninteractive terminal command, bounded output and time | per mode |
macOS and Node 24 or newer. One global npm install, zero runtime dependencies.
# zero runtime dependencies npm install -g flashlite flash --version
flash # first launch asks for your endpoint URL, # then an API key with masked input
flash --check # connectivity + model catalog flash # the REPL flash -p "explain this code: …"
flash asks for the endpoint URL and then the API key with masked input,
saving both to ~/.config/flashlite/config.json (chmod 600). Keys are never printed, logged, or committed — not even masked.
Nothing is bundled with the package or baked into the binary.
flash # interactive REPL flash -p "explain this code: …" # text-only one-shot flash --agent -p "inspect this repo" # headless, read-only flash --agent --auto -p "fix the tests" # guarded commands flash --absolute # unguarded auto
flash --model <id> --debug # pin a model flash --effort high # auto … max flash --image ./shot.png -p "explain this" flash --resume latest # continue a saved session flash --check # endpoint diagnostic flash --no-color # plain output
No. flashlite speaks both the OpenAI Chat Completions and Anthropic Messages dialects, so any compatible endpoint works — a hosted provider, your own router, or a local gateway. You choose the model with /model or --model.
Your key lives only in ~/.config/flashlite/config.json with chmod 600. It is never printed, logged or committed — not even in masked form — and the endpoint is stored beside it. Commands run with a minimal environment allowlist, and known router credentials are redacted from output before it reaches history.
No, and it says so plainly. File tools confine paths in ask, files and guarded auto, but terminal commands are not sandboxed and can touch the wider machine and network. Guarded auto still asks before network access, installs, sudo, paths outside the project and destructive Git; unguarded auto only gates recognizable catastrophic deletion or disk erasure.
remove_path is permanent — there is no recovery store. Git, or a copy made first, is the only recovery. /undo is separate and only reverses prior file-tool writes from in-memory original bytes; it never restores deletions or shell side effects.
macOS only for v1 — the raw-mode TTY handling and ANSI output assume a macOS terminal. It runs on Node 24 or newer and has zero runtime dependencies.
Yes. flash --agent -p "…" enables tools headlessly and defaults to read-only, ignoring saved permissions. Add --auto-approve for file changes or --auto for guarded commands. Denied tools or unfinished turns produce a non-zero exit code.