{"id":30143923,"url":"https://github.com/veilm/hinata","last_synced_at":"2025-08-11T07:35:38.215Z","repository":{"id":289309725,"uuid":"970833970","full_name":"veilm/hinata","owner":"veilm","description":"❄️ CLI AI agents + Unix philosophy","archived":false,"fork":false,"pushed_at":"2025-07-31T01:13:45.000Z","size":9967,"stargazers_count":7,"open_issues_count":9,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-31T04:00:56.729Z","etag":null,"topics":["ai","cli","deepseek","gemini","llm","llms","openai"],"latest_commit_sha":null,"homepage":"https://hnt-agent.org","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/veilm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-22T15:52:19.000Z","updated_at":"2025-07-31T01:13:49.000Z","dependencies_parsed_at":"2025-04-22T16:54:56.961Z","dependency_job_id":"6c92223b-d83d-4abd-ab2a-05cfa420d60c","html_url":"https://github.com/veilm/hinata","commit_stats":null,"previous_names":["michaelskyba/kom","michaelskyba/hinata","veilm/hinata"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/veilm/hinata","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veilm%2Fhinata","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veilm%2Fhinata/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veilm%2Fhinata/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veilm%2Fhinata/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/veilm","download_url":"https://codeload.github.com/veilm/hinata/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/veilm%2Fhinata/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269849298,"owners_count":24485151,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-11T02:00:10.019Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","cli","deepseek","gemini","llm","llms","openai"],"created_at":"2025-08-11T07:35:35.234Z","updated_at":"2025-08-11T07:35:38.206Z","avatar_url":"https://github.com/veilm.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/veilm/veilm.github.io/refs/heads/master/static/hinata.png\" width=\"250\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\nagentic AI pair programming in your terminal. except minimalist, modular, extensible\n\u003c/p\u003e\n\n# quick tour\n\n### [`hnt-agent`](./cmd/hnt-agent/)\nsimple [`hnt-chat`](./cmd/hnt-chat/) wrapper for letting an LLM operate a persistent shell\n\n```\n$ git log --oneline | head -1\nb8b305b refactor: Handle recoil animations during enemy fade-out state\n\n$ hnt-agent \\\n\t-m \"please check the diff, then commit all changes with a meaningful message\" \\\n\t--model \"openrouter/anthropic/claude-opus-4\" \\\n\t--no-confirm\nI'll check the repository diff first to see what changes have been made, then\ncreate a meaningful commit message.\n[...]\n\n$ git log --oneline | head -2\n40f034e style: Convert changelog dates to YYYY-MM-DD format\nb8b305b refactor: Handle recoil animations during enemy fade-out state\n```\n\nthe persistent shell is the only direct \"tool\" the model has access to. all\nother possible functionality (e.g. browser navigation with\n[`browse`](./util/browse/), file editing with\n[`hnt-edit`](./cmd/hnt-edit/)) is implemented as CLI utilities that the LLM can\nleverage\n\nnot as aesthetic as Claude Code. UX is WIP\n\n### [`hnt-edit`](./cmd/hnt-edit/)\nsimple [`hnt-chat`](./cmd/hnt-chat/) wrapper for editing source code or other\nplaintext files\n\n```\n$ hnt-edit \\\n\t-m \"please enable debugging in the config\" \\\n\t--model \"deepseek/deepseek-chat\" \\\n\t$(fd -g \"*.h\")\nI'll enable debugging by changing the DEBUG flag from 0 to 1 in util.h. Here's the edit:\n[...]\n\n$ git diff\ndiff --git a/src/util.h b/src/util.h\nindex badefee..5eb3e0d 100644\n--- a/src/util.h\n+++ b/src/util.h\n@@ -1,6 +1,6 @@\n #pragma once\n \n-#define DEBUG 0\n+#define DEBUG 1\n \n #define debug(fmt, ...) \\\n \tdo { if (DEBUG) fprintf(stderr, \"%-20s \" fmt, \\\n```\n\nin my experience, hnt-edit's editing performance is higher than Aider's for my\nusual Gemini 2.5 Pro infra and web use cases, as of Apr 2025. (functional\ndifferences: system prompt and design of TARGET/REPLACE parser)\n\n### [`hnt-chat`](./cmd/hnt-chat/)\nsimple [`hnt-llm`](./cmd/hnt-llm/) wrapper, for chat history management using\nplaintext files and conversation directories\n```\n$ conversation=$(hnt-chat new)\n$ echo \"please write a 2-line stanza about the user's given theme\" | hnt-chat add system\n$ echo \"iteration\" | hnt-chat add user\n\n$ ls $conversation\n1751202665600525690-system.md\n1751202669679594679-user.md\n\n$ hnt-chat generate --write --model deepseek/deepseek-chat\nCode repeats in loops so tight,\nEach pass refines till it's just right.\n\n$ ls $conversation\n1751202665600525690-system.md\n1751202669679594679-user.md\n1751202692095544873-assistant.md\n```\n\n### [`hnt-llm`](./cmd/hnt-llm/)\nbasic LLM API in/out. significantly faster startup than openai-python\n```\n$ echo \"hello Claude! ❄️\" | hnt-llm --model openrouter/anthropic/claude-3-opus\nHello! It's great to meet you. I hope you're having a wonderful day! ❄️☃️\n```\n\nhas optional ~encrypted credential management using `hnt-llm save-key`\n\n# getting started\n### system requirements\n- [Go](https://go.dev/) installed\n- Linux or macOS\n\n### recommended\n```\n$ curl hnt-agent.org/install | sh\n...\n\n$ hnt-agent --help\n...\n\n$ hnt-agent\n\u003e my brother, can you please spare me any help with ...\n```\n\n### alternative: manual\n```\ngit clone --depth 1 https://github.com/veilm/hinata\ncd hinata\n./install.sh\n```\n\n# full architecture\n- [`hnt-llm`](./cmd/hnt-llm/): simple, performant text backend. pipe text input\nin, receive LLM text response out\n- [`hnt-chat`](./cmd/hnt-chat/): wrapper around `hnt-llm` for managing\nconversations and message history, using simple conv directories and message\nmarkdown files\n- [`llm-pack`](./cmd/llm-pack/): take source code filenames as CLI args. write\nLLM packed prompt to stdout\n- [`hnt-apply`](./cmd/hnt-apply/): take LLM output including TARGET/REPLACE\nblocks as stdin. make edits to those files on the LLM's behalf\n- [`hnt-edit`](./cmd/hnt-edit/): minimal aider clone. wrapper that uses\n`llm-pack` to format source code. sends it along with user instructions to\n`hnt-chat`. then uses `hnt-apply` to parse the LLM's desired edits\n- [`hnt-agent`](./cmd/hnt-agent/): allows an LLM to use a persistent shell and\nreceive output, in a feedback loop\n- [`hnt-web`](./cmd/hnt-web/): simple 80/20 web app wrapping `hnt-chat`. sufficient\nfor my own casual usage and mobile/{filesystem storage} requirement\n- [`browse`](./util/browse/): CLI for navigating your (not headless)\nGUI Chromium-based browser programmatically. intended for LLM web browsing\n\n# bugs / support\nfeel free to [@ me on X](https://x.com/sucralose__) or make a GitHub issue, for\nliterally any reason\n\nyou don't need to read any documentation or even try installing. I'd be happy to\nanswer any possible questions or hear criticism\n\n# philosophy\n\n**Goal: unequivocally mog yacine's setup**\n\n- Have something like Aider / Claude code / codex but ~~impossible to use~~\nextensible\n- As much as possible, unify your environment so that LLMs and humans can use\nthe same tools in the same ways: simple CLI programs that wrap each other\n- Integrate other ideas as they're leaked by Pliny/Tibor/etc.\n- Ideally LLM Chat is simple to layer on top as a wrapper over composable\nfeatures (e.g. memory)\n- Maintain benchmarks on included prompts and scaffolding on private code (rvm,\niqd, etc.) for reference and for maliciously farming and baiting engagement on X\n- Be reasonable in the design of backends. like Aider not like Open WebUI\n\n# credit\n### other projects used for inspiration\n- [Claude Code](https://www.anthropic.com/claude-code)\n- [Aider](https://aider.chat/)\n- [Cursor](https://www.cursor.com/)\n- [openai-python](https://github.com/openai/openai-python)\n- [simonw/llm](https://github.com/simonw/llm)\n- [Streamdown](https://github.com/day50-dev/Streamdown)\n\n### staff\n- designed by [sucralose](https://veilm.github.io)\n- written mostly by Gemini 2.5 Pro, o3, and Claude 4 Opus\n- inspired by a certain reserve course student\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fveilm%2Fhinata","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fveilm%2Fhinata","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fveilm%2Fhinata/lists"}