running locally · macOS · Node 24+

A coding agent
that lives in your terminal.

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
0 runtime deps 100% local keys any compatible endpoint
the flashlite startup glyph

What's inside

An agent that actually does the work

Not a chat window bolted onto a shell. flashlite inspects your files, makes focused changes, runs the checks, and tells you what it verified.

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.

Any compatible endpoint

OpenAI- or Anthropic-compatible chat. Point flash at your router or provider and pick a model from the live catalog.

A real streaming REPL

Bottom-anchored composer, live agent cards, anchored scrolling, markdown and token-colored diffs, reverse-i-search — all in raw-mode TTY.

Filesystem tools

Read, write, edit, search, copy, move and remove — with byte pages, bounded previews, and unified-diff previews before anything changes.

Terminal commands

Builds, tests and scripts through /bin/zsh -f -c, with bounded output, timeouts, process-group cancellation and honest truncation.

Four permission modes

From prompt-for-everything to fully unguarded. Cycle modes with Shift+Tab; catastrophic deletions are refused outright.

Boost

For substantial requests, Boost starts independent read-only investigation helpers while the main agent works — then folds their findings back in.

Context you can see

A live context meter with token counts, colour-coded as it fills, plus /compact checkpointing so long sessions stay coherent.

Images & memory

Ctrl+V queues a clipboard screenshot for a vision model. Memory files, custom slash commands, hooks, todos and /undo round it out.


Permissions

Start cautious. Loosen on purpose.

Modes are session-only and switched live with /mode or Shift+Tab. Each one is an explicit choice — never a hidden default.

ask

Every action asks

Each file mutation and every terminal command needs a separate yes. The default for a first run in unfamiliar code.

files

File changes flow

Writes, edits, copies, moves and removals run without prompting. Terminal commands still ask, one by one.

auto

Guarded auto

Arbitrary commands run unprompted — except five categories that still ask: network, installs, sudo, paths outside the project, destructive Git.

unguarded

Whole drive, every command

No approval prompts and no ask list. Only recognizable catastrophic deletion or disk-erasure is still gated. Use only when you trust the task.

Deletion is permanent. 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.

The toolbelt

Thirteen tools, one policy engine

Reads are free. Mutations and commands follow the active permission mode. Every call is scoped, bounded and reported with what it acted on.

ToolWhat it doesApproval
read_fileRead text with UTF-8-safe byte pages up to 256 KiB and continuation metadatano
read_filesRead 1–20 files with per-file errors and a shared content budgetno
file_infoInspect type, size, permissions and modification time — no contentno
list_dirSorted directory pages via offset and limitno
find_filesFind paths by literal substring, files and/or directoriesno
grepBounded literal text search with snippets and honest partial-result metadatano
write_fileCreate or overwrite text, including missing parents, up to 1 MiByes
edit_fileReplace a nonempty, unique exact match; result up to 1 MiByes
make_dirCreate folders and missing parentsyes
copy_pathCopy a file or directory tree — never overwrites a destinationyes
move_pathMove or rename — never overwrites a destinationyes
remove_pathPermanently delete a file or directory. No recovery storeyes
run_commandNoninteractive terminal command, bounded output and timeper mode

Get started

Running in about two minutes

macOS and Node 24 or newer. One global npm install, zero runtime dependencies.

Install the CLI

# zero runtime dependencies
npm install -g flashlite
flash --version

Connect your endpoint

flash
# first launch asks for your endpoint URL,
# then an API key with masked input

Verify and start working

flash --check   # connectivity + model catalog
flash           # the REPL
flash -p "explain this code: …"
Your key is yours. On first launch, 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.

Command line

One-shot, headless, or interactive

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

Questions

The short answers

Does it only work with one provider?

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.

Is my API key safe?

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.

Is it sandboxed?

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.

What happens if I delete something by mistake?

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.

Which platforms are supported?

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.

Can I automate it in CI?

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.