Your cracked unpaid intern for all things codebase related!
QuackStack is an interactive CLI tool that indexes your codebase using local AI embeddings and lets you ask questions about it conversationally. Perfect for understanding unfamiliar code, onboarding to new projects, or giving your AI coding assistant persistent context.
Check out the QuackStack Live demo here!
- π Zero-config - Just run
quackin any project directory - π§ Smart code parsing - Automatically extracts functions and classes
- π¬ Interactive REPL - Ask questions conversationally, stays open until Ctrl+C
- π 100% Local embeddings - No API calls for vector generation, your code stays private
- π€ AI-powered answers - Uses OpenAI, Claude, Gemini, DeepSeek, or Mistral for conversational responses
- π― Universal AI tool support - Auto-generate context for Cursor, Windsurf, Cline, Continue, and Aider
- π¦ Local database - Your code stays on your infrastructure
- π Multi-language - Supports JS/TS, Python, Go, Rust, Java, C/C++, C#, Ruby, PHP, Swift, Kotlin, and more
Check out the Frontend Repo here
npm install -g quackstack
# or
pnpm add -g quackstackgit clone https://github.com/woustachemax/quackstack.git
cd quackstack
pnpm install
pnpm build# REQUIRED: Database for storing code embeddings
QUACKSTACK_DATABASE_URL=postgresql://user:pass@host:port/dbname
# REQUIRED: Choose ONE AI provider for conversational answers
# (Embeddings are computed locally - no API calls!)
# Option 1: OpenAI (RECOMMENDED)
QUACKSTACK_OPENAI_KEY=sk-...
# Option 2: Anthropic Claude
QUACKSTACK_ANTHROPIC_KEY=sk-ant-...
# Option 3: Google Gemini (has free tier!)
QUACKSTACK_GEMINI_KEY=AIza...
# Option 4: DeepSeek (cheapest option)
QUACKSTACK_DEEPSEEK_KEY=sk-...
# Option 5: Mistral AI
QUACKSTACK_MISTRAL_KEY=...npx prisma generate
npx prisma db pushquack
# Answer appears with context
# Press Ctrl+C to exitquack --context
# Creates context files for:
# - Cursor (.cursorrules)
# - Windsurf (.windsurfrules)
# - Cline (.clinerules)
# - Continue (.continue/context.md)
# - Aider (.aider.conf.yml)
# Your AI coding assistants automatically read these files!quack --watch
# Watches for file changes
# Auto-regenerates all context files
# Keep running in background during developmentquack --reindex
# Clears old index and re-scans entire codebase$ quack
Welcome to QuackStack! π₯
π Indexing your codebase (this may take a moment)...
β
Indexing complete!
π‘ Tip: Press Ctrl+C to exit
π₯ Quack! How can I help? > how does the search function work?
The search function uses local embeddings to convert your query into a vector,
compares it against stored code embeddings using cosine similarity, ranks results,
and feeds the top matches to the AI for a conversational answer.
Implementation is in src/commands/search.ts
π‘ Want more details? (y/n) > y
π Relevant Code:
[1] src/commands/search.ts (relevance: 87.3%)
export async function search(query: string, projectName: string) {
const snippets = await client.codeSnippet.findMany({
where: { projectName },
});
// ... cosine similarity ranking ...
}
π₯ Quack! How can I help? > where are embeddings generated?
Embeddings are generated locally using the local-embeddings module.
No API calls are made for vector generation, keeping your code private.
π‘ Want more details? (y/n) > n
π₯ Quack! How can I help? > ^C
π Happy coding!- Scanning - Finds all code files (ignoring
node_modules,.git, etc.) - Parsing - Uses AST parsing to extract functions/classes from JS/TS
- Chunking - Breaks code into logical chunks
- Local Embedding - Generates vector embeddings locally (no API calls!)
- Storage - Saves to your PostgreSQL/Neon database
- Search - Semantic search using cosine similarity + AI-powered conversational answers
- Context switching - Quickly understand projects you haven't touched in months
- Onboarding - New team members can ask questions instead of reading docs
- Code archaeology - Find implementations without grepping
- AI coding assistants - Give Cursor/Windsurf/Cline/Continue/Aider persistent codebase context
- Documentation - Auto-generate explanations of how things work
- Privacy-focused - All embeddings generated locally, no code sent to embedding APIs
| Command | Description |
|---|---|
quack |
Start interactive REPL (auto-indexes first time) |
quack --context |
Generate context files for ALL AI coding tools |
quack --watch |
Watch mode - auto-update context on file changes |
quack --reindex |
Force reindex the entire codebase |
quack --cursor |
[DEPRECATED] Use --context instead |
| Provider | Used For | Cost | Privacy | Setup |
|---|---|---|---|---|
| Local | Embeddings | FREE | π 100% Private | Built-in |
| OpenAI | Chat answers | $$ | Query only | Get key |
| Anthropic | Chat answers | $$$ | Query only | Get key |
| Gemini | Chat answers | FREE | Query only | Get key |
| DeepSeek | Chat answers | $ | Query only | Get key |
| Mistral | Chat answers | $$ | Query only | Get key |
Privacy Note: QuackStack generates embeddings locally on your machine. Only your natural language queries and retrieved code context are sent to the AI provider for generating conversational answers. Your entire codebase is never sent to any API.
model codeSnippet {
id Int @id @default(autoincrement())
content String
embedding Json // Stored as JSON array of numbers
filePath String
projectName String
language String?
functionName String?
lineStart Int?
lineEnd Int?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([projectName])
}Each project is isolated by projectName (uses current directory name).
JavaScript, TypeScript, Python, Go, Rust, Java, C, C++, C#, Ruby, PHP, Swift, Kotlin, Scala, R, Vue, Svelte
git clone https://github.com/woustachemax/quackstack.git
cd quackstack
pnpm install
pnpm build
# Run locally
node dist/cli.cjs
node dist/cli.cjs --context
node dist/cli.cjs --watch- Local embeddings (no API calls!)
- Support for all major AI coding assistants
- VS Code extension
- Official Cursor plugin
- Export Q&A sessions as markdown docs
- Add filtering by file type, date range, author
- Support for code diffs and change tracking
- Team collaboration features
- Self-hosted web UI
Contributions welcome! Feel free to:
- Report bugs via GitHub Issues
- Submit feature requests
- Open pull requests
MIT
Privacy First: Embeddings are generated locally - your code never leaves your machine during indexing.
Gemini Free Tier: Start with Google Gemini for chat responses - it's free and works great for most use cases.
Universal Context: Run quack --context once to generate context files for ALL major AI coding tools at once.
Background Watcher: Run quack --watch & in the background to keep context always fresh across all your AI tools.
Multiple Projects: Each project gets its own namespace in the database. Just run quack in different directories.
Large Codebases: First index might take a few minutes. After that, only changed files are re-indexed.
No Vendor Lock-in: Unlike other tools, QuackStack works with Cursor, Windsurf, Cline, Continue, and Aider - choose your favorite!