An open API service indexing awesome lists of open source software.

https://github.com/veilm/hinata

❄️ CLI AI agents + Unix philosophy
https://github.com/veilm/hinata

ai cli deepseek gemini llm llms openai

Last synced: 11 months ago
JSON representation

❄️ CLI AI agents + Unix philosophy

Awesome Lists containing this project

README

          




agentic AI pair programming in your terminal. except minimalist, modular, extensible

# quick tour

### [`hnt-agent`](./cmd/hnt-agent/)
simple [`hnt-chat`](./cmd/hnt-chat/) wrapper for letting an LLM operate a persistent shell

```
$ git log --oneline | head -1
b8b305b refactor: Handle recoil animations during enemy fade-out state

$ hnt-agent \
-m "please check the diff, then commit all changes with a meaningful message" \
--model "openrouter/anthropic/claude-opus-4" \
--no-confirm
I'll check the repository diff first to see what changes have been made, then
create a meaningful commit message.
[...]

$ git log --oneline | head -2
40f034e style: Convert changelog dates to YYYY-MM-DD format
b8b305b refactor: Handle recoil animations during enemy fade-out state
```

the persistent shell is the only direct "tool" the model has access to. all
other possible functionality (e.g. browser navigation with
[`browse`](./util/browse/), file editing with
[`hnt-edit`](./cmd/hnt-edit/)) is implemented as CLI utilities that the LLM can
leverage

not as aesthetic as Claude Code. UX is WIP

### [`hnt-edit`](./cmd/hnt-edit/)
simple [`hnt-chat`](./cmd/hnt-chat/) wrapper for editing source code or other
plaintext files

```
$ hnt-edit \
-m "please enable debugging in the config" \
--model "deepseek/deepseek-chat" \
$(fd -g "*.h")
I'll enable debugging by changing the DEBUG flag from 0 to 1 in util.h. Here's the edit:
[...]

$ git diff
diff --git a/src/util.h b/src/util.h
index badefee..5eb3e0d 100644
--- a/src/util.h
+++ b/src/util.h
@@ -1,6 +1,6 @@
#pragma once

-#define DEBUG 0
+#define DEBUG 1

#define debug(fmt, ...) \
do { if (DEBUG) fprintf(stderr, "%-20s " fmt, \
```

in my experience, hnt-edit's editing performance is higher than Aider's for my
usual Gemini 2.5 Pro infra and web use cases, as of Apr 2025. (functional
differences: system prompt and design of TARGET/REPLACE parser)

### [`hnt-chat`](./cmd/hnt-chat/)
simple [`hnt-llm`](./cmd/hnt-llm/) wrapper, for chat history management using
plaintext files and conversation directories
```
$ conversation=$(hnt-chat new)
$ echo "please write a 2-line stanza about the user's given theme" | hnt-chat add system
$ echo "iteration" | hnt-chat add user

$ ls $conversation
1751202665600525690-system.md
1751202669679594679-user.md

$ hnt-chat generate --write --model deepseek/deepseek-chat
Code repeats in loops so tight,
Each pass refines till it's just right.

$ ls $conversation
1751202665600525690-system.md
1751202669679594679-user.md
1751202692095544873-assistant.md
```

### [`hnt-llm`](./cmd/hnt-llm/)
basic LLM API in/out. significantly faster startup than openai-python
```
$ echo "hello Claude! ❄️" | hnt-llm --model openrouter/anthropic/claude-3-opus
Hello! It's great to meet you. I hope you're having a wonderful day! ❄️☃️
```

has optional ~encrypted credential management using `hnt-llm save-key`

# getting started
### system requirements
- [Go](https://go.dev/) installed
- Linux or macOS

### recommended
```
$ curl hnt-agent.org/install | sh
...

$ hnt-agent --help
...

$ hnt-agent
> my brother, can you please spare me any help with ...
```

### alternative: manual
```
git clone --depth 1 https://github.com/veilm/hinata
cd hinata
./install.sh
```

# full architecture
- [`hnt-llm`](./cmd/hnt-llm/): simple, performant text backend. pipe text input
in, receive LLM text response out
- [`hnt-chat`](./cmd/hnt-chat/): wrapper around `hnt-llm` for managing
conversations and message history, using simple conv directories and message
markdown files
- [`llm-pack`](./cmd/llm-pack/): take source code filenames as CLI args. write
LLM packed prompt to stdout
- [`hnt-apply`](./cmd/hnt-apply/): take LLM output including TARGET/REPLACE
blocks as stdin. make edits to those files on the LLM's behalf
- [`hnt-edit`](./cmd/hnt-edit/): minimal aider clone. wrapper that uses
`llm-pack` to format source code. sends it along with user instructions to
`hnt-chat`. then uses `hnt-apply` to parse the LLM's desired edits
- [`hnt-agent`](./cmd/hnt-agent/): allows an LLM to use a persistent shell and
receive output, in a feedback loop
- [`hnt-web`](./cmd/hnt-web/): simple 80/20 web app wrapping `hnt-chat`. sufficient
for my own casual usage and mobile/{filesystem storage} requirement
- [`browse`](./util/browse/): CLI for navigating your (not headless)
GUI Chromium-based browser programmatically. intended for LLM web browsing

# bugs / support
feel free to [@ me on X](https://x.com/sucralose__) or make a GitHub issue, for
literally any reason

you don't need to read any documentation or even try installing. I'd be happy to
answer any possible questions or hear criticism

# philosophy

**Goal: unequivocally mog yacine's setup**

- Have something like Aider / Claude code / codex but ~~impossible to use~~
extensible
- As much as possible, unify your environment so that LLMs and humans can use
the same tools in the same ways: simple CLI programs that wrap each other
- Integrate other ideas as they're leaked by Pliny/Tibor/etc.
- Ideally LLM Chat is simple to layer on top as a wrapper over composable
features (e.g. memory)
- Maintain benchmarks on included prompts and scaffolding on private code (rvm,
iqd, etc.) for reference and for maliciously farming and baiting engagement on X
- Be reasonable in the design of backends. like Aider not like Open WebUI

# credit
### other projects used for inspiration
- [Claude Code](https://www.anthropic.com/claude-code)
- [Aider](https://aider.chat/)
- [Cursor](https://www.cursor.com/)
- [openai-python](https://github.com/openai/openai-python)
- [simonw/llm](https://github.com/simonw/llm)
- [Streamdown](https://github.com/day50-dev/Streamdown)

### staff
- designed by [sucralose](https://veilm.github.io)
- written mostly by Gemini 2.5 Pro, o3, and Claude 4 Opus
- inspired by a certain reserve course student