Skye is a small CLI assistant built with PydanticAI. The rebuild is moving Skye from a narrow demo agent into a general-purpose command-line assistant that can answer natural-language requests, search the web through the model provider, and work with files inside a local sandboxed workspace.
Implemented:
- PydanticAI agent named
Skye - OpenRouter-backed model configuration through
OPENROUTER_API_KEY - Rich-powered interactive CLI loop
- In-session conversation history via
result.all_messages() - Sandboxed file tools:
write_fileread_fileget_cwd
fetch_pageweb fetch/extraction tool usingtrafilatura- Workspace path protection that rejects absolute paths and path traversal outside
./workspace - PydanticAI
WebSearchcapability enabled on the agent
Scaffolded or planned:
make_dirandlist_dirtools- Cross-session memory with Chroma
- Rich streaming/status polish for tool calls
- History trimming for long sessions
- Open-source release polish, including
.env.example, tests, license, and contribution docs
src/
main.py # Interactive CLI entry point
agent/
core.py # Skye agent definition and model/provider setup
deps.py # Runtime dependencies passed into tools
tools/
files.py # Sandboxed workspace file tools
fetch.py # Planned fetch/extraction tools
memory_tools.py # Planned memory tools
memory/ # Planned Chroma-backed memory layer
session/ # Planned session/history helpers
ui/ # Planned Rich UI helpers
workspace/ # Files Skye is allowed to read/write at runtime
chroma_data/ # Planned local Chroma persistence
PLAN.md # Rebuild roadmap
- Python
>=3.14 uv- An OpenRouter API key
Dependencies are managed in pyproject.toml and locked in uv.lock.
Install dependencies:
uv syncCreate a .env file in the project root:
OPENROUTER_API_KEY=your_openrouter_key_hereThe current model is configured in src/agent/core.py:
model_name="~deepseek/deepseek-v4-flash-latest"Start the CLI:
uv run python src/main.pyYou will get a prompt like:
User:
Try requests such as:
Write a short note in notes/hello.txt
Read notes/hello.txt back to me
Search the web for recent Python packaging news and summarize it
Skye's file tools resolve all paths against ./workspace.
Allowed examples:
notes/hello.txt
research/top-10-richest/person-01.md
Rejected examples:
C:\Users\HP\secret.txt
/etc/passwd
../../outside-workspace.txt
This keeps agent-written files contained to the project workspace.
The next practical steps are:
- Add
make_dirandlist_dirto complete the basic file-tool set. - Implement
fetch_pageinsrc/tools/fetch.pyusingtrafilatura. - Register fetch and memory tools from the CLI entry point.
- Add a populated
.env.example. - Add focused tests for workspace path safety.
- Add Chroma-backed
remember_factand top-k recall injection once core search/fetch workflows are stable.
This repo is still in an early rebuild phase. The README reflects the current code rather than the full intended product, so planned modules may exist as empty scaffolds until their checkpoint is implemented.