| Crates.io | awful_aj |
| lib.rs | awful_aj |
| version | 0.4.0 |
| created_at | 2023-10-12 23:38:48.645569+00 |
| updated_at | 2025-11-17 20:45:22.372872+00 |
| description | A CLI for interacting with OpenAI compatible APIs |
| homepage | https://github.com/graves/awful_aj |
| repository | https://github.com/graves/awful_aj.git |
| max_upload_size | |
| id | 1001760 |
| size | 526,020 |
aj) π²Awful Jade (aka aj) is your command-line sidekick for working with Large Language Models (LLMs).
Think of it as an LLM Swiss Army knife with the best intentions π.
Ask questions, run interactive sessions, sanitize messy OCR book dumps, synthesize exam questions, all without leaving your terminal.
It's built in Rust for speed, safety, and peace of mind. π¦
Ξ» aj --help
Awful Jade β a CLI for local LLM tinkering with memories, templates, and vibes.
Usage: aj <COMMAND>
Commands:
ask Ask a single question and print the assistant's response
interactive Start an interactive REPL-style conversation
init Initialize configuration and default templates in the platform config directory
reset Reset the database to a pristine state
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help
-V, --version Print version

aj ask "question" and get answers powered by your configured model.--rag flag. Automatic chunking, caching, and retrieval.--pretty flag).all-MiniLM-L6-v2 BERT model from HuggingFace Hub when needed.From crates.io:
cargo install awful_aj
This gives you the aj binary.
Requirements:
The embeddings model (all-MiniLM-L6-v2) will be downloaded automatically from HuggingFace Hub to your system's cache directory when first needed. Models are cached using the hf-hub crate, typically at:
~/.cache/huggingface/hub/~/.cache/huggingface/hub/C:\Users\YOU\AppData\Local\huggingface\hub\No special setup required! Just install with cargo install awful_aj and you're ready to go.
The embeddings model will be downloaded automatically from HuggingFace Hub the first time you use a feature that requires it.
Create default configs, templates, and database:
aj init
This will generate:
config.yaml with sensible defaultstemplates/default.yaml and templates/simple_question.yamlaj.db) for sessions in your config directoryOptions:
--overwrite: Force overwrite existing config, templates, and database filesExample:
aj init --overwrite # Reinitialize everything from scratch
aj ask "Is Bibi really from Philly?"
You'll get a colorful, model-dependent answer in yellow (or dark gray if the model uses <think> tags for reasoning).
Options:
-t, --template <NAME>: Use a specific template (e.g., simple_question)-s, --session <NAME>: Save to a named session for context retention-o, --one-shot: Ignore any session configured in config.yaml (force standalone prompt)-r, --rag <FILES>: Comma-separated list of files to use as RAG context-k, --rag-top-k <N>: Number of RAG chunks to retrieve (default: 3)-p, --pretty: Enable markdown rendering with syntax highlightingExamples:
aj ask "What is HNSW?"
aj ask -t simple_question "Explain Rust lifetimes"
aj ask -s my-session "Remember this: I like pizza"
aj ask -o "What's the weather?" # Ignores session from config
aj ask -r docs.txt,notes.md -k 5 "Summarize the key points"
aj ask -p "Explain this code" # Pretty markdown output
aj ask -r docs/ -p -s project "What does this project do?"

Talk with the AI in an interactive REPL:
aj interactive
Supports memory via the vector store, so it won't immediately forget your name. (Unlike your barista.)
Colors:
<think> tags) appears in dark grayOptions:
-t, --template <NAME>: Use a specific template-s, --session <NAME>: Use a named session-r, --rag <FILES>: Comma-separated list of files for RAG context (loaded once for entire session)-k, --rag-top-k <N>: Number of RAG chunks to retrieve (default: 3)-p, --pretty: Enable markdown rendering with syntax highlighting for all responsesExamples:
aj interactive
aj interactive -s my-session
aj interactive -t reading_buddy -s book-club
aj interactive -r docs/ -p -s project # Interactive with RAG and pretty output
Start fresh by resetting the database to a pristine state:
aj reset
This drops all sessions, messages, and recreates the schema. Useful when you want a clean slate.
Aliases: aj r
Edit your config at:
~/.config/aj/config.yaml # Linux
~/Library/Application Support/com.awful-sec.aj/config.yaml # macOS
Example:
api_base: "http://localhost:1234/v1"
api_key: "CHANGEME"
model: "jade_qwen3_4b_mlx"
context_max_tokens: 8192
assistant_minimum_context_tokens: 2048
stop_words:
- "<|im_end|>\\n<|im_start|>"
- "<|im_start|>\n"
session_db_url: "/Users/you/Library/Application Support/com.awful-sec.aj/aj.db"
session_name: "default" # Set to null for no session persistence
should_stream: true # Enable streaming responses
Load documents as context for your queries:
aj ask -r document.txt "What are the main points?"
aj ask -r docs/,notes.md -k 5 "Summarize these files"
How it works:
~/.config/aj/rag_cache/ (or platform equivalent)Cache location:
~/Library/Application Support/com.awful-sec.aj/rag_cache/~/.config/aj/rag_cache/%APPDATA%\com.awful-sec\aj\rag_cache\Templates are YAML files in your config directory. Here's a baby template:
system_prompt: "You are Awful Jade, a helpful AI assistant programmed by Awful Security."
messages: []
response_format: null
pre_user_message_content: null
post_user_message_content: null
Add more, swap them in with -t <name> or --template <name>.
all-MiniLM-L6-v2 via Candle (pure Rust ML), saves to HNSW index for semantic search.Clone, hack, repeat:
git clone https://github.com/graves/awful_aj.git
cd awful_aj
cargo build
Run tests:
cargo test
PRs welcome! Bugs, docs, new templates, vector hacksβbring it on. But remember: with great power comes great YAML.
CC-BY-SA-4.0 (Creative Commons Attribution-ShareAlike 4.0 International)
Share and adapt freely, but give credit and share alike. Don't blame us when your AI remembers your browser history.
π‘ Awful Jade: bad name, good brain.