Metadata-Version: 2.4
Name: yoke-harness
Version: 0.18.0
Summary: Universal LLM Native Harness — drives all models with discipline
License: MIT
Project-URL: Homepage, https://github.com/KKingsley/yoke
Project-URL: Repository, https://github.com/KKingsley/yoke
Project-URL: Issues, https://github.com/KKingsley/yoke/issues
Keywords: llm,ai,harness,claude,openai,agent,coding-assistant
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: anthropic>=0.45
Requires-Dist: openai>=1.50
Requires-Dist: google-generativeai>=0.8
Requires-Dist: rich>=13
Requires-Dist: pygments>=2.15
Requires-Dist: pydantic>=2.7
Requires-Dist: tiktoken>=0.7
Requires-Dist: textual>=0.80
Requires-Dist: mcp>=1.0
Requires-Dist: sounddevice>=0.4
Requires-Dist: faster-whisper>=1.0
Requires-Dist: httpx>=0.27
Requires-Dist: opentelemetry-sdk>=1.25
Requires-Dist: opentelemetry-api>=1.25
Provides-Extra: dev
Requires-Dist: pytest>=8; extra == "dev"
Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
Requires-Dist: pytest-cov>=5; extra == "dev"
Requires-Dist: httpx>=0.27; extra == "dev"
Provides-Extra: serve
Requires-Dist: fastapi>=0.115; extra == "serve"
Requires-Dist: uvicorn[standard]>=0.30; extra == "serve"
Requires-Dist: PyJWT>=2.8; extra == "serve"
Requires-Dist: itsdangerous>=2.2; extra == "serve"
Provides-Extra: lsp
Requires-Dist: pygls>=1.3; extra == "lsp"
Requires-Dist: lsprotocol; extra == "lsp"
Provides-Extra: provider-oauth
Requires-Dist: google-auth>=2.30; extra == "provider-oauth"
Requires-Dist: google-auth-httpx>=0.2; extra == "provider-oauth"
Dynamic: license-file

# Yoke — Universal LLM Native Harness

[![CI](https://github.com/KKingsley/yoke/actions/workflows/ci.yml/badge.svg)](https://github.com/KKingsley/yoke/actions/workflows/ci.yml)
[![PyPI version](https://badge.fury.io/py/yoke-harness.svg)](https://pypi.org/project/yoke-harness/)
[![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)

**Yoke** is a disciplined coding harness that drives any LLM — Claude, GPT, Gemini, DeepSeek, and more — through a unified interface with built-in context guards, skill system, and web UI.

Think of it as your own Claude Code, but model-agnostic and self-hosted.

---

## Quick Start

```bash
pip install yoke-harness

yoke setup        # pick your provider, enter API key
yoke serve        # open http://localhost:8765 in your browser
```

Or run in the terminal:

```bash
yoke              # interactive TUI (Textual-based)
```

---

## Supported Providers

| Provider | Models |
|----------|--------|
| **Anthropic** | Claude 3.5 Sonnet, Claude 3 Opus, … |
| **OpenAI** | GPT-4o, GPT-4 Turbo, … |
| **Google** | Gemini 1.5 Pro, Gemini Flash, … |
| **DeepSeek** | deepseek-chat, deepseek-coder |
| **Qwen (Alibaba)** | qwen-max, qwen-plus |
| **Zhipu (GLM)** | glm-4, glm-4-flash |
| **MiniMax** | abab6.5-chat |
| **Ollama** | Any local model (llama3, mistral, …) |

---

## Features

- **40+ built-in tools** — file read/write, shell exec, web fetch, grep, git, and more
- **Skill system** — install reusable prompt workflows from GitHub with `yoke skill install <url>`
- **DisciplineEngine** — enforces context budget, call limits, and session guards automatically
- **Web UI** — chat interface at `localhost:8765` with file browser and session history
- **TUI** — full terminal UI with vim keybindings, syntax highlighting, and diff view
- **MCP support** — connect any MCP server (stdio / SSE / WebSocket)
- **Voice input** — local Whisper STT via `sounddevice`
- **LSP bridge** — integrate with VS Code and JetBrains via the bundled extension
- **Multi-agent** — orchestrate parallel sub-agents for large tasks

---

## Installation Options

```bash
# Core only (CLI + TUI)
pip install yoke-harness

# With web server
pip install "yoke-harness[serve]"

# With LSP support
pip install "yoke-harness[lsp]"

# Everything
pip install "yoke-harness[serve,lsp]"
```

---

## Bundled Skills

| Skill | What it does |
|-------|-------------|
| `export-excel` | Convert CSV / JSON / data to formatted .xlsx |
| `fill-report` | Fill templates → .docx / .md / .txt |
| `generate-ppt` | Outline → PowerPoint .pptx |
| `bi-chart` | Data → interactive Chart.js HTML |
| `query-data` | Natural language query over workspace files |
| `read-pdf` | Extract text, tables, keywords from PDF |
| `review-pr` | Review a PR or branch diff |
| `commit` | Generate and apply a conventional git commit |
| `simplify` | Review changed code for reuse and quality |
| `install-skill` | Install a new skill from GitHub URL |

Install a community skill:
```bash
yoke skill install https://github.com/KKingsley/yoke-skills/tree/main/skills/my-skill
```

---

## Configuration

All config lives in `~/.yoke/.env`:

```env
YOKE_PROVIDER=claude          # claude | openai | gemini | deepseek | qwen | zhipu | minimax | ollama
ANTHROPIC_API_KEY=sk-...
YOKE_DEFAULT_MODE=restricted  # full | restricted | readonly
YOKE_MODEL=claude-sonnet-4-5
```

Run `yoke setup` to configure interactively.

---

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md) to write your own skills or providers.

---

## License

MIT © [KKingsley](https://github.com/KKingsley)
