[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-775":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":37,"readmeContent":38,"aiSummary":39,"trendingCount":16,"starSnapshotCount":16,"syncStatus":40,"lastSyncTime":41,"discoverSource":42},775,"little-coder","itayinbarr\u002Flittle-coder","itayinbarr","A harness optimized to smaller LLMs","",null,"TypeScript",1489,95,12,3,0,54,96,476,162,18.95,"Apache License 2.0",false,"main",[26,27,28,29,30,31,32,33,34,35,36],"ai-coding-assistant","aider-polygot","benchmark","code-generation","coding-agent","coding-agents","local-llm","ollama","qwen","small-language-models","tool-use","2026-06-12 02:00:18","# little-coder\n\n**A coding agent tuned for small local models, built on top of [pi](https:\u002F\u002Fpi.dev).**\n\nThe research story behind all this — why scaffold–model fit matters, how a 9.7 B Qwen beat frontier entries on Aider Polyglot, and what the load-bearing mechanisms actually do — is written up on Substack: **[*Honey, I Shrunk the Coding Agent*](https:\u002F\u002Fopen.substack.com\u002Fpub\u002Fitayinbarr\u002Fp\u002Fhoney-i-shrunk-the-coding-agent)**. Start there if you want the \"why\"; stay here for the \"how\".\n\n## How it relates to pi\n\n[pi](https:\u002F\u002Fpi.dev) is the minimal substrate — agent loop, multi-provider API, TUI, session tree, compaction, extension model. Four built-in tools (read \u002F write \u002F edit \u002F bash) and a ~1000-token system prompt.\n\nlittle-coder is **pi + 20 extensions + 30 skill markdown files + a Python benchmark harness**. It doesn't fork pi or shadow its CLI — pi is a plain dependency in `package.json`, and everything little-coder-specific lives under `.pi\u002Fextensions\u002F`, `skills\u002F`, and `benchmarks\u002F`. You can mix little-coder with pi packages from anyone else, add your own extensions, or disable ours per-project via `.pi\u002Fsettings.json`.\n\nIf you've never used pi, it's useful to skim [pi.dev](https:\u002F\u002Fpi.dev) first — the rest of this doc assumes pi's model of `--agent-import-path`, `--mode rpc`, and `.pi\u002Fextensions\u002F` auto-discovery.\n\n## Install\n\nOne-line install (Node.js 20.6+ required):\n\n```bash\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Fitayinbarr\u002Flittle-coder\u002Fmain\u002Finstall.sh | bash\n```\n\nOr with npm directly:\n\n```bash\nnpm install -g little-coder\n```\n\nOr with [bun](https:\u002F\u002Fbun.sh):\n\n```bash\nbun add -g little-coder\n```\n\nThat's the whole install. No clone, no `npm install` in a workspace, no PATH fiddling. `little-coder` is now on your PATH and works from any directory.\n\n> **Note for `bun add -g` users.** The launcher (`bin\u002Flittle-coder.mjs`) is a Node.js script with `#!\u002Fusr\u002Fbin\u002Fenv node` at the top, so Node ≥ 20.6 still has to be on your PATH for the binary to start — bun is fine for installing\u002Fupdating the package, but the runtime is Node. If you want a fully node-less setup, replace the shebang in `$(bun pm bin -g)\u002Flittle-coder` with `#!\u002Fusr\u002Fbin\u002Fenv bun`.\n\n## Run\n\n```bash\ncd ~\u002Fyour-project\nlittle-coder --model llamacpp\u002Fqwen3.6-35b-a3b\n```\n\nThis is the canonical setup little-coder is tuned for: a local llama.cpp server hosting Qwen3.6-35B-A3B. See **[Local model setup (optional)](#local-model-setup-optional)** below for how to serve it.\n\nCloud models work the same way:\n\n```bash\nlittle-coder --model anthropic\u002Fclaude-haiku-4-5\nlittle-coder --model openai\u002Fgpt-4o-mini \"What does this codebase do?\"\nlittle-coder --model ollama\u002Fqwen3.5             # local Ollama\nlittle-coder --list-models                      # see everything pi knows about\n```\n\nThe agent uses the directory you launched it from as its working directory — `Read` \u002F `Write` \u002F `Edit` \u002F `Bash` operate on your project, not on little-coder's install path.\n\nFor local providers (llama.cpp, Ollama) pi expects *some* value in the API-key env even though local servers ignore it:\n\n```bash\nexport LLAMACPP_API_KEY=noop\nexport OLLAMA_API_KEY=noop\n```\n\n`LLAMACPP_BASE_URL` and `OLLAMA_BASE_URL` override the defaults (`http:\u002F\u002F127.0.0.1:8888\u002Fv1`, `http:\u002F\u002F127.0.0.1:11434\u002Fv1`).\n\nFor cloud providers, set the standard env (`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, etc.) and pi will discover it.\n\n## Local model setup (optional)\n\nSkip this section if you're using a cloud model.\n\n**Option A — llama.cpp** (fastest for local; supports Qwen3.6-35B-A3B MoE):\n\n```bash\n# One-time: build llama.cpp with CUDA (sm_XXX = your GPU arch; Blackwell = 120)\ngit clone https:\u002F\u002Fgithub.com\u002Fggml-org\u002Fllama.cpp && cd llama.cpp\ncmake -B build -DGGML_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES=120 -DLLAMA_CURL=ON\ncmake --build build --config Release -j\n\n# Fetch a GGUF\npip install -U \"huggingface_hub[cli]\"\nhf download unsloth\u002FQwen3.6-35B-A3B-GGUF Qwen3.6-35B-A3B-UD-Q4_K_M.gguf --local-dir ~\u002Fmodels\n\n# Serve it (MoE trick: experts in RAM, attention on GPU → 22 GB model on 8 GB VRAM)\nbuild\u002Fbin\u002Fllama-server -m ~\u002Fmodels\u002FQwen3.6-35B-A3B-UD-Q4_K_M.gguf \\\n   --host 127.0.0.1 --port 8888 --jinja \\\n   -c 16384 -ngl 99 --n-cpu-moe 999 --flash-attn on\n```\n\n**Option B — Ollama** (simpler, but slower on MoE):\n\n```bash\ncurl -fsSL https:\u002F\u002Follama.com\u002Finstall.sh | sh\nollama pull qwen3.5        # 9.7B — the paper's model\n# or: ollama pull qwen3.6-35b-a3b\n```\n\nAll small-model-specific extensions auto-disable for large\u002Fcloud models so they don't interfere.\n\n---\n\n## Configuring models\n\nThe shipped model list lives in **`models.json`** at the package root. The `llama-cpp-provider` extension reads it at startup and registers each provider via pi's `registerProvider()`. Editing this file in your global install **does** take effect — but it's overwritten on `npm install -g little-coder@latest`, so for anything you want to keep, use a user override file instead.\n\nUser override resolution (first match wins):\n\n1. `$LITTLE_CODER_MODELS_FILE` — explicit path, useful for ad-hoc tests.\n2. `$XDG_CONFIG_HOME\u002Flittle-coder\u002Fmodels.json`\n3. `~\u002F.config\u002Flittle-coder\u002Fmodels.json`\n\nMerge semantics: each top-level provider key in your override file **fully replaces** the same key in the shipped `models.json`. Providers only in your file are added; providers only in the shipped file are kept. (We don't deep-merge per-model fields — you redeclare the whole provider entry, which avoids \"your override silently inherited new fields from a future package release\" surprises.)\n\nExample — switch the llama.cpp port and bump `qwen3.6-35b-a3b` to a 150K context, leave ollama untouched:\n\n```json\n{\n  \"providers\": {\n    \"llamacpp\": {\n      \"api\": \"openai-completions\",\n      \"baseUrl\": \"http:\u002F\u002F127.0.0.1:1234\u002Fv1\",\n      \"apiKey\": \"LLAMACPP_API_KEY\",\n      \"models\": [\n        {\n          \"id\": \"qwen3.6-35b-a3b\",\n          \"name\": \"Qwen3.6-35B-A3B (local llama.cpp, 150K)\",\n          \"reasoning\": true,\n          \"input\": [\"text\"],\n          \"contextWindow\": 150000,\n          \"maxTokens\": 4096,\n          \"cost\": { \"input\": 0, \"output\": 0, \"cacheRead\": 0, \"cacheWrite\": 0 }\n        }\n      ]\n    }\n  }\n}\n```\n\nThen verify with `little-coder --list-models` — you should see your overridden entry.\n\n`LLAMACPP_BASE_URL` and `OLLAMA_BASE_URL` env vars still beat both files for those two providers (legacy compat).\n\n`.pi\u002Fsettings.json` is a separate concern: it controls per-model **profiles** (context_limit, thinking_budget, temperature, benchmark_overrides) referenced by the `\u003Cprovider>\u002F\u003Cid>` key. Profiles don't register or describe models — they only tune how little-coder runs against models that are already registered.\n\n---\n\n## Permissions\n\nlittle-coder gates `Bash` tool calls against a built-in safe-prefix whitelist (`ls`, `cat`, `git log\u002Fstatus\u002Fdiff`, `find`, `grep`, etc.) before pi's own confirmation flow ever sees them.\n\nTwo env vars control the gate:\n\n| Env var | Values | Effect |\n|---|---|---|\n| `LITTLE_CODER_PERMISSION_MODE` | `auto` *(default)* \u002F `accept-all` \u002F `manual` | `auto`: block any bash command not on the whitelist. `accept-all`: skip the gate entirely, every bash call passes (the benchmark runner sets this). `manual`: same as `auto` but with a different rejection message. |\n| `LITTLE_CODER_BASH_ALLOW` | comma-separated prefixes | Extra allow-prefixes merged with the built-in list. **Trailing whitespace is meaningful**: `\"make \"` allows `make test` but not `makefoo`; `\"make\"` allows both. |\n\nExamples:\n\n```bash\n# Add 'make' (with word-boundary) and 'docker compose ps' on top of the defaults\nexport LITTLE_CODER_BASH_ALLOW=\"make ,docker compose ps\"\n\n# Skip the gate entirely (use this only inside controlled environments)\nexport LITTLE_CODER_PERMISSION_MODE=accept-all\n```\n\nWrite\u002FEdit confirmations are pi's responsibility; little-coder doesn't intercept those.\n\n---\n\n## Paper \u002F benchmark results\n\n| Release | Model | Benchmark | Result |\n|---|---|---|---|\n| [**v0.0.2**](https:\u002F\u002Fgithub.com\u002Fitayinbarr\u002Flittle-coder\u002Freleases\u002Ftag\u002Fv0.0.2) (commit `1d62bde`) — the paper | Qwen3.5-9B via Ollama | Aider Polyglot (225 exercises) | **45.56 %** mean of two runs; matched-model vanilla Aider baseline 19.11 %. Paper: [*Honey, I Shrunk the Coding Agent* on Substack](https:\u002F\u002Fopen.substack.com\u002Fpub\u002Fitayinbarr\u002Fp\u002Fhoney-i-shrunk-the-coding-agent). |\n| [**v0.0.5**](https:\u002F\u002Fgithub.com\u002Fitayinbarr\u002Flittle-coder\u002Freleases\u002Ftag\u002Fv0.0.5) — pre-pi Python | Qwen3.6-35B-A3B via llama.cpp | Aider Polyglot | **78.67 %**. [Full narrative](docs\u002Fbenchmark-qwen3.6-35b-a3b.md). |\n| [**v0.1.4**](https:\u002F\u002Fgithub.com\u002Fitayinbarr\u002Flittle-coder\u002Freleases\u002Ftag\u002Fv0.1.4) — on pi | Qwen3.6-35B-A3B via llama.cpp | Terminal-Bench-Core v0.1.1 (80 tasks) | **40.0 %** in 6 h 50 min. [Write-up](docs\u002Fbenchmark-terminal-bench-v0.1.1.md). |\n| [**v0.1.13**](https:\u002F\u002Fgithub.com\u002Fitayinbarr\u002Flittle-coder\u002Freleases\u002Ftag\u002Fv0.1.13) — on pi, TB 2.0 leaderboard | Qwen3.6-35B-A3B via llama.cpp | Terminal-Bench 2.0 (89 tasks × 5 trials = 445) | **23.82 %** (106 \u002F 445). [PR #158](https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002Fharborframework\u002Fterminal-bench-2-leaderboard\u002Fdiscussions\u002F158) — awaiting maintainer merge. |\n| [**v0.1.24**](https:\u002F\u002Fgithub.com\u002Fitayinbarr\u002Flittle-coder\u002Freleases\u002Ftag\u002Fv0.1.24) — on pi, TB 2.0 leaderboard, smaller model | Qwen3.5-9B (Q4_K_M) via llama.cpp (5.3 GB on GPU, 2× faster per-token than the 35B-A3B) | Terminal-Bench 2.0 (89 tasks × 5 trials = 445) | **9.21 %** (41 \u002F 445). [PR #163](https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002Fharborframework\u002Fterminal-bench-2-leaderboard\u002Fdiscussions\u002F163) — awaiting maintainer merge. |\n| [**v0.1.27**](https:\u002F\u002Fgithub.com\u002Fitayinbarr\u002Flittle-coder\u002Freleases\u002Ftag\u002Fv0.1.27) — on pi, GAIA validation | Qwen3.6-35B-A3B via llama.cpp | GAIA validation set (165 tasks) | **40.00 %** (66 \u002F 165). L1 60.4 % \u002F L2 37.2 % \u002F L3 7.7 %. Test-split run pending. |\n\nAll runs used a consumer laptop: i9-14900HX, 32 GB RAM, **8 GB VRAM** on RTX 5070 Laptop (Blackwell). No cloud inference at any point.\n\n---\n\n## Roadmap\n\nThe near-term focus is **benchmarking**, not new features. The paper established that scaffold–model fit moves a 9.7 B model from 19 % to 45 % on Aider Polyglot. The open question is: **how wide is the impact radius?** Does the same set of adaptations — Write-vs-Edit invariant, per-turn skill injection, thinking-budget cap, output-repair, quality monitor — help on tasks that *aren't* self-contained coding exercises? What breaks? What compounds?\n\nThe plan is to establish a wide baseline before any further scaffolding changes:\n\n1. **Aider Polyglot** — done. 45.56 % (paper, Qwen3.5-9B) and 78.67 % (v0.0.5, Qwen3.6-35B-A3B).\n2. **Terminal-Bench-Core v0.1.1** — done. 40.0 % (v0.1.4).\n3. **Terminal-Bench 2.0** — done. Qwen3.6-35B-A3B at **23.82 %** ([PR #158](https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002Fharborframework\u002Fterminal-bench-2-leaderboard\u002Fdiscussions\u002F158)) and Qwen3.5-9B at **9.21 %** ([PR #163](https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002Fharborframework\u002Fterminal-bench-2-leaderboard\u002Fdiscussions\u002F163)), both awaiting maintainer merge. The v0.1.24 prompt-repetition fix (re-add tool descriptions + concision guideline, validated by a 4 \u002F 4 pilot on the previously-regressing `prove-plus-comm` task) was the prompt for both submissions.\n4. **GAIA** — validation set done at v0.1.27: **40.00 %** (66 \u002F 165) on Qwen3.6-35B-A3B. Per-level L1 60.4 % \u002F L2 37.2 % \u002F L3 7.7 %. Test-split run (301 tasks) pending → leaderboard submission to follow.\n5. **SWE-bench Verified** — after GAIA. Multi-file real-world patches; the longest-horizon test of whether the scaffolding generalizes past exercise-scale tasks.\n\n**After that baseline is in place**, the next phase starts: improvement experiments targeted at the specific failure patterns we've seen (thinking-budget \u002F quality-monitor behavior on long-horizon tasks, deliberate.py-style parallel branches on failure, better shell-session recovery for interactive-process traps). No scaffold changes until the data says which ones are worth running.\n\n---\n\n## Troubleshooting\n\n**`little-coder: command not found`** — npm's global bin directory isn't on your PATH. Run `npm config get prefix` to see where it installed; add `\u003Cprefix>\u002Fbin` to your PATH. Or reinstall with `sudo` if your prefix needs root.\n\n**`ECONNREFUSED 127.0.0.1:8888`** — llama.cpp isn't running. Start `llama-server` first, or switch `--model` to an Ollama\u002Fcloud ID.\n\n**No API key env var warning** — pi expects *some* key even for local providers. Export `LLAMACPP_API_KEY=noop` (or `OLLAMA_API_KEY=noop`) before launching.\n\n**Extension load failures on startup** — run `little-coder --list-models --verbose`; extension errors surface there. If the install looks corrupt: `npm uninstall -g little-coder && npm install -g little-coder`.\n\n**Node version too old** — little-coder needs Node ≥ 20.6.0. Check with `node --version`. Easiest fix: `nvm install 20 && nvm use 20`.\n\n---\n\n## Developing little-coder locally\n\nIf you want to hack on the extensions or skills:\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fitayinbarr\u002Flittle-coder.git\ncd little-coder\nnpm install\nnpm link            # makes the local checkout available as `little-coder`\nlittle-coder --model llamacpp\u002Fqwen3.6-35b-a3b\n```\n\nTo unlink: `npm unlink -g little-coder`.\n\nThe benchmarks harness (`benchmarks\u002F`) is dev-only and not shipped with the npm package. Run it from a clone with `python3 benchmarks\u002Faider_polyglot.py …` etc.\n\n---\n\n## Architecture\n\n```\nlittle-coder\u002F\n├── .pi\u002F\n│   ├── settings.json               # per-model profiles + benchmark_overrides (terminal_bench, gaia)\n│   └── extensions\u002F                 # 20 TypeScript extensions, auto-discovered by pi\n│       ├── llama-cpp-provider\u002F     # data-driven provider registration from models.json (+ user override file)\n│       ├── write-guard\u002F            # Write refuses on existing files — the whitepaper invariant\n│       ├── extra-tools\u002F            # glob, webfetch, websearch (pi ships grep\u002Ffind)\n│       ├── skill-inject\u002F           # per-turn tool-skill selection (error > recency > intent)\n│       ├── knowledge-inject\u002F       # algorithm cheat-sheet scoring (word=1.0, bigram=2.0, threshold=2.0)\n│       ├── output-parser\u002F          # repair malformed ```tool, \u003Ctool_call>, bare JSON\n│       ├── quality-monitor\u002F        # empty \u002F hallucinated \u002F loop detection + correction follow-up\n│       ├── thinking-budget\u002F        # cap thinking tokens per turn, retry with thinking off\n│       ├── permission-gate\u002F        # bash whitelist (ls, cat, git log\u002Fstatus\u002Fdiff, etc.)\n│       ├── checkpoint\u002F             # snapshot files before Write\u002FEdit\n│       ├── tool-gating\u002F            # enforces _allowed_tools at exec + schema levels\n│       ├── turn-cap\u002F               # max_turns abort (Polyglot unbounded, TB 40, GAIA 30)\n│       ├── benchmark-profiles\u002F     # reads settings.json → systemPromptOptions + sets temperature\n│       ├── shell-session\u002F          # ShellSession[Cwd|Reset] — tmux-proxy + subprocess backends\n│       ├── browser\u002F                # Playwright BrowserNavigate\u002FClick\u002FType\u002FScroll\u002FExtract\u002FBack\u002FHistory\n│       ├── evidence\u002F               # EvidenceAdd\u002FGet\u002FList — per-session store, 1 KB snippet cap\n│       └── evidence-compact\u002F       # preserves evidence across pi's auto-compaction\n├── skills\u002F                         # 30 markdown files the extensions inject on demand\n│   ├── tools\u002F*.md                  #   14 tool-usage cards\n│   ├── knowledge\u002F*.md              #   13 algorithm cheat sheets\n│   └── protocols\u002F*.md              #    3 research\u002Fcite\u002Fdecomposition workflows\n├── benchmarks\u002F\n│   ├── rpc_client.py               # PiRpc — spawns `pi --mode rpc`, demuxes events + UI requests\n│   ├── aider_polyglot.py           # Polyglot driver with per-language transforms\n│   ├── tb_adapter\u002F                 # Terminal-Bench 1.0 BaseAgent (tmux-proxy)\n│   ├── harbor_adapter\u002F             # Terminal-Bench 2.0 BaseAgent (async env.exec proxy)\n│   ├── tb_pilot.sh \u002F harbor_pilot.sh\n│   ├── tb_status.sh \u002F harbor_status.sh\n│   └── test_rpc_client.py\n├── AGENTS.md                       # project system prompt (pi discovers it automatically)\n├── models.json                     # canonical provider registration (loaded by llama-cpp-provider; user override at $XDG_CONFIG_HOME\u002Flittle-coder\u002Fmodels.json)\n└── docs\u002F\n    ├── benchmark-*.md              # per-benchmark narratives\n    └── architecture.md             # v0.0.5-era Python architecture (historical)\n```\n\n**Key invariant.** pi is a minimal base by design. Every little-coder mechanism ships as a pi extension that hooks pi's lifecycle events (`before_agent_start`, `context`, `before_provider_request`, `tool_call`, `tool_result`, `turn_end`, `session_compact`). Extensions are independent and can be enabled\u002Fdisabled per deployment via `.pi\u002Fsettings.json`. If you don't want one, delete its directory or disable it in settings; if you want to add another, drop it next to the existing ones.\n\n---\n\n## Reproducing the paper (v0.0.2)\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fitayinbarr\u002Flittle-coder.git\ncd little-coder\ngit checkout v0.0.2\n# Follow that version's README for its Python setup (pip install -e .)\n```\n\nThe paper ran `ollama\u002Fqwen3.5` through the Python little-coder at commit **`1d62bde`** (tag [`v0.0.2`](https:\u002F\u002Fgithub.com\u002Fitayinbarr\u002Flittle-coder\u002Freleases\u002Ftag\u002Fv0.0.2)). The 45.56 % mean figure is the average of two full 225-exercise runs on that exact codebase. For the 78.67 % headline, check out tag [`v0.0.5`](https:\u002F\u002Fgithub.com\u002Fitayinbarr\u002Flittle-coder\u002Freleases\u002Ftag\u002Fv0.0.5) — both are pre-pi Python and follow the pre-pi setup.\n\n---\n\n## Citation\n\n```bibtex\n@misc{inbar2026littlecoder,\n  title        = {little-coder: A Coding Agent Optimized for Small Local Language Models},\n  subtitle     = {Architectural Adaptation Lets a 9.7B Model Outperform Frontier Models on Aider Polyglot},\n  author       = {Inbar, Itay},\n  year         = {2026},\n  month        = apr,\n  howpublished = {\\url{https:\u002F\u002Fopen.substack.com\u002Fpub\u002Fitayinbarr\u002Fp\u002Fhoney-i-shrunk-the-coding-agent}},\n  note         = {White paper}\n}\n```\n\n---\n\n## Attribution\n\nlittle-coder v0.0.x was a derivative work of [CheetahClaws \u002F ClawSpring](https:\u002F\u002Fgithub.com\u002FSafeRL-Lab\u002Fclawspring) by SafeRL-Lab, Apache 2.0. That upstream provided the Python agent substrate, tool system, multi-provider support, and REPL.\n\nlittle-coder v0.1.0+ replaces that substrate with **[pi](https:\u002F\u002Fgithub.com\u002Fbadlogic\u002Fpi-mono)** (`@mariozechner\u002Fpi-coding-agent`) by Mario Zechner — Apache 2.0 \u002F MIT. pi provides the agent loop, provider abstraction, TUI, and extension model. little-coder rebuilds its small-model adaptations on top of pi as extensions.\n\nAll little-coder-specific mechanisms — Write-vs-Edit invariant, skill \u002F knowledge injection, thinking-budget cap, output-parser, quality-monitor, per-model profiles, per-benchmark overrides, ShellSession \u002F Browser \u002F Evidence tool families, evidence-aware compaction — are preserved across versions.\n\n---\n\n## License\n\nApache 2.0 — see [LICENSE](LICENSE) for details. NOTICE tracks upstream attribution.\n","little-coder 是一个专为小型本地模型优化的编码助手。它基于 pi 构建，通过添加 20 个扩展和 30 个技能 Markdown 文件来增强功能，并提供了一个 Python 基准测试框架。该项目采用 TypeScript 编写，支持多种本地和云端语言模型，如 Qwen、Claude 和 GPT-4 等。其核心特点是能够有效利用较小规模的语言模型（例如 9.7B 参数的 Qwen），在代码生成和辅助编程任务上表现出色。适用于需要高效利用计算资源或偏好使用本地部署方案的开发者，特别是在对成本敏感或数据隐私有要求的场景中。",2,"2026-06-11 02:39:15","CREATED_QUERY"]