Risk Consideration
July 26, 2026 ยท View on GitHub
The following risks should be considered when using ell:
Sending data to LLM backends
- The prompts are sent to LLM backends, so be careful with sensitive information.
- A redaction plugin (#14) is
available to redact sensitive information, but it is not foolproof. For
enhanced desensitization, use your own plugin or call third-party softwares.
The redaction plugin ships disabled by default (its hook script has a
.disabledsuffix); enable it by removing that suffix. See Plugins. - In record/interactive mode, the recorded terminal context (
$SHELL_CONTEXT) is also sent to the backend. It is passed through the samepost_inputhooks as your prompt, so redaction applies to it too when enabled.
- A redaction plugin (#14) is
available to redact sensitive information, but it is not foolproof. For
enhanced desensitization, use your own plugin or call third-party softwares.
The redaction plugin ships disabled by default (its hook script has a
- The output of LLMs is not guaranteed to be correct or safe. An LLM can be tuned or prompted to return deceptive results, e.g. instructions that manipulate your terminal.
Executable content: templates, plugins and config
ell treats templates, plugins and config files as code, not just data. Installing them from untrusted sources runs arbitrary commands as your user:
- Plugins are shell scripts executed as you. Only install plugins you trust.
- Config files are sourced (executed). ell only sources a config file that
is owned by you (or root) and is not group-/world-writable, which blocks the
"hostile
.ellrcin the current directory" attack, but a config file you own can still run anything you put in it. - Templates are substituted with a fixed allowlist of variables and are not evaluated by the shell, so a template file cannot execute commands. Values you supply (prompt, model, etc.) are inserted as data. Older, unrelated "install a template" advice from third parties should still be treated with care.
ELL_API_STYLEand template names are validated so they cannot be used to load arbitrary files by path traversal.
Credentials
- Passing
--api-keyon the command line is discouraged: it ends up in your shell history. Prefer a config file (with safe permissions) or the environment. The key is not logged and is not placed on curl's command line. - By default ell refuses to send credentials to a plaintext
http://URL (onlyhttps://and loopback hosts are allowed) to avoid leaking the key in cleartext. SetELL_ALLOW_INSECURE_URL=trueto override for a trusted local endpoint.
Record mode
- In record mode, all your input and output history are written to
/tmp/tmp.xxxxand are readable by the root user. - Unexpected exit of record mode may leave the history file in
/tmp/. - Password input is not recorded by
script, so it is safe to type sudo or ssh passwords in the terminal.