Metadata-Version: 2.4
Name: gdmcode
Version: 0.1.1
Summary: gdm: AI coding agent for professional developers
Project-URL: Homepage, https://github.com/guidegdm/gdmcode
Project-URL: Repository, https://github.com/guidegdm/gdmcode
Project-URL: Bug Tracker, https://github.com/guidegdm/gdmcode/issues
Project-URL: Documentation, https://github.com/guidegdm/gdmcode#readme
Project-URL: Changelog, https://github.com/guidegdm/gdmcode/blob/main/CHANGELOG.md
License: MIT
Keywords: ai,coding-agent,developer-tools,llm
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Code Generators
Classifier: Topic :: Utilities
Requires-Python: >=3.11
Requires-Dist: httpx>=0.27.0
Requires-Dist: keyring>=25.0.0
Requires-Dist: markdownify>=0.12.0
Requires-Dist: openai>=1.30.0
Requires-Dist: pathspec>=0.12.0
Requires-Dist: prompt-toolkit>=3.0.43
Requires-Dist: pydantic>=2.7.0
Requires-Dist: requests>=2.32.0
Requires-Dist: rich>=13.7.0
Requires-Dist: tiktoken>=0.7.0
Requires-Dist: tomli-w>=1.0.0
Requires-Dist: tree-sitter-javascript>=0.23.0
Requires-Dist: tree-sitter-python>=0.23.0
Requires-Dist: tree-sitter-typescript>=0.23.0
Requires-Dist: tree-sitter>=0.23.0
Requires-Dist: typer>=0.12.0
Requires-Dist: websockets>=12.0
Provides-Extra: all
Requires-Dist: cryptography>=42.0.0; extra == 'all'
Requires-Dist: faiss-cpu>=1.8.0; extra == 'all'
Requires-Dist: itsdangerous>=2.2.0; extra == 'all'
Requires-Dist: numpy>=1.26.0; extra == 'all'
Requires-Dist: openpyxl>=3.1.0; extra == 'all'
Requires-Dist: pdfplumber>=0.11.0; extra == 'all'
Requires-Dist: playwright>=1.44.0; extra == 'all'
Requires-Dist: python-docx>=1.1.0; extra == 'all'
Requires-Dist: qrcode>=7.4.0; extra == 'all'
Requires-Dist: sounddevice>=0.4.6; extra == 'all'
Requires-Dist: starlette>=0.37.0; extra == 'all'
Requires-Dist: uvicorn>=0.29.0; extra == 'all'
Requires-Dist: webrtcvad>=2.0.10; extra == 'all'
Requires-Dist: websockets>=12.0; extra == 'all'
Requires-Dist: xlrd>=2.0.1; extra == 'all'
Provides-Extra: browser
Requires-Dist: playwright>=1.44.0; extra == 'browser'
Requires-Dist: websockets>=12.0; extra == 'browser'
Provides-Extra: dev
Requires-Dist: cryptography>=42.0.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
Requires-Dist: pytest-cov>=5.0.0; extra == 'dev'
Requires-Dist: pytest-mock>=3.14.0; extra == 'dev'
Requires-Dist: pytest>=8.2.0; extra == 'dev'
Requires-Dist: pyyaml>=6.0.0; extra == 'dev'
Requires-Dist: qrcode>=7.4.0; extra == 'dev'
Provides-Extra: docs
Requires-Dist: openpyxl>=3.1.0; extra == 'docs'
Requires-Dist: pdfplumber>=0.11.0; extra == 'docs'
Requires-Dist: python-docx>=1.1.0; extra == 'docs'
Requires-Dist: xlrd>=2.0.1; extra == 'docs'
Provides-Extra: evals
Requires-Dist: bandit[toml]>=1.7.0; extra == 'evals'
Requires-Dist: cryptography>=42.0.0; extra == 'evals'
Requires-Dist: datasets>=2.20.0; extra == 'evals'
Requires-Dist: docker>=7.1.0; extra == 'evals'
Requires-Dist: jinja2>=3.1.0; extra == 'evals'
Requires-Dist: mypy>=1.10.0; extra == 'evals'
Requires-Dist: pandas>=2.2.0; extra == 'evals'
Requires-Dist: pyyaml>=6.0.0; extra == 'evals'
Requires-Dist: ruff>=0.4.0; extra == 'evals'
Requires-Dist: swebench>=3.0.0; extra == 'evals'
Provides-Extra: faiss
Requires-Dist: faiss-cpu>=1.8.0; extra == 'faiss'
Provides-Extra: mobile
Provides-Extra: plugin-dev
Requires-Dist: build>=1.2; extra == 'plugin-dev'
Requires-Dist: twine>=5.0; extra == 'plugin-dev'
Provides-Extra: remote
Requires-Dist: itsdangerous>=2.2.0; extra == 'remote'
Requires-Dist: qrcode>=7.4.0; extra == 'remote'
Requires-Dist: starlette>=0.37.0; extra == 'remote'
Requires-Dist: uvicorn>=0.29.0; extra == 'remote'
Requires-Dist: websockets>=12.0; extra == 'remote'
Provides-Extra: sentry
Requires-Dist: fastapi>=0.111; extra == 'sentry'
Requires-Dist: httpx>=0.27; extra == 'sentry'
Requires-Dist: uvicorn[standard]>=0.29; extra == 'sentry'
Provides-Extra: voice
Requires-Dist: numpy>=1.26.0; extra == 'voice'
Requires-Dist: sounddevice>=0.4.6; extra == 'voice'
Requires-Dist: webrtcvad>=2.0.10; extra == 'voice'
Description-Content-Type: text/markdown

# gdm — AI Coding Agent

A terminal-native coding agent that reads your codebase, reasons over it, and edits files autonomously — with configurable autonomy, local model support, and a full audit trail.

![Build status](https://img.shields.io/badge/build-passing-brightgreen) ![PyPI](https://img.shields.io/badge/pypi-gdm--code-blue) ![License: MIT](https://img.shields.io/badge/license-MIT-green)

---

## ⚡ Quick start (30 seconds)

```bash
pipx install gdmcode
gdm version
gdm health
cd my-project && gdm "fix the login bug"
```

See [docs/quick-start.md](docs/quick-start.md) for a step-by-step walkthrough.

---

## Why gdm?

- **Local-model support** — run fully air-gapped with Ollama or vLLM; no data leaves your machine.
- **Autonomy slider** — five levels from "ask everything" to "fully autonomous"; start low, build trust.
- **Transparent and controllable** — explicit provider/model controls, hash-chained audit log, team policy enforcement.

---

## Feature status

Reality-checked against `docs/tasks-v2`.

| Feature | Status | Task(s) |
|---|---|---|
| Multi-model routing (Grok / Gemini / DeepSeek / Codex) | ✅ implemented | models-001/002/005 |
| Local model support — Ollama / vLLM | 🚧 in progress | models-003 |
| Cost tracking and budget caps | ✅ implemented | runtime-005 |
| Session checkpoint / restore | ✅ implemented | core-002/003 |
| Audit log with hash chain | ✅ implemented | enterprise-002 |
| Team configuration and policy | ✅ implemented | enterprise-001 |
| Web search (debug / research) | ✅ implemented | tools-003 |
| Code index + whole-codebase mode | ✅ implemented | memory-001/005 |
| Git workflow automation | ✅ implemented | autonomous-003 |
| Verification loop | 🚧 in progress | autonomous-002 |
| Self-healing debug loop | 🚧 in progress | autonomous-004 |
| Multi-file orchestration | 🚧 in progress | autonomous-001 |
| Impact analysis gate | 🚧 in progress | autonomous-005 |
| Autonomy slider — 5 levels | 🚧 in progress | ide-004 |
| VS Code extension | ✅ implemented | ide-001/002/003 |
| Voice interface (PTT + streaming) | 🚧 in progress | voice-001/002/003 |
| Remote / LAN server + phone UI | 🚧 in progress | remote-001/002/003 |
| Chrome extension + bridge | 🚧 in progress | extensions-002 |
| MCP protocol server | 🚧 in progress | integrations-003 |
| GitHub Actions CI integration | ✅ implemented | integrations-001 |
| Playwright browser automation | 🚧 in progress | tools-002 |
| Sub-agent parallel execution | ✅ implemented | tools-005 |
| RBAC (role-based access control) | 📋 planned | enterprise-003 |
| Usage analytics dashboard | 📋 planned | enterprise-004 |
| Hermetic sandbox | ✅ implemented | moonshot-002 |
| Patch risk scoring | 🚧 in progress | moonshot-006 |
| Impact graph smart test selection | 🚧 in progress | moonshot-007 |
| CI eval pipeline | 🚧 in progress | evals-002 |
| Continuous memory | 🚧 in progress | memory-003 |
| Proxy/relay mode (geo-restricted regions) | ✅ implemented | proxy-001 |
| OIDC identity integration | 📋 planned | — |

---

## Installation

**Prerequisite:** Python 3.11+ and pip
```bash
python --version
python -m pip --version
```

**Recommended (isolated environment):**
```bash
pipx install gdmcode
```

**pip:**
```bash
pip install gdmcode
```

**Development install:**
```bash
git clone https://github.com/GedeonMatabaro/gdmcode
cd gdmcode
pip install -e ".[dev]"
gdm health
```

**Note:** The PyPI package is `gdmcode`. The command is `gdm`.

---

## Configuration

gdm uses a 7-layer precedence system (highest wins):

```
CLI flags > env vars (GDM_*) > team policy > team preferences
         > project .gdm/config.toml > user ~/.config/gdm/config.toml > defaults
```

Quick setup:
```bash
gdm login grok        # or: gemini | deepseek | codex | all
gdm models            # list exact provider/tier -> model IDs
gdm --provider deepseek --model reasoner code
```

Secrets are stored in the OS keychain — never in TOML files.

Full configuration reference: [docs/configuration.md](docs/configuration.md)

---

## Enterprise

gdm includes audit and governance features suitable for team deployment:

- **Audit log** — every tool call is logged with a hash chain for tamper detection.
- **Team policy** — `.gdm/team.toml` enforces autonomy caps, network allowlists, and git permissions.
- **RBAC** — planned (enterprise-003).

See [docs/security-hardening.md](docs/security-hardening.md) for deployment guidance.

---

## Architecture

gdm runs a tool-calling agent loop: the model receives a task, selects tools from a registered
registry, executes them (subject to injection checks, RBAC, and network policy), and writes the
results back into context. Sessions are checkpointed to SQLite; memory is indexed for whole-codebase
reasoning.

Full architecture diagram: [docs/architecture.md](docs/architecture.md)

---

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md). Issues and PRs welcome.

---

## License

MIT — Copyright GedeonMatabaro
