[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7EPF74MAAD0ASYGKA5FRZK2":3,"skill-same:01M7EPF74MAAD0ASYGKA5FRZK2":93},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":14,"repositoryHtmlUrl":27,"repositoryHomepageUrl":6,"ownerHtmlUrl":28,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":29,"install":30,"resources":43},"01M7EPF74MAAD0ASYGKA5FRZK2","llama-bridge",null,"Operate and tune Llama Bridge, the local Ollama delegation bridge served by this plugin (off until llamabridge.on): delegate a subtask, pick a model that fits the task AND the machine, verify the output, run background jobs, and try it all with no GPU through scripts\u002Ffake_ollama.py and scripts\u002Fbridge_smoke.py. Covers bridge 1.4.0-vb.1's think, options and sized window, ollama_status's spill line, and the field notes (waiting is not silence; one job at a time). Triggers on 'llama bridge', 'delegate to ollama', 'offload to a local model', 'which model fits', 'is the bridge working', 'smoke test the bridge', 'fake ollama', 'num_ctx', 'think false', 'model spilled'. Bryant Frankford's operating manual (v1.4) is carried whole below; this garden's additions follow it.","inputloop\u002Fgarden","inputloop","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F339507215?v=4","01M7ENYT15EMVBAV30YXPQDYE2","Inputloop","01M7ENYT1SM9WM5PSMQDC9PE2G",0,"GPL-3.0","https:\u002F\u002Fgithub.com\u002Finputloop\u002Fgarden\u002Fblob\u002Fmain\u002Fskills\u002Fllama-bridge\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: llama-bridge\ndescription: \"Operate and tune Llama Bridge, the local Ollama delegation bridge served by this plugin (off until llamabridge.on): delegate a subtask, pick a model that fits the task AND the machine, verify the output, run background jobs, and try it all with no GPU through scripts\u002Ffake_ollama.py and scripts\u002Fbridge_smoke.py. Covers bridge 1.4.0-vb.1's think, options and sized window, ollama_status's spill line, and the field notes (waiting is not silence; one job at a time). Triggers on 'llama bridge', 'delegate to ollama', 'offload to a local model', 'which model fits', 'is the bridge working', 'smoke test the bridge', 'fake ollama', 'num_ctx', 'think false', 'model spilled'. Bryant Frankford's operating manual (v1.4) is carried whole below; this garden's additions follow it.\"\n---\n\n# Llama Bridge: operation, delegation, and this garden's vb.1\n\nThis skill is two texts, kept apart so either side can see what the other changed:\n\n1. **Bryant Frankford's manual for bridge v1.4**, carried byte for byte from his 2026-10-05\n   bundle (its frontmatter left out; sha256 of his whole file `16b32644...ecc17d3`). Where it says\n   \"this skill\", it means the whole of this one.\n2. **This garden's additions for 1.4.0-vb.1**, after it: what the bridge here does that his\n   1.4.0 does not, how to try it before tuning, how to fit a model to the machine, and the field\n   notes from running it on Avalon.\n\nNothing of his is removed or reworded. His tool list, his model ladder and his decision procedure\nall still hold on vb.1; the additions only add parameters and checks.\n\n\u003C!-- his text begins: Bryant Frankford, llama-bridge SKILL.md v1.4, CC-BY-SA-4.0 -->\n\n# Llama Bridge — operation & delegation manual\n\nLlama Bridge is a single-file, pure-Python tool with two parts sharing one\nSQLite database: an **MCP server** Claude connects to, and a local **web\ndashboard** (http:\u002F\u002F127.0.0.1:8765) for monitoring and control. It lets Claude\nhand well-scoped subtasks to local Ollama models to save Claude tokens, logs\nevery delegation, and can auto-pick models, verify output, cache results, run\nlong jobs in the background, and learn which models are good at what.\n\nThis skill owns *operating* the bridge and *how* to delegate well. The decision\nof *when* to offload lives in `omni-tool` (canonical) and `skilltank` (Curate\nstage); this skill and those two should stay in sync.\n\n## The tools (MCP)\n\n| Tool | Purpose |\n|---|---|\n| `delegate_task` | Run a prompt on Ollama; returns the output. `model` optional. |\n| `delegate_async` | Start a delegation in the background; returns a job id. |\n| `delegate_result` | Poll a background job by id for status\u002Fresult. |\n| `list_models` | Installed models (name, params, size). |\n| `recommend_model` | Preview the auto-pick for a task (+ optional budget). |\n| `model_scoreboard` | Per model x task: uses, rating, verified %, tok\u002Fs. |\n| `warm_model` | Preload a model into memory (avoid cold start). |\n| `ollama_status` | Is Ollama up? version + loaded models. |\n| `get_stats` | Delegations, Claude tokens saved, cost avoided, cache hits, latency. |\n\n## Operating it\n\n- **Install \u002F connect:** `python llama_bridge.py install` prints an MCP config\n  JSON and a `claude mcp add` command. Paste the JSON into the Claude MCP config\n  (e.g. `claude_desktop_config.json`) or run the CLI command, then **restart\n  Claude** so it loads the tools. Schema changes (new params\u002Ftools) require a\n  restart to appear.\n- **Run the dashboard:** `python llama_bridge.py` (opens the dashboard). Flags:\n  `--port`, `--ollama-host`, `--db`, `--no-browser`.\n- **Run both together:** the dashboard and MCP server share the DB, so the\n  dashboard shows Claude's delegations live.\n- **Requirements:** Python 3.8+ and Ollama running locally with at least one\n  model pulled (`ollama pull llama3.2:3b`).\n\n## Choosing the right model — the core discipline\n\n`recommend_model` and `task_type` auto-select are conveniences, **not an oracle**.\nSince bridge v1.4 the picker is family-aware (code -> coder, vision -> vision,\neverything else -> general; a coder model is only picked for a non-code task when\nnothing else is installed), ratings need >=3 votes before they influence the\npick, and the auto-collected verified-rate breaks ties. It still can't judge\ndifficulty or stakes, so run the pick past the two checks below before you\naccept it.\n\n### 1. Match the model FAMILY to the task family\n\n| Task family | Use | Avoid |\n|---|---|---|\n| Write \u002F refactor \u002F explain code, emit strict formats | a **coder** model (e.g. `qwen3-coder`) | tiny general models |\n| Image, screenshot, OCR, describe-a-picture | a **vision** model (`*-vision`, `*-vl`) | any text-only model (it literally can't see) |\n| World knowledge, vocabulary, naming, creative, summarize, classify, extract, plain JSON | a **general** instruction-tuned model (`gemma*`, `qwen2.5`, `llama3.*`) | defaulting to the biggest *coder* model just because it's biggest — coder-tuning trades world-knowledge for code |\n\nThe failure mode to remember: picking a model by *size* alone. Biggest ≠ best-fit.\nA 12B general model usually beats a 30B coder model at \"name 20 common fruits.\"\n\n### 2. Match the model SIZE to difficulty and stakes\n\nA rough capability ladder (calibrate to what's installed via `list_models`):\n\n| Tier | Examples | Reach for it when |\n|---|---|---|\n| ~3B | `llama3.2:3b` | trivial, high-volume, trivially verifiable: boolean\u002Flabel classify, tiny reformat, yes\u002Fno extraction |\n| ~7–8B | `qwen2.5:7b`, `gemma4:latest` | everyday summarize \u002F classify \u002F extract, simple structured output |\n| ~12B | `gemma4:12b` | broader knowledge, multi-constraint instructions, cleaner JSON discipline |\n| ~30B | `qwen3-coder:30b` | hardest reasoning or real code; **slow → always `delegate_async`** |\n\nRule of thumb: **start at the smallest model that could plausibly pass your\nchecks, and let `escalate_to` climb on failure** — you pay big-model latency only\nwhen you actually need it. Exception: if the task genuinely needs world-knowledge,\njump straight to a ≥12B **general** model rather than stacking a weak 7B and\nhoping.\n\n### 3. Don't outsource machine-checkable constraints — enforce them in code\n\nThis is the highest-leverage rule in this file. If a rule can be checked or fixed\nby a regex or a loop — exact length, exact count, dedup, allowed charset, output\nformat — **do not push it onto the model.** A hard constraint distorts the\nmodel's output to satisfy it: told \"every word 4–8 letters,\" a small model will\n*truncate* `elephant → eleph` and `broccoli → brocc` rather than pick a word that\nnaturally fits. The JSON still parses; the content is junk.\n\nInstead: **ask the model for the creative\u002Fknowledge part with loose bounds, tell\nit to over-generate, then filter\u002Fdedupe\u002Ftrim\u002Fvalidate in code.** Model does\nideation; code does enforcement. Over-generating (ask for 20, keep 12) gives the\nfilter room to drop anything that fails.\n\n### 4. Verify semantically, not just structurally\n\n`require_json` and `min_length` prove *shape*, not *correctness* — output can pass\nboth and still be garbage. And `escalate_to` only fires when a check **fails**, so\nweak checks mean escalation never triggers and bad output sails through.\n\n- Make at least one check able to catch the *real* failure mode (content, not just\n  format): `must_include` for required tokens, or validate each item in code\n  after the call.\n- If you can't cheaply express a check that would catch failure, verify the output\n  in code post-hoc — or keep the task on Claude.\n- `[UNVERIFIED …]` is the system working: never ship it; redo on Claude.\n- Two checks run on **every** delegation since v1.4, even with none requested:\n  **empty output**, and **likely prompt truncation** (the model evaluated far\n  fewer prompt tokens than the prompt contains, meaning the context window\n  silently clipped the input). Both count as failed checks, so they trigger\n  `escalate_to`.\n\n### 5. Let the scoreboard steer you\n\n`model_scoreboard` shows verified % per model×task family (cache hits are\nexcluded, so the number reflects real runs) — prefer models with a real track\nrecord for *this* family, and rate results (👍\u002F👎) so auto-select keeps\nimproving. Ratings and verified-rate need >=3 samples before the picker trusts\nthem. A high verified % on \"json\" tells you nothing about \"vision.\"\n\n### Decision procedure (run every delegation through this)\n\n1. Classify the task family: code \u002F vision \u002F knowledge \u002F structured \u002F bulk-simple.\n2. Pick a **family-appropriate** model at the **smallest size** that could pass\n   your checks. Sanity-check `recommend_model`'s answer against steps 1–2; override\n   it when the family is wrong.\n3. Move every machine-checkable constraint into code. Give the model **loose\n   bounds** and tell it to **over-generate**.\n4. Define a check that catches the real failure mode (semantic, not just format).\n5. Set `escalate_to` a larger **same-family** model (when the bridge\n   auto-selects, it pre-fills this with the next size up in the same family).\n6. Big model → `delegate_async` + poll. Verify (in code if needed). Ship only on\n   pass; otherwise redo on Claude.\n\n### Worked example — the trap and the fix\n\n**Wrong** (model enforces the hard constraint → truncation):\n\n```\ndelegate_task(model=\"qwen2.5:7b\", require_json=true, min_length=400,\n  prompt=\"8 categories, exactly 12 words each, every word 4–8 letters, JSON.\")\n# → valid JSON, but \"elephant\"→\"eleph\", \"broccoli\"→\"brocc\". Checks passed; content junk.\n```\n\n**Right** (general model + loose bounds + over-generate, then filter in code):\n\n```\ndelegate_async(model=\"gemma4:12b\",           # general knowledge, not a coder model\n  require_json=true, escalate_to=\"qwen3-coder:30b\",\n  prompt=\"For each of these 8 categories, list 20 common single words, \"\n         \"spelled in full — do NOT abbreviate or truncate. JSON only.\")\n# then in code: lowercase → \u002F^[a-z]+$\u002F → keep length 4–8 → dedupe → take 12 → backfill if short.\n```\n\n## Delegating — the recipe\n\n1. **Pick by task family first, then size** (see \"Choosing the right model\"). Pass\n   `task_type` (code, json, extract, classify, summarize, vision, general) +\n   `budget` (`fast`, `balanced`, `quality`) to auto-select, but override the pick\n   when its family is wrong. Name a `model` explicitly whenever you have a clear\n   fit in mind.\n2. **Keep hard constraints in code, not the prompt.** Over-generate loosely;\n   filter\u002Fdedupe\u002Fvalidate after. (Rule 3 above.)\n3. **Verify in proportion to risk, and make checks catch the real failure.**\n   `require_json` (also puts Ollama in JSON mode), `must_include` (+ `ignore_case`\n   when a token's case varies), `min_length`. Set `escalate_to` a bigger\n   same-family model to retry once on failure — it only fires on a failed\n   check, but the always-on empty-output and truncation checks (v1.4) mean\n   auto-selected runs get a working ladder without any checks from you.\n4. **Slow\u002Flarge models:** use `delegate_async` + poll `delegate_result` so you\n   never hit the blocking tool timeout (a 30B can run ~a minute).\n5. **Caching:** identical requests return instantly and free; pass `no_cache:\n   true` for nondeterministic tasks. Only verified results are cached.\n6. **Speed:** `warm_model` (or set a dashboard default) to avoid cold starts.\n7. **Close the loop:** rate results 👍\u002F👎 on the dashboard so auto-selection\n   improves.\n\nExample (structured extraction, verified, with fallback):\n\n```\ndelegate_task(\n  task_type=\"json\", budget=\"fast\", require_json=true,\n  must_include=[\"name\",\"role\"], escalate_to=\"qwen2.5:7b\",\n  prompt=\"Extract name and role as JSON from: ...\"\n)\n```\n\n## Reading results\n\n- Clean text → trust it (verified or no checks requested).\n- `[UNVERIFIED on \u003Cmodel>: \u003Creasons>] ...` → **do not ship**; redo the subtask\n  on Claude. The flag is the safety net working.\n- `[escalated to \u003Cmodel>, verified]` → a bigger model rescued it; fine to use.\n- `[auto-selected \u003Cmodel>]` → which model the bridge picked when `model` omitted.\n  If it's a family mismatch for the task, re-run with an explicit `model`.\n\n## The dashboard\n\nShows Ollama status; installed models (pull \u002F delete \u002F warm \u002F set default);\na **Test a delegation** panel (streams tokens live, supports auto task_type +\nbudget); the **activity log** (click a row for prompt\u002Fresponse, cost, tok\u002Fs, and\n👍\u002F👎 rating); the **model scoreboard**; **background jobs**; and stats +\ncontrols for keep-alive, token prices, and the response cache. Since v1.4:\n\"cost avoided\" is **net** (output price minus the input price Claude pays to\nread the result back); the API answers only requests with a localhost\nHost\u002FOrigin (DNS-rebinding and CSRF hardened); the cache self-prunes (30-day\nTTL, 1000-entry cap).\n\n## Troubleshooting\n\n- **Ollama unreachable \u002F no model:** `ollama_status` to confirm. Delegation is an\n  optimization, not a dependency — just do the task on Claude.\n- **Tool timed out on a big model:** switch to `delegate_async` + `delegate_result`.\n- **Model truncated \u002F distorted words to satisfy a rule** (e.g. `elephant`→`eleph`):\n  you put a hard constraint in the prompt. Remove it, ask the model to over-generate\n  loosely, and enforce the constraint in code (Rule 3). A bigger model helps a\n  little; moving the constraint out of the prompt fixes it.\n- **Output passed `require_json`\u002F`min_length` but is wrong:** shape checks aren't\n  content checks. Add `must_include` or validate items in code, and set\n  `escalate_to` — escalation only fires on a failed check (Rule 4).\n- **A coder model got picked for a knowledge\u002Fcreative task:** shouldn't happen\n  since v1.4 (family-aware picker) unless only coder models are installed. Name\n  a general model explicitly, or pull one.\n- **`prompt likely truncated` in checks_failed:** the prompt overflowed the\n  model's context window and Ollama clipped it silently. Escalation fires\n  automatically if `escalate_to` is set; otherwise shrink the prompt or use a\n  larger-context model. (Rare false positive: KV-cache reuse on a repeated\n  prompt.)\n- **A check false-failed on case (e.g. `\u003C!doctype` vs `\u003C!DOCTYPE`):** add\n  `ignore_case: true`.\n- **Weak output:** raise `budget` to `quality`, or set `escalate_to`; if still\n  `[UNVERIFIED]`, do it yourself.\n- **New param\u002Ftool not visible:** restart the MCP server (schemas cache at\n  connect time).\n- **Only a 30B coder model installed:** code\u002Fquality auto-picks it — use async, and\n  for knowledge tasks lower your expectations or do it on Claude.\n\n## When to offload (brief; full policy in `omni-tool`)\n\nOffload only when the subtask is separable, cheaply checkable or low-stakes,\nsmall-model-shaped (summarize\u002Fclassify\u002Fextract\u002Freformat\u002Ftranslate\u002Fboilerplate\u002F\ndrafts), and worth the overhead (large or repeated payloads). Keep on Claude the\ncore reasoning, high-stakes\u002Firreversible\u002Fsecurity-sensitive work, anything needing\nfull context, tiny tasks, or work you can't cheaply verify.\n\n## Relationship to the Gauntlet\n\n`omni-tool` and `skilltank` decide *whether* to offload and route here;\n**this skill** runs and tunes the delegation — including *which model* and *how to\nverify*; `sandboxer` confirms the output actually landed and rejects `[UNVERIFIED]`;\n`ethicsminions` gates whether the data may be sent at all — even to a local model —\nas a hard stop that outranks any token savings.\n\n## Version note\n\nThis SKILL.md matches bridge **v1.4**, which implements: the family-aware\npicker; rating gate (>=3 votes) + verified-rate tiebreak; auto `escalate_to`\non auto-select; always-on empty-output and prompt-truncation checks; net cost\naccounting (price_out − price_in); localhost Host\u002FOrigin hardening on the\ndashboard API; and response-cache self-pruning. On an older bridge, treat the\npre-v1.4 caveats (size-first picks, silent truncation) as live again.\n\u003C!-- his text ends -->\n\n---\n\n# In this garden: bridge 1.4.0-vb.1\n\n## What vb.1 adds (all in `servers\u002Fpolygram\u002Fmcp\u002Fllama_bridge.py`; the diff for Bryant is `references\u002Fllama_bridge-1.4.0-vb.1.diff`)\n\n| addition | what it does | why |\n|---|---|---|\n| `think` on delegate_task \u002F delegate_async | `true`, `false`, `low`, `medium`, `high`; sent only to a model whose `\u002Fapi\u002Fshow` lists `thinking` | on gemma4:12b a 90-token answer cost 2,725 tokens with thinking on (Avalon, 2026-10-05) |\n| `options` | Ollama options passed through over a config default | `num_ctx`, `num_predict`, `temperature` without a Modelfile variant |\n| a sized window | a model whose own context is very large (gemma4: 262,144) gets one sized to the prompt, from 8,192 up in doubling steps | 52.6 tok\u002Fs at 8,192 against 8.1 tok\u002Fs at the default, and a 2-minute load avoided |\n| one at a time | generate calls queue in the bridge; `delegate_result` says `queued` and how many are ahead | on one GPU, four batches sent at once all timed out while waiting their turn |\n| a thinking note | a result that thought because nobody said not to begins with one line saying so | so the caller learns to pass `think=false` |\n| spill in `ollama_status` | \"62% in GPU memory: the rest runs on the CPU, so it is slow\" | Ollama's own `size_vram`; the cheapest sign a model does not fit |\n| `warm_model` | warms at the window the next call will use | a warm at the default window, then a call at 8,192, loads twice |\n| settings | `python3 llama_bridge.py config [KEY [VALUE]]`, or the dashboard's `\u002Fapi\u002Fconfig` | `think_default`, `options`, `num_ctx_auto`, `num_ctx_floor`, `num_ctx_reserve`, `max_parallel`, `generate_timeout` |\n\nThe cache key includes `think` and `options` only when one is set, so a cache made by 1.4.0\nstill hits. Tests: `tests\u002Ftest_llama_bridge_vb.py` in the source tree, 19 checks, and\n`--prove-red` plants six faults (think dropped, options dropped, no window, a cache blind to\nthink, no queue, think sent to any model); each turns the suite red.\n\n## Try it before tuning anything\n\n    python3 scripts\u002Fbridge_smoke.py                         # the plugin's bridge against fake_ollama\n    python3 scripts\u002Fbridge_smoke.py --host http:\u002F\u002F127.0.0.1:11434 [--model NAME]   # a real Ollama\n    python3 scripts\u002Ffake_ollama.py --port 11435 --log requests.jsonl  # a stand-in to point anything at\n\n`fake_ollama.py` answers every call the bridge makes and writes each request down, so you can see\nwhat the bridge sends (think, window, format) with no GPU and no model. `bridge_smoke.py` reaches\nOllama, lists models, runs one checked delegation and one background job, and says each step in\nwords; against the fake it also shows what was sent. It works on Bryant's 1.4.0 as well (it then\nnotes that no think and no window are sent). The fake runs nothing and measures nothing: speed is\nonly ever learned on the real machine.\n\n## Fit the model to the machine, not only to the task\n\nBryant's rule picks a family, then a size. On a small card, size is also a question of memory:\n\n- **What is free:** the card's memory less what the desktop holds. Avalon: an RTX 3080 with\n  10 GB, about 1.6 GB held by the desktop across five monitors, so about 8.4 GB for models.\n- **What a model needs:** its weights (the tag page's size), plus any draft model Ollama loads\n  with it, plus the context cache at the window it runs with. The window is the part that moves:\n  gemma4:12b at 262,144 does not fit 10 GB; at 8,192 it does.\n- **The sign it did not fit:** `ollama_status` says less than 100% in GPU memory. Then lower the\n  window, use a smaller model, or free memory; do not read a slow answer as a weak model.\n- **Thinking is a token cost, not a memory cost:** set `think=false` for drafting, extracting,\n  classifying and reformatting; leave it on for multi-step reasoning, and give such jobs room\n  (`options.num_predict`, a longer `generate_timeout`).\n- The houseboxer soft skill (`SOFT-SKILLS\u002Fhouseboxer`) collects these facts cheaply and keeps\n  them; `references\u002FPROBE-2026-10-04-ollama-speed.md` is the worked example they came from.\n\n## Field notes (Avalon, 2026-10-04 and 05)\n\n- A delegation that takes longer than the desktop bridge's call limit (about a minute) cannot come\n  back through `delegate_task`: use `delegate_async` and poll `delegate_result`.\n- **Waiting is not silence.** Say what goes before it goes; never two polls without a line to the\n  person; write each job id where the next session can find it (the altorewired skill, grown 03).\n- Send one job at a time, sized to finish well inside `generate_timeout` on the slowest model you\n  use. vb.1 queues them anyway; sizing still decides whether each one finishes.\n- Whether to offload at all is Bryant's `frugal-offload` gate: the output is checkable, the stakes\n  are low, the volume is real, and it is not judgment-heavy. Otherwise keep it on Claude.\n\n## Where the rest of the llama kit is\n\n`references\u002FKIT.md` lists every part (server, switch, tests, this skill, houseboxer, the probe,\nthe cutover card) and where each lives in the plugin, in the source tree, and in Bryant's garden.\n\n## Version note\n\n**1.4.0-vb.1 (2026-10-05):** first garden edition. Bryant's v1.4 manual carried whole; the vb.1\nadditions, the fake and the smoke check written here. The bridge's own version string says\n`1.4.0-vb.1` so no one takes it for his.\n\n---\n*Version 1.0.0: first edition on 2026-10-05; spine: 2026-07-04.*\n\nCopyright 2026 Bryant Frankford \u003Cnathanielfrankford@gmail.com> (his manual, the text between the\nmarkers above) and Corwin Brust \u003Ccorwin@bru.st> and Contributors (the additions); CC-BY-SA4:\nhttps:\u002F\u002Fcreativecommons.org\u002Flicenses\u002Fby-sa\u002F4.0\u002F (scripts GPL-3.0-or-later); Mentat (for Corwin;\nclaude-opus-5-5)\n","# Llama Bridge: operation, delegation, and this garden's vb.1\n\nThis skill is two texts, kept apart so either side can see what the other changed:\n\n1. **Bryant Frankford's manual for bridge v1.4**, carried byte for byte from his 2026-10-05\n   bundle (its frontmatter left out; sha256 of his whole file `16b32644...ecc17d3`). Where it says\n   \"this skill\", it means the whole of this one.\n2. **This garden's additions for 1.4.0-vb.1**, after it: what the bridge here does that his\n   1.4.0 does not, how to try it before tuning, how to fit a model to the machine, and the field\n   notes from running it on Avalon.\n\nNothing of his is removed or reworded. His tool list, his model ladder and his decision procedure\nall still hold on vb.1; the additions only add parameters and checks.\n\n\u003C!-- his text begins: Bryant Frankford, llama-bridge SKILL.md v1.4, CC-BY-SA-4.0 -->\n\n# Llama Bridge — operation & delegation manual\n\nLlama Bridge is a single-file, pure-Python tool with two parts sharing one\nSQLite database: an **MCP server** Claude connects to, and a local **web\ndashboard** (http:\u002F\u002F127.0.0.1:8765) for monitoring and control. It lets Claude\nhand well-scoped subtasks to local Ollama models to save Claude tokens, logs\nevery delegation, and can auto-pick models, verify output, cache results, run\nlong jobs in the background, and learn which models are good at what.\n\nThis skill owns *operating* the bridge and *how* to delegate well. The decision\nof *when* to offload lives in `omni-tool` (canonical) and `skilltank` (Curate\nstage); this skill and those two should stay in sync.\n\n## The tools (MCP)\n\n| Tool | Purpose |\n|---|---|\n| `delegate_task` | Run a prompt on Ollama; returns the output. `model` optional. |\n| `delegate_async` | Start a delegation in the background; returns a job id. |\n| `delegate_result` | Poll a background job by id for status\u002Fresult. |\n| `list_models` | Installed models (name, params, size). |\n| `recommend_model` | Preview the auto-pick for a task (+ optional budget). |\n| `model_scoreboard` | Per model x task: uses, rating, verified %, tok\u002Fs. |\n| `warm_model` | Preload a model into memory (avoid cold start). |\n| `ollama_status` | Is Ollama up? version + loaded models. |\n| `get_stats` | Delegations, Claude tokens saved, cost avoided, cache hits, latency. |\n\n## Operating it\n\n- **Install \u002F connect:** `python llama_bridge.py install` prints an MCP config\n  JSON and a `claude mcp add` command. Paste the JSON into the Claude MCP config\n  (e.g. `claude_desktop_config.json`) or run the CLI command, then **restart\n  Claude** so it loads the tools. Schema changes (new params\u002Ftools) require a\n  restart to appear.\n- **Run the dashboard:** `python llama_bridge.py` (opens the dashboard). Flags:\n  `--port`, `--ollama-host`, `--db`, `--no-browser`.\n- **Run both together:** the dashboard and MCP server share the DB, so the\n  dashboard shows Claude's delegations live.\n- **Requirements:** Python 3.8+ and Ollama running locally with at least one\n  model pulled (`ollama pull llama3.2:3b`).\n\n## Choosing the right model — the core discipline\n\n`recommend_model` and `task_type` auto-select are conveniences, **not an oracle**.\nSince bridge v1.4 the picker is family-aware (code -> coder, vision -> vision,\neverything else -> general; a coder model is only picked for a non-code task when\nnothing else is installed), ratings need >=3 votes before they influence the\npick, and the auto-collected verified-rate breaks ties. It still can't judge\ndifficulty or stakes, so run the pick past the two checks below before you\naccept it.\n\n### 1. Match the model FAMILY to the task family\n\n| Task family | Use | Avoid |\n|---|---|---|\n| Write \u002F refactor \u002F explain code, emit strict formats | a **coder** model (e.g. `qwen3-coder`) | tiny general models |\n| Image, screenshot, OCR, describe-a-picture | a **vision** model (`*-vision`, `*-vl`) | any text-only model (it literally can't see) |\n| World knowledge, vocabulary, naming, creative, summarize, classify, extract, plain JSON | a **general** instruction-tuned model (`gemma*`, `qwen2.5`, `llama3.*`) | defaulting to the biggest *coder* model just because it's biggest — coder-tuning trades world-knowledge for code |\n\nThe failure mode to remember: picking a model by *size* alone. Biggest ≠ best-fit.\nA 12B general model usually beats a 30B coder model at \"name 20 common fruits.\"\n\n### 2. Match the model SIZE to difficulty and stakes\n\nA rough capability ladder (calibrate to what's installed via `list_models`):\n\n| Tier | Examples | Reach for it when |\n|---|---|---|\n| ~3B | `llama3.2:3b` | trivial, high-volume, trivially verifiable: boolean\u002Flabel classify, tiny reformat, yes\u002Fno extraction |\n| ~7–8B | `qwen2.5:7b`, `gemma4:latest` | everyday summarize \u002F classify \u002F extract, simple structured output |\n| ~12B | `gemma4:12b` | broader knowledge, multi-constraint instructions, cleaner JSON discipline |\n| ~30B | `qwen3-coder:30b` | hardest reasoning or real code; **slow → always `delegate_async`** |\n\nRule of thumb: **start at the smallest model that could plausibly pass your\nchecks, and let `escalate_to` climb on failure** — you pay big-model latency only\nwhen you actually need it. Exception: if the task genuinely needs world-knowledge,\njump straight to a ≥12B **general** model rather than stacking a weak 7B and\nhoping.\n\n### 3. Don't outsource machine-checkable constraints — enforce them in code\n\nThis is the highest-leverage rule in this file. If a rule can be checked or fixed\nby a regex or a loop — exact length, exact count, dedup, allowed charset, output\nformat — **do not push it onto the model.** A hard constraint distorts the\nmodel's output to satisfy it: told \"every word 4–8 letters,\" a small model will\n*truncate* `elephant → eleph` and `broccoli → brocc` rather than pick a word that\nnaturally fits. The JSON still parses; the content is junk.\n\nInstead: **ask the model for the creative\u002Fknowledge part with loose bounds, tell\nit to over-generate, then filter\u002Fdedupe\u002Ftrim\u002Fvalidate in code.** Model does\nideation; code does enforcement. Over-generating (ask for 20, keep 12) gives the\nfilter room to drop anything that fails.\n\n### 4. Verify semantically, not just structurally\n\n`require_json` and `min_length` prove *shape*, not *correctness* — output can pass\nboth and still be garbage. And `escalate_to` only fires when a check **fails**, so\nweak checks mean escalation never triggers and bad output sails through.\n\n- Make at least one check able to catch the *real* failure mode (content, not just\n  format): `must_include` for required tokens, or validate each item in code\n  after the call.\n- If you can't cheaply express a check that would catch failure, verify the output\n  in code post-hoc — or keep the task on Claude.\n- `[UNVERIFIED …]` is the system working: never ship it; redo on Claude.\n- Two checks run on **every** delegation since v1.4, even with none requested:\n  **empty output**, and **likely prompt truncation** (the model evaluated far\n  fewer prompt tokens than the prompt contains, meaning the context window\n  silently clipped the input). Both count as failed checks, so they trigger\n  `escalate_to`.\n\n### 5. Let the scoreboard steer you\n\n`model_scoreboard` shows verified % per model×task family (cache hits are\nexcluded, so the number reflects real runs) — prefer models with a real track\nrecord for *this* family, and rate results (👍\u002F👎) so auto-select keeps\nimproving. Ratings and verified-rate need >=3 samples before the picker trusts\nthem. A high verified % on \"json\" tells you nothing about \"vision.\"\n\n### Decision procedure (run every delegation through this)\n\n1. Classify the task family: code \u002F vision \u002F knowledge \u002F structured \u002F bulk-simple.\n2. Pick a **family-appropriate** model at the **smallest size** that could pass\n   your checks. Sanity-check `recommend_model`'s answer against steps 1–2; override\n   it when the family is wrong.\n3. Move every machine-checkable constraint into code. Give the model **loose\n   bounds** and tell it to **over-generate**.\n4. Define a check that catches the real failure mode (semantic, not just format).\n5. Set `escalate_to` a larger **same-family** model (when the bridge\n   auto-selects, it pre-fills this with the next size up in the same family).\n6. Big model → `delegate_async` + poll. Verify (in code if needed). Ship only on\n   pass; otherwise redo on Claude.\n\n### Worked example — the trap and the fix\n\n**Wrong** (model enforces the hard constraint → truncation):\n\n```\ndelegate_task(model=\"qwen2.5:7b\", require_json=true, min_length=400,\n  prompt=\"8 categories, exactly 12 words each, every word 4–8 letters, JSON.\")\n# → valid JSON, but \"elephant\"→\"eleph\", \"broccoli\"→\"brocc\". Checks passed; content junk.\n```\n\n**Right** (general model + loose bounds + over-generate, then filter in code):\n\n```\ndelegate_async(model=\"gemma4:12b\",           # general knowledge, not a coder model\n  require_json=true, escalate_to=\"qwen3-coder:30b\",\n  prompt=\"For each of these 8 categories, list 20 common single words, \"\n         \"spelled in full — do NOT abbreviate or truncate. JSON only.\")\n# then in code: lowercase → \u002F^[a-z]+$\u002F → keep length 4–8 → dedupe → take 12 → backfill if short.\n```\n\n## Delegating — the recipe\n\n1. **Pick by task family first, then size** (see \"Choosing the right model\"). Pass\n   `task_type` (code, json, extract, classify, summarize, vision, general) +\n   `budget` (`fast`, `balanced`, `quality`) to auto-select, but override the pick\n   when its family is wrong. Name a `model` explicitly whenever you have a clear\n   fit in mind.\n2. **Keep hard constraints in code, not the prompt.** Over-generate loosely;\n   filter\u002Fdedupe\u002Fvalidate after. (Rule 3 above.)\n3. **Verify in proportion to risk, and make checks catch the real failure.**\n   `require_json` (also puts Ollama in JSON mode), `must_include` (+ `ignore_case`\n   when a token's case varies), `min_length`. Set `escalate_to` a bigger\n   same-family model to retry once on failure — it only fires on a failed\n   check, but the always-on empty-output and truncation checks (v1.4) mean\n   auto-selected runs get a working ladder without any checks from you.\n4. **Slow\u002Flarge models:** use `delegate_async` + poll `delegate_result` so you\n   never hit the blocking tool timeout (a 30B can run ~a minute).\n5. **Caching:** identical requests return instantly and free; pass `no_cache:\n   true` for nondeterministic tasks. Only verified results are cached.\n6. **Speed:** `warm_model` (or set a dashboard default) to avoid cold starts.\n7. **Close the loop:** rate results 👍\u002F👎 on the dashboard so auto-selection\n   improves.\n\nExample (structured extraction, verified, with fallback):\n\n```\ndelegate_task(\n  task_type=\"json\", budget=\"fast\", require_json=true,\n  must_include=[\"name\",\"role\"], escalate_to=\"qwen2.5:7b\",\n  prompt=\"Extract name and role as JSON from: ...\"\n)\n```\n\n## Reading results\n\n- Clean text → trust it (verified or no checks requested).\n- `[UNVERIFIED on \u003Cmodel>: \u003Creasons>] ...` → **do not ship**; redo the subtask\n  on Claude. The flag is the safety net working.\n- `[escalated to \u003Cmodel>, verified]` → a bigger model rescued it; fine to use.\n- `[auto-selected \u003Cmodel>]` → which model the bridge picked when `model` omitted.\n  If it's a family mismatch for the task, re-run with an explicit `model`.\n\n## The dashboard\n\nShows Ollama status; installed models (pull \u002F delete \u002F warm \u002F set default);\na **Test a delegation** panel (streams tokens live, supports auto task_type +\nbudget); the **activity log** (click a row for prompt\u002Fresponse, cost, tok\u002Fs, and\n👍\u002F👎 rating); the **model scoreboard**; **background jobs**; and stats +\ncontrols for keep-alive, token prices, and the response cache. Since v1.4:\n\"cost avoided\" is **net** (output price minus the input price Claude pays to\nread the result back); the API answers only requests with a localhost\nHost\u002FOrigin (DNS-rebinding and CSRF hardened); the cache self-prunes (30-day\nTTL, 1000-entry cap).\n\n## Troubleshooting\n\n- **Ollama unreachable \u002F no model:** `ollama_status` to confirm. Delegation is an\n  optimization, not a dependency — just do the task on Claude.\n- **Tool timed out on a big model:** switch to `delegate_async` + `delegate_result`.\n- **Model truncated \u002F distorted words to satisfy a rule** (e.g. `elephant`→`eleph`):\n  you put a hard constraint in the prompt. Remove it, ask the model to over-generate\n  loosely, and enforce the constraint in code (Rule 3). A bigger model helps a\n  little; moving the constraint out of the prompt fixes it.\n- **Output passed `require_json`\u002F`min_length` but is wrong:** shape checks aren't\n  content checks. Add `must_include` or validate items in code, and set\n  `escalate_to` — escalation only fires on a failed check (Rule 4).\n- **A coder model got picked for a knowledge\u002Fcreative task:** shouldn't happen\n  since v1.4 (family-aware picker) unless only coder models are installed. Name\n  a general model explicitly, or pull one.\n- **`prompt likely truncated` in checks_failed:** the prompt overflowed the\n  model's context window and Ollama clipped it silently. Escalation fires\n  automatically if `escalate_to` is set; otherwise shrink the prompt or use a\n  larger-context model. (Rare false positive: KV-cache reuse on a repeated\n  prompt.)\n- **A check false-failed on case (e.g. `\u003C!doctype` vs `\u003C!DOCTYPE`):** add\n  `ignore_case: true`.\n- **Weak output:** raise `budget` to `quality`, or set `escalate_to`; if still\n  `[UNVERIFIED]`, do it yourself.\n- **New param\u002Ftool not visible:** restart the MCP server (schemas cache at\n  connect time).\n- **Only a 30B coder model installed:** code\u002Fquality auto-picks it — use async, and\n  for knowledge tasks lower your expectations or do it on Claude.\n\n## When to offload (brief; full policy in `omni-tool`)\n\nOffload only when the subtask is separable, cheaply checkable or low-stakes,\nsmall-model-shaped (summarize\u002Fclassify\u002Fextract\u002Freformat\u002Ftranslate\u002Fboilerplate\u002F\ndrafts), and worth the overhead (large or repeated payloads). Keep on Claude the\ncore reasoning, high-stakes\u002Firreversible\u002Fsecurity-sensitive work, anything needing\nfull context, tiny tasks, or work you can't cheaply verify.\n\n## Relationship to the Gauntlet\n\n`omni-tool` and `skilltank` decide *whether* to offload and route here;\n**this skill** runs and tunes the delegation — including *which model* and *how to\nverify*; `sandboxer` confirms the output actually landed and rejects `[UNVERIFIED]`;\n`ethicsminions` gates whether the data may be sent at all — even to a local model —\nas a hard stop that outranks any token savings.\n\n## Version note\n\nThis SKILL.md matches bridge **v1.4**, which implements: the family-aware\npicker; rating gate (>=3 votes) + verified-rate tiebreak; auto `escalate_to`\non auto-select; always-on empty-output and prompt-truncation checks; net cost\naccounting (price_out − price_in); localhost Host\u002FOrigin hardening on the\ndashboard API; and response-cache self-pruning. On an older bridge, treat the\npre-v1.4 caveats (size-first picks, silent truncation) as live again.\n\u003C!-- his text ends -->\n\n---\n\n# In this garden: bridge 1.4.0-vb.1\n\n## What vb.1 adds (all in `servers\u002Fpolygram\u002Fmcp\u002Fllama_bridge.py`; the diff for Bryant is `references\u002Fllama_bridge-1.4.0-vb.1.diff`)\n\n| addition | what it does | why |\n|---|---|---|\n| `think` on delegate_task \u002F delegate_async | `true`, `false`, `low`, `medium`, `high`; sent only to a model whose `\u002Fapi\u002Fshow` lists `thinking` | on gemma4:12b a 90-token answer cost 2,725 tokens with thinking on (Avalon, 2026-10-05) |\n| `options` | Ollama options passed through over a config default | `num_ctx`, `num_predict`, `temperature` without a Modelfile variant |\n| a sized window | a model whose own context is very large (gemma4: 262,144) gets one sized to the prompt, from 8,192 up in doubling steps | 52.6 tok\u002Fs at 8,192 against 8.1 tok\u002Fs at the default, and a 2-minute load avoided |\n| one at a time | generate calls queue in the bridge; `delegate_result` says `queued` and how many are ahead | on one GPU, four batches sent at once all timed out while waiting their turn |\n| a thinking note | a result that thought because nobody said not to begins with one line saying so | so the caller learns to pass `think=false` |\n| spill in `ollama_status` | \"62% in GPU memory: the rest runs on the CPU, so it is slow\" | Ollama's own `size_vram`; the cheapest sign a model does not fit |\n| `warm_model` | warms at the window the next call will use | a warm at the default window, then a call at 8,192, loads twice |\n| settings | `python3 llama_bridge.py config [KEY [VALUE]]`, or the dashboard's `\u002Fapi\u002Fconfig` | `think_default`, `options`, `num_ctx_auto`, `num_ctx_floor`, `num_ctx_reserve`, `max_parallel`, `generate_timeout` |\n\nThe cache key includes `think` and `options` only when one is set, so a cache made by 1.4.0\nstill hits. Tests: `tests\u002Ftest_llama_bridge_vb.py` in the source tree, 19 checks, and\n`--prove-red` plants six faults (think dropped, options dropped, no window, a cache blind to\nthink, no queue, think sent to any model); each turns the suite red.\n\n## Try it before tuning anything\n\n    python3 scripts\u002Fbridge_smoke.py                         # the plugin's bridge against fake_ollama\n    python3 scripts\u002Fbridge_smoke.py --host http:\u002F\u002F127.0.0.1:11434 [--model NAME]   # a real Ollama\n    python3 scripts\u002Ffake_ollama.py --port 11435 --log requests.jsonl  # a stand-in to point anything at\n\n`fake_ollama.py` answers every call the bridge makes and writes each request down, so you can see\nwhat the bridge sends (think, window, format) with no GPU and no model. `bridge_smoke.py` reaches\nOllama, lists models, runs one checked delegation and one background job, and says each step in\nwords; against the fake it also shows what was sent. It works on Bryant's 1.4.0 as well (it then\nnotes that no think and no window are sent). The fake runs nothing and measures nothing: speed is\nonly ever learned on the real machine.\n\n## Fit the model to the machine, not only to the task\n\nBryant's rule picks a family, then a size. On a small card, size is also a question of memory:\n\n- **What is free:** the card's memory less what the desktop holds. Avalon: an RTX 3080 with\n  10 GB, about 1.6 GB held by the desktop across five monitors, so about 8.4 GB for models.\n- **What a model needs:** its weights (the tag page's size), plus any draft model Ollama loads\n  with it, plus the context cache at the window it runs with. The window is the part that moves:\n  gemma4:12b at 262,144 does not fit 10 GB; at 8,192 it does.\n- **The sign it did not fit:** `ollama_status` says less than 100% in GPU memory. Then lower the\n  window, use a smaller model, or free memory; do not read a slow answer as a weak model.\n- **Thinking is a token cost, not a memory cost:** set `think=false` for drafting, extracting,\n  classifying and reformatting; leave it on for multi-step reasoning, and give such jobs room\n  (`options.num_predict`, a longer `generate_timeout`).\n- The houseboxer soft skill (`SOFT-SKILLS\u002Fhouseboxer`) collects these facts cheaply and keeps\n  them; `references\u002FPROBE-2026-10-04-ollama-speed.md` is the worked example they came from.\n\n## Field notes (Avalon, 2026-10-04 and 05)\n\n- A delegation that takes longer than the desktop bridge's call limit (about a minute) cannot come\n  back through `delegate_task`: use `delegate_async` and poll `delegate_result`.\n- **Waiting is not silence.** Say what goes before it goes; never two polls without a line to the\n  person; write each job id where the next session can find it (the altorewired skill, grown 03).\n- Send one job at a time, sized to finish well inside `generate_timeout` on the slowest model you\n  use. vb.1 queues them anyway; sizing still decides whether each one finishes.\n- Whether to offload at all is Bryant's `frugal-offload` gate: the output is checkable, the stakes\n  are low, the volume is real, and it is not judgment-heavy. Otherwise keep it on Claude.\n\n## Where the rest of the llama kit is\n\n`references\u002FKIT.md` lists every part (server, switch, tests, this skill, houseboxer, the probe,\nthe cutover card) and where each lives in the plugin, in the source tree, and in Bryant's garden.\n\n## Version note\n\n**1.4.0-vb.1 (2026-10-05):** first garden edition. Bryant's v1.4 manual carried whole; the vb.1\nadditions, the fake and the smoke check written here. The bridge's own version string says\n`1.4.0-vb.1` so no one takes it for his.\n\n---\n*Version 1.0.0: first edition on 2026-10-05; spine: 2026-07-04.*\n\nCopyright 2026 Bryant Frankford \u003Cnathanielfrankford@gmail.com> (his manual, the text between the\nmarkers above) and Corwin Brust \u003Ccorwin@bru.st> and Contributors (the additions); CC-BY-SA4:\nhttps:\u002F\u002Fcreativecommons.org\u002Flicenses\u002Fby-sa\u002F4.0\u002F (scripts GPL-3.0-or-later); Mentat (for Corwin;\nclaude-opus-5-5)\n",{"name":5,"description":7},"main","0b0a0f665f67605c3bc1d43500eea26ef3079a97","skills\u002Fllama-bridge","https:\u002F\u002Fgithub.com\u002Finputloop\u002Fgarden","https:\u002F\u002Fgithub.com\u002Finputloop","2026-10-14 18:29:39",{"source":8,"skillName":5,"commands":31,"prompt":41,"zipAvailable":42},[32,35,38],{"tool":33,"command":34},"npx","npx skills add inputloop\u002Fgarden --skill llama-bridge",{"tool":36,"command":37},"bunx","bunx skills add inputloop\u002Fgarden --skill llama-bridge",{"tool":39,"command":40},"pnpm","pnpm dlx skills add inputloop\u002Fgarden --skill llama-bridge","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Finputloop\u002Fgarden\u002Fblob\u002Fmain\u002Fskills\u002Fllama-bridge\u002FSKILL.md",true,[44,50,54,58,61,65,71,75,79,83,89],{"path":45,"resourceType":46,"resourceTypeDesc":47,"sizeBytes":48,"sourceHtmlUrl":49},".arc\u002F2026-10\u002Fsignature-2026-10-10_180451Z_pre-manifest.asc","OTHER","其他",659,"https:\u002F\u002Fgithub.com\u002Finputloop\u002Fgarden\u002Fblob\u002Fmain\u002Fskills\u002Fllama-bridge\u002F.arc\u002F2026-10\u002Fsignature-2026-10-10_180451Z_pre-manifest.asc",{"path":51,"resourceType":46,"resourceTypeDesc":47,"sizeBytes":52,"sourceHtmlUrl":53},".arc\u002F2026-10\u002Fskill-manifest-2026-10-10_180451Z_pre-manifest",752,"https:\u002F\u002Fgithub.com\u002Finputloop\u002Fgarden\u002Fblob\u002Fmain\u002Fskills\u002Fllama-bridge\u002F.arc\u002F2026-10\u002Fskill-manifest-2026-10-10_180451Z_pre-manifest",{"path":55,"resourceType":46,"resourceTypeDesc":47,"sizeBytes":56,"sourceHtmlUrl":57},".arc\u002Freferences__CARD-2026-10-05-bridge-cutover.md.signed-2026-10-10",3492,"https:\u002F\u002Fgithub.com\u002Finputloop\u002Fgarden\u002Fblob\u002Fmain\u002Fskills\u002Fllama-bridge\u002F.arc\u002Freferences__CARD-2026-10-05-bridge-cutover.md.signed-2026-10-10",{"path":59,"resourceType":46,"resourceTypeDesc":47,"sizeBytes":52,"sourceHtmlUrl":60},".skill-manifest","https:\u002F\u002Fgithub.com\u002Finputloop\u002Fgarden\u002Fblob\u002Fmain\u002Fskills\u002Fllama-bridge\u002F.skill-manifest",{"path":62,"resourceType":46,"resourceTypeDesc":47,"sizeBytes":63,"sourceHtmlUrl":64},"FROM",980,"https:\u002F\u002Fgithub.com\u002Finputloop\u002Fgarden\u002Fblob\u002Fmain\u002Fskills\u002Fllama-bridge\u002FFROM",{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"references\u002FCARD-2026-10-05-bridge-cutover.md","REFERENCE","参考文档",3462,"https:\u002F\u002Fgithub.com\u002Finputloop\u002Fgarden\u002Fblob\u002Fmain\u002Fskills\u002Fllama-bridge\u002Freferences\u002FCARD-2026-10-05-bridge-cutover.md",{"path":72,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":73,"sourceHtmlUrl":74},"references\u002FKIT.md",3506,"https:\u002F\u002Fgithub.com\u002Finputloop\u002Fgarden\u002Fblob\u002Fmain\u002Fskills\u002Fllama-bridge\u002Freferences\u002FKIT.md",{"path":76,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":77,"sourceHtmlUrl":78},"references\u002Fllama_bridge-1.4.0-vb.1.diff",28977,"https:\u002F\u002Fgithub.com\u002Finputloop\u002Fgarden\u002Fblob\u002Fmain\u002Fskills\u002Fllama-bridge\u002Freferences\u002Fllama_bridge-1.4.0-vb.1.diff",{"path":80,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":81,"sourceHtmlUrl":82},"references\u002FPROBE-2026-10-04-ollama-speed.md",7236,"https:\u002F\u002Fgithub.com\u002Finputloop\u002Fgarden\u002Fblob\u002Fmain\u002Fskills\u002Fllama-bridge\u002Freferences\u002FPROBE-2026-10-04-ollama-speed.md",{"path":84,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":87,"sourceHtmlUrl":88},"scripts\u002Fbridge_smoke.py","SCRIPT","脚本",6139,"https:\u002F\u002Fgithub.com\u002Finputloop\u002Fgarden\u002Fblob\u002Fmain\u002Fskills\u002Fllama-bridge\u002Fscripts\u002Fbridge_smoke.py",{"path":90,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":91,"sourceHtmlUrl":92},"scripts\u002Ffake_ollama.py",10110,"https:\u002F\u002Fgithub.com\u002Finputloop\u002Fgarden\u002Fblob\u002Fmain\u002Fskills\u002Fllama-bridge\u002Fscripts\u002Ffake_ollama.py",[94,100,106,113,120,127],{"skillNo":95,"name":96,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":19},"01M7EPTX6X52ZPGVQZHKVJ7FAZ","alpha","https:\u002F\u002Fgithub.com\u002Finputloop\u002Fgarden\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Flane-d\u002Fbr1in\u002Fours\u002Fskills\u002Falpha\u002FSKILL.md",[],[],{"skillNo":101,"name":102,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":105,"publishedAt":19},"01M7EPTWCTS80QHFQ2ND3A1CW1","gamma","https:\u002F\u002Fgithub.com\u002Finputloop\u002Fgarden\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Flane-d\u002Fbr1in\u002Fours\u002FSOFT-SKILLS\u002Fgamma\u002FSKILL.md",[],[],{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":112,"publishedAt":19},"01M7EPTV3K3SCTRP0DR6BMMKR0","quiet","A fixture skill that declares no preferences, so skill.quiet.* has no reader.","https:\u002F\u002Fgithub.com\u002Finputloop\u002Fgarden\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Flane-a\u002Fdeclared\u002Fsoft\u002Fquiet\u002FSKILL.md",[],[],{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":19},"01M7EPTSG0VE67F6PFAC0XJDQ4","demo","A fixture skill for tests\u002Fprefs-declared-spec.rb; it declares two preferences inline.","https:\u002F\u002Fgithub.com\u002Finputloop\u002Fgarden\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Flane-a\u002Fdeclared\u002Fsoft\u002Fdemo\u002FSKILL.md",[],[],{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":19},"01M7EPTP0PM5WPTFBHPXBCFM5C","concise","Synthesized by polygram from memory tag 'concise'. explicitly flagged. Review and tighten this description before relying on it for triggering.","https:\u002F\u002Fgithub.com\u002Finputloop\u002Fgarden\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fconcise\u002FSKILL.md",[],[],{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":133,"publishedAt":19},"01M7EPTAETQ62DJA8ZFEEBBZF0","writing-forms","Which writing form a dated deliverable takes in the shop, and the five techniques every form shares. Use whenever someone is about to write a dated deliverable — \"which form is this?\", \"write it up\", \"land a note \u002F card \u002F model \u002F lens\", \"what shape does a … take\", \"is there a form for this\", or when a new PREFIX-date-slug filename is about to be minted. Carries the rule that a deliverable picks ONE form and says so in its filename, points at the register c\u002Fwf (columns d\u002Fc\u002Fwf) as the source of truth, names the most-used forms, the five cross-cutting techniques (two piles · cite at the act · a falsifier on every concern · the pair rule · his words), how a new form is born, and the fence on notes other sessions wrote. Not rolls (report kinds and their guards), not reformat-prompt (the REFORMAT pair), not run-card (the RUNCARD), not skill-creator (skills). Owns the FORM, not the content.","https:\u002F\u002Fgithub.com\u002Finputloop\u002Fgarden\u002Fblob\u002Fmain\u002Fskills\u002Fwriting-forms\u002FSKILL.md",[],[]]