Skip to main content

CodeLoop

CodeLoop

Provider-agnostic terminal coding agent — point it at a JSON file, not a vendor SDK.

PyPI Python Tests License Stars


Documentation: https://dotflow-io.github.io/pycodeloop/

Source Code: https://github.com/dotflow-io/pycodeloop


CodeLoop is a terminal coding agent, in the shape of Claude Code, Codex, or Gemini CLI — except it isn't tied to any one of them. Point it at a plain JSON config and give it a prompt: it drives a tool-use loop (read, write, edit, grep, bash, git, web fetch) against your codebase until the task is done, streaming its reasoning to your shell the whole way.

The key features are:

  • Provider-agnostic: Anthropic, OpenAI, Ollama, LM Studio, or any OpenAI-compatible endpoint — swapping models means swapping a JSON file, never touching code. GenericProvider talks HTTP directly, no vendor SDK required.
  • Fast to start: one pip install, one JSON file, one prompt. No boilerplate, no framework to learn first.
  • Safe by default: every write, edit, delete, shell command, commit, or HTTP call shows a diff or command preview and waits for your OK before running.
  • Full-screen chat: bare pycodeloop drops you into a Textual-based terminal UI; pycodeloop run stays scriptable for CI and one-shot use.
  • Skills-aware: auto-discovers SKILL.md/CLAUDE.md, .cursorrules, and AGENTS.md files already on disk and hands them to the agent.
  • MCP-ready: connect any Model Context Protocol server over stdio with one flag; its tools show up alongside the built-in ones.
  • Sessions that persist: conversations survive process restarts and can be resumed from a menu.
  • Also a library: embed the same agent loop in your own app — see the docs for the Config, Agent, and Tool APIs.
  • Editor integration: a VS Code extension (vscode-extension/) puts the same agent in a sidebar panel.

Requirements

Python 3.10+

Installation

pip install pycodeloop

Example

Set your key and point at a ready-made provider template:

export ANTHROPIC_API_KEY=sk-ant-...
pycodeloop run "list the files in this repo and summarize the project" \
  --provider templates/anthropic.json

Or drop into the full-screen chat instead of one-shot mode:

pycodeloop --provider templates/anthropic.json

Set it once as the default so you stop passing --provider every time:

export PYCODELOOP_PROVIDER=templates/anthropic.json
pycodeloop

Switch providers

Every backend is the same JSON shape — templates/ ships one per vendor:

pycodeloop run "..." --provider templates/anthropic.json   # Claude
pycodeloop run "..." --provider templates/openai.json      # GPT
pycodeloop run "..." --provider templates/ollama.json      # local, no key needed
pycodeloop run "..." --provider templates/lmstudio.json    # local, no key needed

Point it at any OpenAI-compatible HTTP endpoint by writing your own JSON — see docs/examples/provider.example.json and the JSON provider guide. No Python required to add a new backend.

More CLI flags

# Override provider/model per invocation
pycodeloop run "..." --provider templates/openai.json --model gpt-5

# Skip confirmation prompts for dangerous tools
pycodeloop run "..." --yes

# Connect an MCP server, one flag per server
pycodeloop run "list every allowed directory" \
  --mcp "npx -y @modelcontextprotocol/server-filesystem ."

# Skip skills auto-discovery
pycodeloop run "..." --no-skills

The CLI streams the model's text as it arrives, reports token usage after every turn, and caches discovered skills in ~/.pycodeloop/config.json until something changes (--skills-refresh bypasses that).

Tools

Ships with the actions an agent needs to actually change code:

Tool Purpose
read_file Read a file, optionally a line range
write_file Create or overwrite a file
edit_file Replace an exact substring in a file
delete_file Delete a file
list_dir List a directory
glob Find files matching a glob pattern
grep Regex search across files
bash Run a shell command with a timeout
web_fetch Fetch a URL and extract its text
http_request Call a JSON HTTP API — any method, headers, body
git_status Show the working tree status
git_diff Show unstaged or staged changes
git_log Show recent commit history
git_commit Stage and commit changes
env Read environment variables (secrets masked)
todo Track a checklist across turns in a session

write_file, edit_file, delete_file, bash, git_commit, http_request, and every MCP tool are marked dangerous and gated behind confirmation.

Commit Style

Icon Type Description
⚙️ FEATURE New feature
📝 PEP8 Formatting fixes following PEP8
📌 ISSUE Reference to issue
🪲 BUG Bug fix
📘 DOCS Documentation changes
📦 PyPI PyPI releases
❤️️ TEST Automated tests
⬆️ CI/CD Changes in continuous integration/delivery
⚠️ SECURITY Security improvements

License

This project is licensed under the terms of the MIT License.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pycodeloop-0.2.0.tar.gz (48.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pycodeloop-0.2.0-py3-none-any.whl (69.8 kB view details)

Uploaded Python 3

File details

Details for the file pycodeloop-0.2.0.tar.gz.

File metadata

  • Download URL: pycodeloop-0.2.0.tar.gz
  • Upload date:
  • Size: 48.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pycodeloop-0.2.0.tar.gz
Algorithm Hash digest
SHA256 ed034ffe0c6d092626439105bed00ffa95fc25913a025161f66c711ef83a62fe
MD5 0c4e3187b266c325d83e2878ce75bdc4
BLAKE2b-256 1ac95590c3ab9ecf2ae268d13080256d412e2073898d0def1080c2c9274e88b7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pycodeloop-0.2.0.tar.gz:

Publisher: python-publish-pypi.yml on dotflow-io/pycodeloop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pycodeloop-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: pycodeloop-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 69.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pycodeloop-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e426367122ca88b70c04754e18fa7daa98da2d2676501edecc42f3a7dcc63a7e
MD5 89bc2174fab788eb262d6b13994a4140
BLAKE2b-256 dcc6cedbb7a3faf9bc90df62a398a7ce2b15ef73d73bd6ffd9e8512ce17715ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for pycodeloop-0.2.0-py3-none-any.whl:

Publisher: python-publish-pypi.yml on dotflow-io/pycodeloop

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page