AI Agent running locally via Ollama — no API keys, no cloud, fully private — backed by a multi-agent orchestration system for GitHub Copilot.
A general-purpose chat agent with an agentic tool-use loop. It can:
- Run shell commands — list files, search, inspect system state
- Read & write files — view or create files on disk
- Do math — evaluate mathematical expressions
- Search the web — query DuckDuckGo for information
- Get current time — UTC datetime
- Roast the agents — deliver brutal but hilarious roasts of the AI agent team
The agent autonomously decides when to use tools, chains multiple tool calls, and returns a final answer.
A suite of specialized agents accessible via main.py:
python main.py # Interactive agent router
python main.py readme # Generate AI-powered README
python main.py whisper # Commit Whisperer narration
python main.py visualize # Chaos Visualizer dashboard
python main.py review [file] # AI Code Reviewer
python main.py sql [query] # Natural language → SQL
python main.py router # Interactive agent router
python main.py swarm # Agent-to-agent communication| Agent | Command | Purpose |
|---|---|---|
| Router | python main.py |
AI intent classifier — routes requests to the right agent |
| Repo Copilot | python main.py readme |
Analyzes repo structure, generates README |
| Commit Whisperer | python main.py whisper |
Narrates recent git activity with flair |
| Chaos Visualizer | python main.py visualize |
Git history stats and contributor dashboard |
| Code Reviewer | python main.py review <file> |
AI-powered code review with feedback |
| SQL Generator | python main.py sql "<query>" |
Natural language to SQL with explanations |
| Swarm | python main.py swarm |
Inter-agent communication and orchestration |
Bonus utilities:
python vibe_oracle.py # 🔮 Consult the Vibe Oracle
python swarm_mascot.py # 🐝 Display the swarm mascotA seven-agent orchestration system built on GitHub Copilot, following IDEO Design Thinking methodology:
| Agent | Role | Purpose |
|---|---|---|
| Beth | Orchestrator | Routes work, spawns subagents, manages workflows |
| Product Manager | Strategist | PRDs, user stories, RICE prioritization, success metrics |
| Researcher | Intelligence | User/market research, competitive analysis, synthesis |
| UX Designer | Architect | Component specs, design tokens, accessibility, wireframes |
| Developer | Builder | React/TypeScript/Next.js implementation, shadcn/ui |
| Security Reviewer | Bodyguard | OWASP audits, threat modeling, compliance checks |
| Tester | Enforcer | QA, accessibility audits, performance testing |
Agents are defined in .github/agents/ and leverage domain-specific skills from .github/skills/.
| Skill | Triggers |
|---|---|
| PRD Generation | "create a prd", "product requirements" |
| Framer Components | "framer component", "property controls" |
| Vercel React Best Practices | React/Next.js performance work |
| Web Design Guidelines | "review my UI", "check accessibility" |
| shadcn/ui Components | "shadcn", "ui component" |
| Security Analysis | "security review", "OWASP", "threat model" |
@Beth → analyzes request → routes to specialist agents
├── @product-manager → defines WHAT to build
├── @researcher → validates user needs
├── @ux-designer → designs HOW it works
├── @developer → implements in React/TypeScript
├── @security-reviewer → audits for vulnerabilities
└── @tester → verifies quality
# Linux / WSL
curl -fsSL https://ollama.com/install.sh | sh
# macOS — or download from https://ollama.com
brew install ollama# Recommended: good quality + tool-calling support
ollama pull qwen2.5:7b
# Other options:
# ollama pull llama3.1:8b
# ollama pull mistral:7b
# ollama pull qwen2.5:14b (needs ~10GB RAM)python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txtcp .env.example .env
# Edit .env to change model or Ollama URL| Variable | Description | Default |
|---|---|---|
OLLAMA_BASE_URL |
Ollama server URL | http://localhost:11434 |
OLLAMA_MODEL |
Model name | qwen2.5:7b |
# Make sure Ollama is running (it auto-starts on macOS, or: ollama serve)
python agent.pyThe agent system works automatically in VS Code with GitHub Copilot. Invoke agents with:
@Beth Plan a feature for [description]
@product-manager Create a PRD for [feature]
@developer Implement [component/feature]
@tester Write tests for [component]
# Core CLI
agent.py — Interactive chat agent with tool loop
main.py — CLI toolkit entry point
tools.py — Tool registry (security-hardened)
config.py — Unified LLM config (Ollama/Azure/OpenAI)
# CLI Toolkit Agents
agents/
├── router.py — Intent classifier + agent router
├── swarm.py — Agent-to-agent communication
├── repo_copilot.py — AI README generator
├── commit_whisperer.py — Git history narrator
├── chaos_visualizer.py — Git stats dashboard
├── code_reviewer.py — AI code review
└── sql_generator.py — Natural language → SQL
# Fun Utilities
vibe_oracle.py — 🔮 Chaotic vibe generator
swarm_mascot.py — 🐝 ASCII art swarm mascot
# Joke Agents (standalone)
DadJokes/ — Dad joke agent
KnockKnock/ — Knock-knock joke agent
# GitHub Copilot Agents
.github/
├── agents/ — Agent definitions (7 specialists)
│ ├── beth.agent.md — Orchestrator
│ ├── developer.agent.md
│ ├── product-manager.agent.md
│ ├── ux-designer.agent.md
│ ├── researcher.agent.md
│ ├── security-reviewer.agent.md
│ └── tester.agent.md
├── skills/ — Domain knowledge modules
│ ├── prd/
│ ├── shadcn-ui/
│ ├── framer-components/
│ ├── vercel-react-best-practices/
│ ├── web-design-guidelines/
│ └── security-analysis/
└── copilot-instructions.md — Global Copilot configuration
- User sends a message
- Message history + tool definitions sent to the local model via Ollama's API
- If the model returns
tool_calls→ execute each tool, append results to history - Repeat step 2-3 until the model returns a final text response (max 15 turns)
- Display the response and wait for next input
The swarm system enables agents to communicate, delegate tasks, and coordinate:
from agents.swarm import get_swarm, Message
swarm = get_swarm()
# Send a message to a specific agent
response = swarm.send("sql_generator", Message(
from_agent="orchestrator",
content="Generate SQL for: show top 5 customers by spend",
context={"schema": "..."}
))
# Let the orchestrator route to the best agent
response = swarm.send("orchestrator", Message(
from_agent="user",
content="Review this code for security issues"
))
# Broadcast to all agents that can handle a task type
responses = swarm.broadcast(Message(
from_agent="user",
content="Analyze the project",
task_type="analysis"
))Interactive mode: python main.py swarm
| Command | Description |
|---|---|
list |
Show all registered agents |
send <agent> <msg> |
Send message to specific agent |
broadcast <msg> |
Send to all capable agents |
ask <msg> |
Let orchestrator route it |
history |
Show message history |
Add a new tool in tools.py using the @tool decorator:
@tool(
name="my_tool",
description="What the tool does",
parameters={
"type": "object",
"properties": {
"arg1": {"type": "string", "description": "..."},
},
"required": ["arg1"],
},
)
def my_tool(arg1: str) -> str:
# Your implementation
return json.dumps({"result": "..."})The tool is automatically registered and available to the agent — no other changes needed.
This project is security-hardened with multiple layers of protection:
| Protection | Implementation |
|---|---|
| No eval() | Math expressions use AST-based safe evaluator |
| Command allowlist | Only 24 safe shell commands allowed (no rm, curl, etc.) |
| Path traversal prevention | All file ops restricted to workspace directory |
| User confirmation | Dangerous tools (shell_command, write_file) require explicit approval |
| Input validation | Pydantic models validate all tool inputs |
| Audit logging | All tool executions logged with timestamps |
| Optional auth | API key authentication available for service exposure |
Set AUDIT_LOG_FILE=/path/to/audit.log to persist security logs.
See CHANGELOG.md for a full history of changes.
- Fork the repository
- Create a feature branch
- Make your changes
- Run tests (when available)
- Submit a pull request
See Backlog.md for current priorities and decisions.