Metadata-Version: 2.4
Name: lmti
Version: 1.4.0
Summary: Language Model Terminal Interface.
Project-URL: Homepage, https://github.com/nachollorca/lmti
License: MIT
Requires-Python: <3.14,>=3.12
Requires-Dist: lmdk>=1.2.1
Requires-Dist: prompt-toolkit>=3.0.52
Requires-Dist: pyyaml>=6.0.3
Requires-Dist: rich>=14.3.3
Description-Content-Type: text/markdown

# Language Model Terminal Interface

Oftentimes I just want to talk to LMs, without the agentic clutter: I dont want it to read my stuff, access my files or consume through a gazillion tokens of tools, skills, MCPs and what not. I just want a recipe for tika masala, c'mon :(

For that I normally have to log into the webapps from the provider (i.e. Mistral LeChat, Gemini, ChatGPT). But I live on the terminal. So I made a thin wrapper bc it is 2026 and programming is easy

FAQ:
- **Can I talk with LMs from different providers from the terminal?** Yes :)
- **Does the app have access to my files?** No
- **Can the app run terminal commands?** Nope
- **Can the app execute code?** Nein
- **Does the app have any sort of agentic loop?** Negative
- **Can I connect the app to MCPs or other tools?** Also no

## Install
`uv tool install lmti`

## Gettint started
```bash
# Start with the default model
lmti

# Start with a specific model
lmti -m vertex:gemini-2.5-flash
```

## Config
Config is stored at `~/.config/lmti/config.yaml`.
It handles your credentials and default settings.
Many of these can also be modified through commands in the TUI:

```yaml
credentials:
  MISTRAL_API_KEY: your-key-here
settings:
  render_markdown: true
  model: mistral:mistral-small-2603
models:
- mistral:mistral-small-2603
- vertex:gemini-2.5-flash
```

## Development

### Structure
```text
src/lmti/
├── cli.py      # Argument parsing and entry point
├── config.py   # Configuration management
├── errors.py   # Error handling
├── repl.py     # Main REPL loop logic
├── ui.py       # Terminal UI (prompt-toolkit and rich)
├── commands/   # Slash command implementations
└── __init__.py
```

### Tooling
We use `just` for development tasks. Use:
- `just sync`: Updates lockfile and syncs environment.
- `just format`: Lints and formats with `ruff`.
- `just check-types`: Static analysis with `ty`.
- `just analyze-complexity`: Cyclomatic complexity checks with `complexipy`.
- `just test`: Runs pytest with 90% coverage threshold.

### Contribute
1. **Hooks**: Install pre-commit hooks via `just install-hooks`.
2. **Issues**: Open an issue first using the default template.
3. **PRs**: Link your PR to the relevant issue.

## License
MIT
