{"slug": "show-hn-grinta-a-local-first-coding-agent-built-for-long-autonomous-runs", "title": "Show HN: Grinta – a local-first coding agent built for long autonomous runs", "summary": "Developer Youssef Mejdi released Grinta v1.0.0-rc1, a local-first, provider-agnostic coding agent for long autonomous runs that integrates with LSP and DAP. The tool runs entirely on the user's machine without cloud dependency, supports multiple AI model providers, and includes safety rails and durable session management. It is available for Linux, Windows, and macOS via pipx.", "body_md": "Local-first. Provider-agnostic. Ships with real LSP + DAP. Optional extras stay opt-in.A terminal coding agent that plans, executes, validates, and finishes — without a cloud control plane, without lock-in to one model vendor, and without the old heavyweight install footprint.\n\nCurrent status:`v1.0.0-rc1`\n\npublic release candidate. Linux, Windows, and macOS run required unit and extended CI gates; smoke-install and onboarding validation are in place. Remaining GA work is mostly documentation alignment, contributor-doc honesty, and edge-case hardening after the post-rc1 decomposition wave.\n\nCreated and maintained by [Youssef Mejdi](https://github.com/josephsenior).\n\nDirect link if the video does not load: [ docs/assets/grinta-demo.mp4](/josephsenior/Grinta-Coding-Agent/blob/main/docs/assets/grinta-demo.mp4).\n\n- Latest public build is\n`v1.0.0-rc1`\n\n(release candidate), not final GA. - Required CI covers sharded Linux unit coverage (75%), cross-platform unit gates, and integration/e2e/stress on Linux, Windows, and macOS; smoke-install and onboarding validation are in place for the current release line.\n- We are actively collecting feedback on UX clarity and edge-case reliability before the GA call.\n- Linux, Windows, and macOS are supported release targets, but certification depth differs by platform; see\n[docs/SUPPORT_MATRIX.md](/josephsenior/Grinta-Coding-Agent/blob/main/docs/SUPPORT_MATRIX.md). - If you hit friction, please open an issue with the\n`RC Feedback`\n\ntemplate from the issue chooser. - GA criteria and release gate details live in\n[docs/RELEASE_CHECKLIST.md](/josephsenior/Grinta-Coding-Agent/blob/main/docs/RELEASE_CHECKLIST.md).\n\nGrinta distinguishes itself by focusing on a completely local-first, provider-agnostic, and deeply integrated terminal workflow. Unlike thin wrappers or cloud-dependent control planes, Grinta:\n\n**Local-first**: Grinta’s control plane, execution, storage, and session history run locally. Model inference may be local or remote depending on the configured provider.**Provider-agnostic**: Connects seamlessly with OpenAI, Anthropic, Google, OpenRouter, Ollama, or LM Studio using a unified interface.** Deep tooling integration**: Automatically discovers and integrates with local Language Servers (LSP) and Debug Adapters (DAP) on your PATH.** Built-in safety rails**: Classifies actions by risk, implements confirmation gates, and masks secrets in console outputs.** Durable long sessions**: Built with an event-stream ledger supporting automatic compaction, manual checkpoints, and easy reverts.\n\n**Consumer, dev, Windows, WSL2, Linux, macOS:** [docs/QUICK_START.md](/josephsenior/Grinta-Coding-Agent/blob/main/docs/QUICK_START.md)\n\n```\npipx install grinta    # consumer — then cd \"<project>\" && grinta\n```\n\nOptional extras: `pipx install \"grinta[rag]\"`\n\n· `\"grinta[browser]\"`\n\n· `\"grinta[all]\"`\n\n— details in [Quick Start](/josephsenior/Grinta-Coding-Agent/blob/main/docs/QUICK_START.md).\n\n**Task completion, not just file edits.** Stuck detection, recovery directives, and optional completion-quality validation help reduce premature \"done\".**Model-agnostic.** OpenAI, Anthropic, Google, OpenRouter, Ollama, LM Studio — same prompt surface, same tools.**Local-first.** Code stays in your workspace; sessions, checkpoints, and audit logs live under`~/.grinta/workspaces/<id>/storage`\n\n.**Strong safety rails.** Risk-classified actions, CRITICAL refusal gate, secret masking, and a session-wide audit trail.**Durable long sessions.** Event-stream ledger, automatic compaction, manual`/checkpoint`\n\n, and revert.**Terminal UI.** Interactive TTY sessions launch the Textual app with HUD, transcript cards, settings/sessions dialogs, and slash commands; piped input uses a non-interactive fallback.\n\nGrinta exposes three modes in the Textual HUD (Chat, Plan, Agent). They change the conversational contract, not just the prompt tone:\n\n**Chat**— read-only Q&A and discovery tools; no edits or shell.** Plan**— read-only investigation; may use`task_tracker`\n\nfor a structured plan when enabled, or prose only. Switch to Agent mode to execute.**Agent**— full task loop (default for direct work).\n\nAutonomy (`/autonomy`\n\n: conservative, balanced, full) controls confirmation prompts in **Agent** mode only. Runtime hardening is configured separately with `security.execution_profile`\n\n(`standard`\n\nis the default and supports the interactive terminal and debugger; `hardened_local`\n\nand `sandboxed_local`\n\nadd stricter policy gates).\n\n| Command | What it does |\n|---|---|\n`/help` |\nFull slash-command reference |\n`/settings` |\nModel, API key, and MCP configuration |\n`/sessions` |\nList past sessions; `/resume <N|id>` to continue one |\n`/model` |\nShow or switch the active provider/model |\n`/mode` |\nView or set interaction mode (chat / plan / agent) |\n`/autonomy` |\nView or set confirmation behavior |\n`/cost` |\nTokens, calls, USD spent this session |\n`/diff` |\nWorkspace git changes (`--stat` , `--name-only` , `--patch` ) |\n`/health` |\nFast self-check for debug adapters, ripgrep, git, and model setup |\n`/checkpoint` |\nSnapshot the workspace (revertable) |\n`/status` |\nHUD snapshot; `/status verbose` adds diagnostics |\n`/compact` |\nForce context compaction now |\n\nPlaybook workflows (`/debug`\n\n, `/testing`\n\n, `/feature`\n\n, …) and the full registry are in `/help`\n\n.\n\nGrinta executes actions on the local host. The default `standard`\n\nprofile preserves full interactive terminal and debugger support. `hardened_local`\n\nadds stricter policy checks but **is not** sandboxing or process isolation; `sandboxed_local`\n\nadds process isolation only for non-interactive commands. Read [docs/SECURITY_CHECKLIST.md](/josephsenior/Grinta-Coding-Agent/blob/main/docs/SECURITY_CHECKLIST.md) **before pointing Grinta at code you do not trust** — for hostile codebases, run inside a VM or container.\n\nGrinta is evaluated through recorded long-horizon autonomous sessions and forensic event-stream audits.\n\nA recent full-autonomy run:\n\n- executed for\n**4h 33m** - processed\n**16,393 events** - recorded\n**373 tool outcomes — 368 successful, 5 failed** - produced\n**123 file events** - recovered through inference-provider connection failures\n- detected process suspension without misclassifying it as an agent hang\n- rejected malformed model tool payloads at the tool boundary\n- handled context pressure during execution\n- reached the final\n**FINISHED** state\n\nThe audit recorded one initial user turn and no subsequent user turns during execution.\n\n📊 [Read the sanitized autonomous execution report](/josephsenior/Grinta-Coding-Agent/blob/main/docs/evidence/2026-07-09-autonomous-run-report.md)\n\nFull forensic session audits are retained privately.\n\n``` php\ngraph TB\n    User([User]) --> CLI[CLI: backend.cli.entry]\n    CLI --> TUI[TTY: Textual TUI]\n    CLI --> NonInteractive[Piped input: non-interactive runner]\n    TUI --> Orch[SessionOrchestrator]\n    NonInteractive --> Orch\n    Orch --> Engine[Engine\\nplanning + tool intent]\n    Orch --> Pipe[Operation pipeline\\nsafety + validation]\n    Pipe --> Runtime[RuntimeExecutor\\nlocal execution]\n    Runtime --> Obs[Observations]\n    Obs --> Orch\n    Orch --> Ledger[EventStream / durability]\n    Orch --> FinishGate[Task validation\\nbefore finish]\n```\n\nSee [docs/ARCHITECTURE.md](/josephsenior/Grinta-Coding-Agent/blob/main/docs/ARCHITECTURE.md) for the deep dive.\n\nContributors: Linux PR gates shard the **unit** corpus (`backend/tests/unit`\n\n) with 75% coverage, then run integration/e2e/stress in extended jobs; Windows and macOS run the same unit corpus plus the extended tier ([docs/CI.md](/josephsenior/Grinta-Coding-Agent/blob/main/docs/CI.md)). Match the tier you are changing before opening a PR ([CONTRIBUTING.md](/josephsenior/Grinta-Coding-Agent/blob/main/CONTRIBUTING.md#testing-before-a-pull-request)).\n\nGrinta is a single-author project, written and rewritten in public. The journey — what was killed, what was wrong, what got rebuilt — is **The Book of Grinta**: start at [Preface](/josephsenior/Grinta-Coding-Agent/blob/main/docs/journey/preface-why-this-story-matters.md) → [00 · Meaning of Grinta](/josephsenior/Grinta-Coding-Agent/blob/main/docs/journey/00-the-meaning-of-grinta.md) through the numbered chapters to [45 · The Product Surface Became Real](/josephsenior/Grinta-Coding-Agent/blob/main/docs/journey/45-the-product-surface-became-real.md) and [46 · The Decomposition Wave](/josephsenior/Grinta-Coding-Agent/blob/main/docs/journey/46-the-decomposition-wave.md), then the epilogue [07 · The Road Ahead](/josephsenior/Grinta-Coding-Agent/blob/main/docs/journey/07-the-road-ahead.md). Full index and act structure: [docs/journey/README.md](/josephsenior/Grinta-Coding-Agent/blob/main/docs/journey/README.md). Stable shortcut from the repo root: [BOOK_OF_GRINTA.md](/josephsenior/Grinta-Coding-Agent/blob/main/BOOK_OF_GRINTA.md).\n\nUse the container image directly (no official compose stack in this repo):\n\n```\ndocker run -it --rm -v \"$PWD:/work\" -w /work \\\n  -e LLM_API_KEY=${LLM_API_KEY} \\\n  ghcr.io/josephsenior/grinta:latest\n```\n\nRun `grinta`\n\n(first interactive launch runs setup) or see [docs/SETTINGS.md](/josephsenior/Grinta-Coding-Agent/blob/main/docs/SETTINGS.md).\n\nPlan -> execute -> observe -> validate -> finish.\n\nGrinta uses compactor strategies to keep long sessions coherent under context limits.\n\nStuck detection, retry/recovery flows, and circuit breakers are built into orchestration.\n\nOptional completion-quality validation surfaces advisory warnings when tracked work looks incomplete; it does not hard-block the agent from finishing.\n\n**Start here (end users):**\n\n**Contributors:**\n\n**More reference:**\n\n**Optional narrative:** [The Book of Grinta](/josephsenior/Grinta-Coding-Agent/blob/main/docs/journey/README.md) — engineering memoir; may not reflect the current product surface.\n\nSee [CONTRIBUTING.md](/josephsenior/Grinta-Coding-Agent/blob/main/CONTRIBUTING.md).\n\nMIT — see [LICENSE](/josephsenior/Grinta-Coding-Agent/blob/main/LICENSE).\n\nDependency attribution and notice policy: [THIRD_PARTY_NOTICES.md](/josephsenior/Grinta-Coding-Agent/blob/main/THIRD_PARTY_NOTICES.md).", "url": "https://wpnews.pro/news/show-hn-grinta-a-local-first-coding-agent-built-for-long-autonomous-runs", "canonical_source": "https://github.com/josephsenior/Grinta-Coding-Agent", "published_at": "2026-07-12 09:39:29+00:00", "updated_at": "2026-07-12 10:05:35.586111+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "ai-tools"], "entities": ["Grinta", "Youssef Mejdi", "OpenAI", "Anthropic", "Google", "OpenRouter", "Ollama", "LM Studio"], "alternates": {"html": "https://wpnews.pro/news/show-hn-grinta-a-local-first-coding-agent-built-for-long-autonomous-runs", "markdown": "https://wpnews.pro/news/show-hn-grinta-a-local-first-coding-agent-built-for-long-autonomous-runs.md", "text": "https://wpnews.pro/news/show-hn-grinta-a-local-first-coding-agent-built-for-long-autonomous-runs.txt", "jsonld": "https://wpnews.pro/news/show-hn-grinta-a-local-first-coding-agent-built-for-long-autonomous-runs.jsonld"}}