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

# Language Model Terminal Interface

Often 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 gazpacho, c'mon :(

For that, I normally have to log into a WebApp from a provider (i.e. Mistral LeChat, Gemini, ChatGPT). But I live on the terminal, so I made a thin wrapper.

![assets/demo.gif](assets/demo.gif)

If somehow you landed here but you are looking for an actual agent that can manage your system, I'd recommend you look into [pi](https://pi.dev/), [opencode](https://opencode.ai/) or [mistral-vibe](https://github.com/mistralai/mistral-vibe) (in that order). If your desire is to become vendor locked and further push private companies in their quest for the oligopoly, you could check Claude Code or Codex, I guess :)

## 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**

## Installation
`uv tool install lmti`

## Usage
```bash
# Start with the default model
lmti

# Start with a specific model
lmti -m vertex:gemini-2.5-flash
```
`lmti` does support several commands to reset a conversation, undo some message, change models, etc.
Simply type forward slash (`/`) while on the REPL to see a list of supported actions.

## 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 check-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

_Done with [`mold`](https://github.com/nachollorca/mold) template_
