Autonomous coding agent — local-first, RAG-aware multi-agent CLI
Project description
EduCode Agent
Repository: github.com/3eyedtech-creator/educode-agent
EduCode is a local-first, RAG-aware coding agent CLI. Open any project folder, run educode, and work with your codebase through natural language — ask questions, generate changes, debug failures, and run validation tasks.
It works similarly to Claude Code: the agent indexes your repository, understands context via semantic search, and uses a multi-agent supervisor (planner, coder, reviewer, runner) with human approval before mutating files.
Prerequisites
Before using EduCode, make sure you have:
| Requirement | Details |
|---|---|
| Python | 3.11 or newer |
| OpenAI API key | Required for LLM calls and embeddings (OPENAI_API_KEY) |
| Git | Recommended (diffs, project workflows); not strictly required for basic use |
| Internet | Required for OpenAI API calls during chat/run |
Optional:
| Variable | Purpose |
|---|---|
LANGCHAIN_API_KEY |
LangSmith tracing (smith.langchain.com) |
TAVILY_API_KEY |
Web search (when wired in future releases) |
QDRANT_URL |
Remote Qdrant; omit to use embedded local storage |
No Docker or separate vector database install is needed — Qdrant runs embedded locally.
Installation
End users (PyPI) — recommended
Install from PyPI with pip:
pip install educode-agent
PyPI normalizes names, so this also works:
pip install educode_agent
For an isolated CLI install (recommended, like Claude Code):
pipx install educode-agent
Verify the educode command is available:
educode --version
If educode is not found, ensure your Python scripts directory is on PATH:
| Platform | Typical scripts location |
|---|---|
| Linux / macOS | ~/.local/bin |
| Windows | %APPDATA%\Python\Python3xx\Scripts |
Then open any project folder and start the agent:
cd /path/to/your-project
educode
That launches the interactive chat session (same as educode chat).
From source (developers)
git clone https://github.com/3eyedtech-creator/educode-agent.git
cd educode-agent
poetry install
Verify the CLI:
poetry run educode --version
Environment setup
- Copy the example env file:
cp .env.example .env
- Add your OpenAI key to
.envor export it in your shell:
# Linux / macOS
export OPENAI_API_KEY=sk-your-key-here
# Windows PowerShell
$env:OPENAI_API_KEY = "sk-your-key-here"
- (Optional) Set user-level EduCode home — defaults to
~/.educode/:
export EDUCODE_HOME=~/.educode
Quickstart (use in any project)
# 1. Go to your project
cd /path/to/your-project
# 2. One-time setup: create .educode/ and index the codebase
educode init
# 3. Start interactive session (same as `educode chat`)
educode
After init, you should see a header with repo, model, and index info, then:
Ready. Run: educode chat
First-time shortcut
If you skip init, the first educode or educode chat run will auto-initialize the project and index the repository.
Daily usage
Interactive chat (recommended)
cd /path/to/your-project
educode
Or explicitly:
educode chat
Inside the REPL:
| Input | Action |
|---|---|
| Your question or task | Agent searches codebase, reads files, responds or proposes edits |
/status |
Show current thread_id and model |
/exit or /quit |
End session |
Ctrl+C |
Pause; prints resume command with --thread-id |
Example prompts:
Where is user authentication handled?Add input validation to the login endpointWhy is tests/test_users.py failing? Run tests and fix the issue.
One-shot task
Run a single task and exit:
educode run "add pagination to the /users endpoint"
Resume a previous session
Sessions are persisted with a thread_id (Sqlite checkpointer). Resume with:
educode chat --thread-id <your-thread-id>
educode run --thread-id <your-thread-id> "continue previous task"
Global CLI options
These apply to all commands:
educode [OPTIONS] COMMAND [ARGS]...
Options:
--version Show version and exit
-v, --verbose Enable DEBUG logging
--model TEXT Override model (e.g. openai:gpt-4o-mini)
--repo DIRECTORY Project root (default: current directory)
Examples:
educode --repo ~/projects/my-api chat
educode --model openai:gpt-4o-mini run "refactor auth middleware"
educode -v chat
Project initialization (educode init)
Creates local EduCode state in your repository:
your-project/
├── src/
└── .educode/
├── config.yaml # per-project settings
├── rag_manifest.json # indexed file hashes
├── sessions.db # session metadata
└── tasks/ # per-thread checkpoint DBs
init also adds .educode/ to .gitignore when possible.
educode init # full init + codebase indexing
educode init --skip-index # config only, no indexing
Indexing walks your repo (skips node_modules, .venv, __pycache__, etc.), chunks source files, embeds them, and stores vectors in local Qdrant.
Configuration
Project config (.educode/config.yaml)
educode config show
educode config set model=openai:gpt-4o-mini
educode config set token_budget=250000
educode config set auto_approve=false
Common keys:
| Key | Description | Default |
|---|---|---|
model |
LLM model identifier | openai:gpt-4o |
token_budget |
Project token budget | 500000 |
auto_approve |
Skip approval prompts for mutating tools | false |
active_skill |
Active skill name (optional) | none |
strict_api_keys |
Require API keys at startup | true |
User config (~/.educode/config.yaml)
User-level settings override defaults and are merged before project config. Use the same keys as project config.
Human approval (safety)
Before writing files or running terminal commands, EduCode asks for approval unless auto_approve=true:
Approve changes? [y/n]
Use y to approve, n to reject. For production work, keep auto_approve=false.
How it works (high level)
- Index —
educode initchunks and embeds your codebase into local Qdrant. - Retrieve — During chat/run, the agent calls
search_codebaseto find relevant code. - Plan & execute — A supervisor delegates to planner, coder, reviewer, and runner sub-agents.
- Persist — Conversation state is checkpointed per
thread_idfor multi-turn sessions and resume.
Troubleshooting
OPENAI_API_KEY is required
Set the key in your environment or .env:
export OPENAI_API_KEY=sk-...
Or run init/chat with project config strict_api_keys=false (not recommended for production).
Agent does not know my codebase
Re-index the project:
educode init
Ensure files are not in ignored directories (node_modules, .venv, etc.).
Wrong project directory
Pass --repo explicitly:
educode --repo /absolute/path/to/project chat
Verbose logs for debugging
educode -v chat
Development
See DEVELOPMENT.md for copy-paste commands to test locally, verify PyPI releases, and publish new versions.
Quick start:
poetry install --with dev
poetry run pytest tests/unit
poetry run educode --model mock:loop run "test task"
License
MIT — see LICENSE.
Publishing to PyPI (maintainers)
One-time PyPI setup
- Create an account at pypi.org.
- Register the project name
educode-agenton PyPI (first upload claims it). - Enable Trusted Publishing on PyPI for this GitHub repo (recommended):
- PyPI project → Publishing → Add GitHub Actions publisher
- Repository:
3eyedtech-creator/educode-agent - Workflow:
release.yml - Environment name:
pypi
- In GitHub repo Settings → Environments, create environment
pypi(used by the release workflow).
Release a new version
# 1. Bump version in pyproject.toml and src/educode_agent/__init__.py
poetry version patch # or minor / major
# 2. Sync __init__.py version manually to match pyproject.toml
# 3. Commit, tag, and push
git add pyproject.toml src/educode_agent/__init__.py
git commit -m "chore(release): bump version to $(poetry version -s)"
git tag "v$(poetry version -s)"
git push origin main --tags
Pushing a v*.*.* tag triggers .github/workflows/release.yml, which runs tests, builds the wheel/sdist, publishes to PyPI, and creates a GitHub Release.
Verify locally before publishing
poetry build
pip install dist/educode_agent-*.whl
educode --version
cd /path/to/a/test/project
educode init --mock-index
educode --model mock:loop run "smoke test"
Manual publish (without GitHub Actions)
poetry build
poetry publish # requires PYPI_API_TOKEN configured
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file educode_agent-0.1.1.tar.gz.
File metadata
- Download URL: educode_agent-0.1.1.tar.gz
- Upload date:
- Size: 33.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4c46dd653f391f79623042e1dbfc50c9cd85a5c4638bf7389b2085744393944f
|
|
| MD5 |
6fc3a87756a1f2784aa0d4267edfd69d
|
|
| BLAKE2b-256 |
b786b19b2838d6dcf4045502816d3f855bc8546a335290e93b98a8fb0bcfa24b
|
Provenance
The following attestation bundles were made for educode_agent-0.1.1.tar.gz:
Publisher:
release.yml on 3eyedtech-creator/educode-agent
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
educode_agent-0.1.1.tar.gz -
Subject digest:
4c46dd653f391f79623042e1dbfc50c9cd85a5c4638bf7389b2085744393944f - Sigstore transparency entry: 1929021923
- Sigstore integration time:
-
Permalink:
3eyedtech-creator/educode-agent@242a90d8d93705f6e599eab4f1aeea6c2cd7a1f0 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/3eyedtech-creator
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@242a90d8d93705f6e599eab4f1aeea6c2cd7a1f0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file educode_agent-0.1.1-py3-none-any.whl.
File metadata
- Download URL: educode_agent-0.1.1-py3-none-any.whl
- Upload date:
- Size: 49.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a3225c20da323aa275b5c0c7c6597f0936acbe10f13ba7410d9fc1a566ccfcb5
|
|
| MD5 |
1a5cd89bfd46706cfb9d0c9bc3ffd7db
|
|
| BLAKE2b-256 |
3191fdfa2a1597ec8197bb270e0f15f16852fd560b53f2cbcff65169b8a6c3ab
|
Provenance
The following attestation bundles were made for educode_agent-0.1.1-py3-none-any.whl:
Publisher:
release.yml on 3eyedtech-creator/educode-agent
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
educode_agent-0.1.1-py3-none-any.whl -
Subject digest:
a3225c20da323aa275b5c0c7c6597f0936acbe10f13ba7410d9fc1a566ccfcb5 - Sigstore transparency entry: 1929022003
- Sigstore integration time:
-
Permalink:
3eyedtech-creator/educode-agent@242a90d8d93705f6e599eab4f1aeea6c2cd7a1f0 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/3eyedtech-creator
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@242a90d8d93705f6e599eab4f1aeea6c2cd7a1f0 -
Trigger Event:
push
-
Statement type: