franki
AI-powered terminal assistant for developers and security professionals.
franki is an open source CLI that brings AI assistance directly to your terminal — for coding, CEH/pentesting, SOC analysis, and exam prep. It supports multiple free AI providers with automatic fallback when one hits a rate limit.
Install
pipx install franki-cli
Why pipx? franki is a CLI tool.
pipxinstalls it in an isolated environment and puts thefrankicommand on your PATH — no venv setup needed.Install pipx first if you don't have it:
sudo apt install pipx && pipx ensurepath
Or with pip in a virtual environment:
python3 -m venv .venv && source .venv/bin/activate
pip install franki-cli
After installing, run the setup wizard to add your API keys:
franki init
Quick start
franki # launch interactive REPL
franki --version # print version
franki init # re-run setup wizard
franki config list # show config (keys masked)
Inside the REPL:
explain how TCP handshakes work # plain message
@myfile.py refactor this function # inject a file into context
!nmap -sV 192.168.1.1 # run a shell command and analyse output
/skill pentest # switch skill
/help # show all commands
Skills
| Skill | Purpose |
|---|---|
| coding | Code generation, review, debugging |
| pentest | CEH-aligned recon, exploitation, reporting |
| soc | Log analysis, alert triage, incident response |
Providers
franki works with multiple free AI APIs and automatically falls back when one hits a rate limit:
| Provider | Free tier | Get key |
|---|---|---|
| Groq | Yes | groq.com |
| Google Gemini | Yes | aistudio.google.com |
| OpenRouter | Free models available | openrouter.ai |
Configure keys:
franki config set groq.api_key <key>
franki config set gemini.api_key <key>
franki config set openrouter.api_key <key>
Commands
Conversation
| Command | Description |
|---|---|
/clear |
Clear conversation history |
/compact |
Summarise history to save context |
/rewind |
Undo the last exchange |
/history |
Show current session log |
/context |
Show model, memory, tokens, search status |
Output
| Command | Description |
|---|---|
/export |
Save session to Obsidian vault as markdown |
/copy |
Copy last AI response to clipboard |
/note <text> |
Save a timestamped finding note |
/report |
Generate a pentest or SOC report from the session |
/search <query> |
Web search via Tavily — injects results into context |
Navigation
| Command | Description |
|---|---|
/skill <name> |
Switch skill: coding / pentest / soc / ceh |
/model <name> |
Switch AI model |
/scope <ip/cidr> |
Set pentest target scope |
/scope clear |
Remove active scope |
CEH / Security
| Command | Description |
|---|---|
/quiz |
CEH v13 flashcard quiz mode |
/mitre <behaviour> |
Map a behaviour to MITRE ATT&CK |
/payload <type> |
Suggest payloads for an attack type |
/tools <task> |
Suggest the right tools for a task |
/explain <tool> |
Explain a tool, its flags, and usage |
Memory
| Command | Description |
|---|---|
/remember <fact> |
Save a fact to long-term memory |
/memories |
List all saved memory, scopes, skill usage, notes |
/forget <id|all> |
Remove a fact by id, or clear all memory |
System
| Command | Description |
|---|---|
/connect |
Show connection mode (delkaai / direct) |
/connect delkaai |
Switch to DelkaAI backend |
/connect direct |
Switch back to direct providers |
/init |
Re-run the API key setup wizard |
/config |
Open the config editor |
/providers |
Show provider status and configuration |
/help |
Show all commands |
/quit |
Exit (prompts to save session) |
Auto-search
franki automatically runs a web search and injects the results before the AI responds
when your message contains keywords like latest, current, today, news,
or a CVE ID (CVE-XXXX-XXXXX).
Requires a Tavily API key (TAVILY_API_KEY) .
Long-term memory
franki remembers things across sessions:
/remember I use Python 3.11 and FastAPI
/remember my pentest lab is 10.10.10.0/24
/memories # view everything stored
/forget 2 # remove entry #2
Stored facts, recent pentest scopes, skill usage, and notes are automatically injected into the system prompt at the start of every session.
Configuration
Config is stored at ~/.config/franki/config.json.
franki config list # show all config (keys masked)
franki config set groq.api_key <key> # set a value
franki config get active_model # read a value
franki config reset # reset to defaults
License
MIT — see LICENSE
Release files for franki-cli 1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| franki_cli-1.3.tar.gz | 171.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| franki_cli-1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 292.3 kB
Release files / franki_cli-1.3.tar.gz
| Download URL | franki_cli-1.3.tar.gz |
|---|---|
| Size | 171.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b5779a2f919362d51fff61ae4a7233008568f226ff4a4b9d8a88026c69962de5
|
|
BLAKE2b-256 checksum How to use checksums |
df5d788a88f42dc9be6e4fbe6f281b30f4f9ef23e2cca1fe7bbd4df55af05579
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Release files / franki_cli-1.3-py3-none-any.whl
| Download URL | franki_cli-1.3-py3-none-any.whl |
|---|---|
| Size | 120.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b4e09e5d3da4823282778f9469ef8ab1d748d0a532b6ab780aa6345e41fff06e
|
|
BLAKE2b-256 checksum How to use checksums |
584071807f982c5794bb571382558d79f7b4f528a32bbe161715dbc32b12eeb6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|