local-llm-bridge — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited local-llm-bridge (Agent Skill) and scored it 87/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 3 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 3 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Dispatches bounded tasks directly to the optimized local Gemma 4 12B server at http://localhost:8089/v1/chat/completions. No routing proxy involved. Uses the run_agent.py task router with cli=llama.
[!IMPORTANT] Requires llama-server running on port 8089. Check:curl http://localhost:8089/healthStart:./run_server.shin the local-llm-bench workspace. Thinking is disabled server-side (--reasoning off) — no special flags needed.
The routing proxy (Mode A) carries ~29K tokens of Claude Code system prompt — at ~30 tok/s prefill that costs 60+ seconds per context boundary crossing.
This skill (Mode B) sends only the task prompt — typically 50–500 tokens. At 7+ tok/s generation on M1 Metal with a small context:
| Output length | Typical response time |
|---|---|
| 50 tokens | ~7s |
| 100 tokens | ~14s |
| 200 tokens | ~28s |
Default max_tokens=120 keeps responses terse. Override via code if needed.
run_agent.pypython ./scripts/run_agent.py \
<PERSONA_FILE> <INPUT_FILE> <OUTPUT_FILE> "<INSTRUCTION>" \
--cli llama --max-tokens 120python ./scripts/run_agent.py \
agents/refactor-expert.md \
target.py \
review.md \
"List the top 3 issues in this code. Be terse." \
--cli llamapython ./scripts/run_agent.py \
/dev/null \
changes.diff \
summary.md \
"Summarize this diff in 2 sentences. Focus on risk." \
--cli llama --max-tokens 200python ./scripts/run_agent.py \
/dev/null /dev/null \
answer.md \
"What is the capital of France? One word." \
--cli llama --max-tokens 10Keep prompts lean — this is the primary performance lever:
Avoid: pasting full file trees, long conversation histories, or open-ended "analyze everything" instructions.
| Parameter | Value |
|---|---|
| Server | llama-server :8089 |
| Model | Gemma 4 12B UD-Q4_K_XL |
| GPU offload | -ngl 99 (full Metal) |
| Flash Attention | -fa on |
| Batch sizes | -b 2048 -ub 512 |
| KV cache quant | -ctk q8_0 -ctv q8_0 |
| Thinking | disabled (--reasoning off) |
| Context | 32768 tokens (1 slot) |
agents/)| Persona | Use For |
|---|---|
security-auditor.md | Vulnerability review, risk assessment |
refactor-expert.md | Code cleanup, readability, DRY |
architect-review.md | Design review, modularity check |
scripts/)All scripts are symlinked from the canonical plugins/cli-agents/scripts/ so the skill is self-contained when installed in isolation.
| Script | Purpose |
|---|---|
run_agent.py | Task router — cli=llama dispatches here |
kv_cache_orchestrator.py | KV slot save/restore for repeated persona calls |
run_server.py | Start llama-server with authoritative parameters |
test_run_agent.py | 37 tests: command builders, isolated-flag security contract, llama payload |
routing_proxy.py is NOT included — it is the Mode A API compatibility shim and is not part of this skill's execution path.curl http://localhost:8089/health
python ./scripts/run_agent.py /dev/null /dev/null /tmp/test.md "Say hello in one word." --cli llama
cat /tmp/test.mdcurl http://localhost:8089/health # must return {"status":"ok"}
# If down: python ./scripts/run_server.py~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.