Metadata-Version: 2.5
Name: infinidev
Version: 0.29.1
Summary: An AI programming harness with terminal and web interfaces.
Project-URL: Homepage, https://github.com/Infinibay/infinidev
Project-URL: Repository, https://github.com/Infinibay/infinidev.git
Project-URL: Issues, https://github.com/Infinibay/infinidev/issues
Author-email: Andres Borek <andres@infinibay.net>
License-Expression: MIT
License-File: LICENSE.md
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development
Requires-Python: >=3.11
Requires-Dist: chromadb>=1.1.0
Requires-Dist: click>=8.1.7
Requires-Dist: duckduckgo-search>=8.1.0
Requires-Dist: httpx>=0.28.0
Requires-Dist: ken-rank>=0.13.1
Requires-Dist: langdetect>=1.0.9
Requires-Dist: litellm>=1.89.1
Requires-Dist: numpy>=2.0.0
Requires-Dist: ollama>=0.6.0
Requires-Dist: pillow>=10.0.0
Requires-Dist: prompt-toolkit>=3.0.43
Requires-Dist: pydantic-settings>=2.10.0
Requires-Dist: pydantic>=2.11.0
Requires-Dist: python-dotenv>=1.0.0
Requires-Dist: textual>=8.1.1
Requires-Dist: tokenizers>=0.22.0
Requires-Dist: trafilatura>=2.0.0
Requires-Dist: tree-sitter-bash>=0.23.0
Requires-Dist: tree-sitter-c-sharp>=0.23.1
Requires-Dist: tree-sitter-c>=0.24.1
Requires-Dist: tree-sitter-css>=0.23.0
Requires-Dist: tree-sitter-go>=0.23.0
Requires-Dist: tree-sitter-html>=0.23.0
Requires-Dist: tree-sitter-java>=0.23.0
Requires-Dist: tree-sitter-javascript>=0.23.0
Requires-Dist: tree-sitter-json>=0.24.0
Requires-Dist: tree-sitter-kotlin>=1.1.0
Requires-Dist: tree-sitter-markdown>=0.3.0
Requires-Dist: tree-sitter-php>=0.24.1
Requires-Dist: tree-sitter-python>=0.23.0
Requires-Dist: tree-sitter-regex>=0.24.0
Requires-Dist: tree-sitter-ruby>=0.23.1
Requires-Dist: tree-sitter-rust>=0.23.0
Requires-Dist: tree-sitter-toml>=0.6.0
Requires-Dist: tree-sitter-typescript>=0.23.2
Requires-Dist: tree-sitter-xml>=0.7.0
Requires-Dist: tree-sitter-yaml>=0.6.0
Requires-Dist: tree-sitter>=0.23.0
Requires-Dist: watchfiles>=0.24.0
Requires-Dist: wordfreq>=3.1.1
Requires-Dist: yappi>=1.6.0
Provides-Extra: cuda
Requires-Dist: cupy-cuda12x>=13.0.0; extra == 'cuda'
Provides-Extra: finetune
Requires-Dist: accelerate<2,>=1.10; extra == 'finetune'
Requires-Dist: bitsandbytes<1,>=0.46; (platform_system == 'Linux' and platform_machine == 'x86_64') and extra == 'finetune'
Requires-Dist: ctranslate2<5,>=4.6; extra == 'finetune'
Requires-Dist: datasets<4.4,>4.1; extra == 'finetune'
Requires-Dist: deepspeed<1,>=0.17; (platform_system == 'Linux') and extra == 'finetune'
Requires-Dist: peft<1,>=0.17; extra == 'finetune'
Requires-Dist: sacremoses<1,>=0.1; extra == 'finetune'
Requires-Dist: sentencepiece<1,>=0.2; extra == 'finetune'
Requires-Dist: torch<3,>=2.7; extra == 'finetune'
Requires-Dist: transformers<5,>=4.57.1; extra == 'finetune'
Provides-Extra: finetune-unsloth
Requires-Dist: datasets<4.4,>4.1; extra == 'finetune-unsloth'
Requires-Dist: torch<3,>=2.7; extra == 'finetune-unsloth'
Requires-Dist: transformers<5,>=4.57.1; extra == 'finetune-unsloth'
Requires-Dist: trl<2,>=0.24; extra == 'finetune-unsloth'
Requires-Dist: unsloth<2027,>=2026.3.17; (platform_system == 'Linux' and platform_machine == 'x86_64') and extra == 'finetune-unsloth'
Provides-Extra: mnn
Requires-Dist: mnn>=3.5.0; extra == 'mnn'
Requires-Dist: transformers<5,>=4.40; extra == 'mnn'
Provides-Extra: web
Requires-Dist: fastapi>=0.115; extra == 'web'
Requires-Dist: uvicorn>=0.34; extra == 'web'
Requires-Dist: websockets>=13; extra == 'web'
Description-Content-Type: text/markdown

# Infinidev

[![PyPI](https://img.shields.io/pypi/v/infinidev.svg)](https://pypi.org/project/infinidev/)
[![Python](https://img.shields.io/pypi/pyversions/infinidev.svg)](https://pypi.org/project/infinidev/)
[![Tests](https://github.com/Infinibay/infinidev/actions/workflows/tests.yml/badge.svg)](https://github.com/Infinibay/infinidev/actions/workflows/tests.yml)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE.md)

Infinidev is an autonomous AI coding agent for the terminal. It can inspect a
repository, plan changes, edit code, run commands and tests, review its work,
and keep project knowledge across sessions.

It works with hosted models through LiteLLM and with local models through
[Ollama](https://ollama.com).

An optional React web workspace provides conversations, named teams and tickets,
shared notes, live process output, file diffs, findings, model settings and usage.
It drives the same harness as the terminal. See [Web workspace](docs/web-harness.md)
for setup, development and the current scope.

![Infinidev TUI](https://raw.githubusercontent.com/Infinibay/infinidev/main/public/screenshot.png)

## Install

Python 3.11 or newer is required. The recommended installation uses
[uv](https://docs.astral.sh/uv/), which keeps Infinidev in an isolated tool
environment:

```bash
uv tool install infinidev
```

Upgrade later with:

```bash
uv tool upgrade infinidev
```

You can also install it with pipx:

```bash
pipx install infinidev
```

## Start

Run Infinidev from the project you want it to work on:

```bash
cd path/to/your/project
infinidev
```

Use `/models manage` to choose a provider and model, or `/settings` to edit the
project configuration. By default, Infinidev expects Ollama at
`http://localhost:11434`.

Useful command-line modes:

```bash
infinidev --no-tui                 # text-only interface
infinidev -p "explain this repo"   # one prompt, then exit
infinidev --continue               # resume the latest local session
infinidev --resume                 # choose, rename, or delete a previous session
```

Inside either interface, use `/session <name>` to give the current session a durable
name. The `--resume` picker shows all sessions registered in the active workspace database
(local-workspace entries first), including their names and estimated storage; enter
`rename NUMBER NAME` or `delete NUMBER` to manage an entry before resuming it.

Use `/prompts` to list the optional prompt capabilities in your shared catalog, narrow
that list with `/prompts search <term>`, and inspect a guide before activation with
`/prompts show <name>`. Then use `/prompts enable <name>` or `/prompts disable <name>`
to change one for future tasks. Use `/prompts reset <name>` to remove your override and
inherit the catalog or project state again.
Shared profiles live in `~/.infinidev/prompts/`; a project's
`.infinidev/prompts.json` can override them. See [Prompt profiles](docs/prompt-profiles.md)
for the catalog format and precedence rules.

## What it includes

- A live terminal UI with task progress, diffs, files, logs, and context usage.
- Live output tabs for background commands through `/ps` or `/bg`.
- Research teams with named specialists, visible roles, shared notes, and direct messages.
- Plan-execute-summarize and staged execution for long, multi-step tasks.
- File, shell, Git, web, code-intelligence, knowledge, and image tools.
- Persistent, searchable working memory with recoverable tool evidence.
- Project and user-level prompt profiles, with opt-in workflow guides managed through `/prompts`.
- Model capability detection and native or text-based tool calling.
- MCP server support; Ken is used for semantic project context when available.
- Permission checks, deterministic completion gates, tests, and post-change review.
- Image attachments, terminal image viewing, and opt-in image generation.

## Essential commands

| Command | Purpose |
| --- | --- |
| `/help` | Show commands and keybindings |
| `/models manage` | Choose the active provider and model |
| `/settings` | View or change project settings |
| `/engine` | Select the task execution engine |
| `/plan <task>` | Review a plan before execution |
| `/mcp` | Show MCP server health |
| `/findings` | Browse saved project knowledge |
| `/ps` or `/bg` | Select a background task and open its live output |
| `/usage` | Show usage and available quota information for the selected provider |
| `/reindex` | Rebuild the local code index |
| `/clear` | Clear the transcript |
| `/exit` | Quit |

## How it works

```text
request
  -> principal agent
  -> direct work or tickets and delegated specialists
  -> evidence, tests, and objective checks
  -> principal review
  -> result
```

Infinidev stores settings, history, logs, and its SQLite knowledge database in
`.infinidev/` inside the current project. Environment variables use the
`INFINIDEV_` prefix. Secrets and generated runtime state should not be committed.

Council transcripts shown by `/agents` are process-local and retain the 100 most
recent completed councils by default, while always preserving active councils. Set
`COUNCIL_HISTORY_LIMIT` in `.infinidev/settings.json` (or
`INFINIDEV_COUNCIL_HISTORY_LIMIT`) to a non-negative number; use `0` to discard a
transcript after its completion event or `null` for unlimited retention.

See [Background tasks](docs/background-tasks.md) for output tabs and shortcuts,
[Research teams](docs/research-teams.md) for delegation and shared notes, and
[Provider usage](docs/usage.md) for quota sources and optional billing credentials.

## Development

```bash
git clone https://github.com/Infinibay/infinidev.git
cd infinidev
uv sync
uv run pytest
uv run infinidev
```

Architecture and subsystem documentation live in [`docs/`](docs/). Contributor
guidance is in [`AGENTS.md`](AGENTS.md).

## License

The Infinidev software and documentation are available under the [MIT License](LICENSE.md).
The manually authored task-policy annotations in
[`data/task-policy-reviews/`](data/task-policy-reviews/) are a separately licensed data
component; see their [data license and attribution notice](data/task-policy-reviews/LICENSE.md).
