Pulse Release
qunqin24/Pulse
Release a new Pulse version end to end — checks, bilingual CHANGELOG entry, VERSION, tag, the release workflow, syncing main, and the issue replies that go with it.
A skill your agent uses when testing tool call reliability between OpenCode and afm — captures streaming XML tool call errors, classifies them as afm translation bugs vs model generation errors, and…
$ npx skills add scouzi1966/maclocal-api --skill test-opencode-tooling -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install scouzi1966/maclocal-api test-opencode-tooling --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/scouzi1966/maclocal-api.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/test-opencode-tooling .claude/skills/test-opencode-tooling && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "test-opencode-tooling" agent skill from https://github.com/scouzi1966/maclocal-api/tree/main/.claude/skills/test-opencode-tooling into .claude/skills/test-opencode-tooling/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-opencode-tooling", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/scouzi1966/maclocal-api/tree/main/.claude/skills/test-opencode-toolingType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add scouzi1966/maclocal-api --skill test-opencode-tooling -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install scouzi1966/maclocal-api test-opencode-tooling --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/scouzi1966/maclocal-api.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/test-opencode-tooling .agents/skills/test-opencode-tooling && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "test-opencode-tooling" agent skill from https://github.com/scouzi1966/maclocal-api/tree/main/.claude/skills/test-opencode-tooling into .agents/skills/test-opencode-tooling/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-opencode-tooling", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add scouzi1966/maclocal-api --skill test-opencode-tooling -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install scouzi1966/maclocal-api test-opencode-tooling --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/scouzi1966/maclocal-api.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/test-opencode-tooling .cursor/skills/test-opencode-tooling && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "test-opencode-tooling" agent skill from https://github.com/scouzi1966/maclocal-api/tree/main/.claude/skills/test-opencode-tooling into .cursor/skills/test-opencode-tooling/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-opencode-tooling", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/scouzi1966/maclocal-api.git --path .claude/skills/test-opencode-tooling--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add scouzi1966/maclocal-api --skill test-opencode-tooling -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install scouzi1966/maclocal-api test-opencode-tooling --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/scouzi1966/maclocal-api.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/test-opencode-tooling .gemini/skills/test-opencode-tooling && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "test-opencode-tooling" agent skill from https://github.com/scouzi1966/maclocal-api/tree/main/.claude/skills/test-opencode-tooling into .gemini/skills/test-opencode-tooling/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-opencode-tooling", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install scouzi1966/maclocal-api test-opencode-toolingInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add scouzi1966/maclocal-api --skill test-opencode-tooling -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/scouzi1966/maclocal-api.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/test-opencode-tooling .github/skills/test-opencode-tooling && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "test-opencode-tooling" agent skill from https://github.com/scouzi1966/maclocal-api/tree/main/.claude/skills/test-opencode-tooling into .github/skills/test-opencode-tooling/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-opencode-tooling", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add scouzi1966/maclocal-api --skill test-opencode-tooling -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install scouzi1966/maclocal-api test-opencode-tooling --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/scouzi1966/maclocal-api.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/test-opencode-tooling .opencode/skills/test-opencode-tooling && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "test-opencode-tooling" agent skill from https://github.com/scouzi1966/maclocal-api/tree/main/.claude/skills/test-opencode-tooling into .opencode/skills/test-opencode-tooling/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "test-opencode-tooling", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
test-opencode-toolingA skill your agent uses when testing tool call reliability between OpenCode and afm — captures streaming XML tool call errors, classifies them as afm translation bugs vs model generation errors, and…
Test Opencode Tooling is an agent skill from scouzi1966/maclocal-api. Use when testing tool call reliability between OpenCode and afm — captures streaming XML tool call errors, classifies them as afm translation bugs vs model generation errors, and produces a diagnostic report without fixing anything
Its SKILL.md is about 4.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in AI & LLM Engineering, covering Translation. It works with OpenAI and macOS. The repository describes itself as: 'afm' command cli: macOS server and single prompt mode that exposes Apple's Foundation and MLX Models and other APIs running on your Mac through a single aggregated…. The licence is MIT.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 138ca5d. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
opencodesqlite3gitpython3From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
opencode.aiFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Test Opencode Tooling loads about 4.2k tokens when it runs. Until then it costs about 63 tokens; SKILL.md has 1,402 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from scouzi1966/maclocal-api at commit 138ca5d, republished under its MIT licence (© scouzi1966). 1,402 words, ~4,180 tokens.
.claude/skills/test-opencode-tooling/SKILL.md (or your agent's skills folder).Automated loop that runs OpenCode tasks against afm, captures tool call errors from both sides, classifies each as an afm bug or model error, and generates a report. Does not fix anything.
MACAFM_MLX_MODEL_CACHE=/Volumes/edata/models/vesta-test-cache ./Scripts/list-models.sh--tool-call-parser afm_adaptive_xml, --enable-prefix-caching, --enable-grammar-constraints, --no-think). Recommended: --tool-call-parser afm_adaptive_xml --enable-grammar-constraints — this combination gives the highest tool call success rate (100% on 35B-A3B vs 60% without grammar constraints on realistic workloads)./tmp/opencode-test-TIMESTAMP per run.CRITICAL: opencode run hangs silently without a PTY. It prints one INFO line and freezes — no error, no output. You must use one of these approaches:
opencode serve + run --attach (recommended): Start a headless server, then attach run to it via expect for PTYexpect wrapper: Provides the pseudo-TTY that opencode run requiresOther gotchas:
opencode.json model field must be a string, not an object — "model": "ollama/model-id" not "model": {"default": "..."}npm provider format (@ai-sdk/openai-compatible) is required for custom baseURL — the "api": "openai" format does NOT accept baseURL~/.config/opencode/opencode.json (global) AND $WORKDIR/opencode.json (local) — local overrides globalgit init) for OpenCode to function properlyOpenCode writes logs to ~/.local/share/opencode/log/ in UTC-timestamped files (e.g., 2026-03-09T172212.log). These logs do NOT contain tool call errors or tool input/output. They only log permission checks, bus events, and registry start/complete.
# Find the latest OpenCode log
ls -t ~/.local/share/opencode/log/*.log | head -1
# Monitor the latest log in real-time
tail -f "$(ls -t ~/.local/share/opencode/log/*.log | head -1)"Gotcha: Log filenames use UTC timestamps but ls -lt shows local time. A file named 2026-03-10T001322.log was created at 8:13 PM EDT. Use lsof -p <PID> | grep log to find the current session's log file if it doesn't appear in directory listings yet (OpenCode buffers writes).
When monitoring both afm and OpenCode simultaneously:
/tmp/afm-opencode-test.log (or wherever you tee'd it)~/.local/share/opencode/log/<latest>.logALWAYS start OpenCode with --log-level "DEBUG" --print-logs — both opencode serve and opencode run commands must include these flags.
Tool call inputs, outputs, and errors are stored in OpenCode's SQLite database — not in the log files. This is the only place to get the full JSON of failed tool calls.
Database path: ~/.local/share/opencode/opencode.db
Schema: Tool calls are in the part table as JSON in the data column, keyed by session_id.
# List recent sessions
sqlite3 ~/.local/share/opencode/opencode.db \
"SELECT id, title, datetime(time_created/1000, 'unixepoch', 'localtime') FROM session ORDER BY time_created DESC LIMIT 5;"
# Get ALL tool call errors for a session
sqlite3 ~/.local/share/opencode/opencode.db \
"SELECT data FROM part WHERE session_id = '<SESSION_ID>' AND data LIKE '%\"status\":\"error\"%';"
# Get errors for the most recent session
sqlite3 ~/.local/share/opencode/opencode.db \
"SELECT data FROM part WHERE session_id = (SELECT id FROM session ORDER BY time_created DESC LIMIT 1) AND data LIKE '%\"status\":\"error\"%';"
# Get all edit tool errors across all sessions
sqlite3 ~/.local/share/opencode/opencode.db \
"SELECT data FROM part WHERE data LIKE '%\"tool\":\"edit\"%' AND data LIKE '%\"status\":\"error\"%' ORDER BY time_created DESC LIMIT 10;"Error JSON format:
{
"type": "tool",
"callID": "call_8B05B790A94F4A0EBF2850C0",
"tool": "edit",
"state": {
"status": "error",
"input": {
"filePath": "/path/to/file.py",
"oldString": "text the model expected to find",
"newString": "replacement text"
},
"error": "Error: Could not find oldString in the file. It must match exactly, including whitespace, indentation, and line endings.",
"time": {
"start": 1773102597849,
"end": 1773102597850
}
}
}Successful tool call JSON format:
{
"type": "tool",
"callID": "call_34CB225B0D184310BD64A839",
"tool": "edit",
"state": {
"status": "completed",
"input": {
"filePath": "/path/to/file.py",
"oldString": "...",
"newString": "..."
},
"output": "Edit applied successfully.",
"title": "path/to/file.py",
"metadata": {
"diagnostics": {},
"diff": "Index: /path/to/file.py\n===...",
"filediff": { "file": "...", "before": "...", "after": "..." }
}
}
}Useful queries for test analysis:
# Count tool calls by status for a session
sqlite3 ~/.local/share/opencode/opencode.db \
"SELECT json_extract(data, '$.tool') as tool,
json_extract(data, '$.state.status') as status,
COUNT(*) as cnt
FROM part
WHERE session_id = '<SESSION_ID>' AND json_extract(data, '$.type') = 'tool'
GROUP BY tool, status;"
# Get all tool call inputs/outputs (pipe to jq for pretty-printing)
sqlite3 ~/.local/share/opencode/opencode.db \
"SELECT data FROM part WHERE session_id = '<SESSION_ID>' AND json_extract(data, '$.type') = 'tool';" | python3 -mjson.toolTIMESTAMP=$(date +%Y%m%d_%H%M%S)
TEST_PORT=9877
OC_PORT=4096
REPORT_DIR="test-reports/opencode-tooling-${TIMESTAMP}"
mkdir -p "$REPORT_DIR"Save the user's prompt to a file:
cat > "$REPORT_DIR/prompt.md" << 'PROMPT_EOF'
<paste user's prompt here>
PROMPT_EOFCreate a workdir with git init and config pointing at afm:
OC_WORKDIR="/tmp/opencode-serve-${TIMESTAMP}"
mkdir -p "$OC_WORKDIR"
cd "$OC_WORKDIR" && git init -q && cd -Write the OpenCode config. Must use npm provider with options.baseURL:
cat > "$OC_WORKDIR/opencode.json" << EOF
{
"\$schema": "https://opencode.ai/config.json",
"provider": {
"ollama": {
"npm": "@ai-sdk/openai-compatible",
"name": "afm-test",
"options": {
"baseURL": "http://localhost:${TEST_PORT}/v1"
},
"models": {
"${MODEL}": {
"name": "${MODEL}"
}
}
}
}
}
EOFStart the headless server:
cd "$OC_WORKDIR"
opencode serve --port $OC_PORT --print-logs --log-level DEBUG \
> "$REPORT_DIR/opencode-serve.log" 2>&1 &
OC_SERVE_PID=$!
cd -
# Wait for serve to be ready
until curl -sf http://127.0.0.1:${OC_PORT}/ >/dev/null 2>&1; do sleep 1; doneAFM_DEBUG=1 MACAFM_MLX_MODEL_CACHE=/Volumes/edata/models/vesta-test-cache \
.build/release/afm mlx -m "$MODEL" --port $TEST_PORT -V \
$EXTRA_AFM_FLAGS \
> "$REPORT_DIR/${MODEL_SLUG}-afm.log" 2>&1 &
AFM_PID=$!
# Wait for server ready
until curl -sf http://127.0.0.1:${TEST_PORT}/v1/models >/dev/null 2>&1; do sleep 1; doneWhere MODEL_SLUG is the model ID with / replaced by _.
expect provides the PTY that opencode run requires. The --attach flag connects to the serve instance which already has the config and workdir.
/usr/bin/expect << EXPECT_EOF > "$REPORT_DIR/${MODEL_SLUG}-run${RUN}-opencode.json" 2>&1
set timeout 600
log_user 1
spawn opencode run --attach http://localhost:${OC_PORT} --log-level "DEBUG" --print-logs --format json "${PROMPT}"
expect {
timeout { puts "TIMEOUT"; exit 1 }
eof { puts "EOF"; exit 0 }
}
EXPECT_EOFThe --format json flag outputs structured JSON events:
{"type":"tool_use",...} — tool call with input/output/error{"type":"text",...} — assistant text content{"type":"step_start",...} / {"type":"step_finish",...} — generation boundariesEach run creates a new session on the same serve instance. The timeout (600s = 10 min) should be enough for most PRDs — increase for complex tasks.
IMPORTANT: Clean workdir between iterations. Before each run, remove all generated files from the OpenCode workdir so that results from a previous iteration don't contaminate the next one (e.g., OpenCode's "must read file before overwriting" guard triggers on leftover files). The cleanest approach is to stop opencode serve, recreate the workdir from scratch (rm -rf "$OC_WORKDIR" && mkdir -p "$OC_WORKDIR" && cd "$OC_WORKDIR" && git init -q && cd -), copy the opencode.json config back, and restart opencode serve. This ensures each iteration starts with a pristine empty git repo.
# Between iterations: reset workdir
kill $OC_SERVE_PID 2>/dev/null; wait $OC_SERVE_PID 2>/dev/null
rm -rf "$OC_WORKDIR"
mkdir -p "$OC_WORKDIR"
cd "$OC_WORKDIR" && git init -q && cd -
# Re-copy opencode.json config (same as setup step)
cat > "$OC_WORKDIR/opencode.json" << EOF
{ ... same config as before ... }
EOF
cd "$OC_WORKDIR"
opencode serve --port $OC_PORT --print-logs --log-level DEBUG \
>> "$REPORT_DIR/opencode-serve.log" 2>&1 &
OC_SERVE_PID=$!
cd -
until curl -sf http://127.0.0.1:${OC_PORT}/ >/dev/null 2>&1; do sleep 1; donekill $AFM_PID 2>/dev/null
wait $AFM_PID 2>/dev/nullkill $OC_SERVE_PID 2>/dev/nullFor each run, analyze both log files to extract and classify errors.
-afm.log), look for:| Pattern | Classification |
|---|---|
SKIP false </tool_call> end tag | afm handled correctly (model emitted premature end tag) |
EMIT param[N]: key→... with wrong value | Check if model sent wrong value (model error) or afm mangled it (afm bug) |
RECV </tool_call> with raw= body | Raw model output — compare against what OpenCode received |
extractToolCallsFallback activated | Incremental parser failed, fallback used — note if result was correct |
SEND tool_call fallback: found 0 tool calls | Critical — tool call body couldn't be parsed at all. Usually means model emitted JSON instead of XML inside <tool_call> tags |
SEND tool_call name: with JSON in name | afm extracted JSON payload as function name — model mixed formats |
coerceArgumentTypes log entries | Type coercion activated — check if result matches schema |
Malformed XML in raw body (e.g., <function=X> instead of <parameter=X>) | Model error — wrong XML tag |
Duplicate <parameter=key> tags | Model error — model emitted same param twice |
Missing </function> in body | Model error — incomplete XML generation |
-opencode.json), look for:| Pattern | Classification |
|---|---|
"tool":"invalid" with mangled tool name | afm parsed function name wrong — cross-ref afm SEND tool_call name: log |
"invalid arguments" with undefined values | Parameter was lost — cross-reference afm log to determine if afm dropped it or model never sent it |
"expected number, received string" | Type coercion failed — afm bug if schema had type: "integer" |
| Tool name not in schema | Model hallucinated tool — model error |
"command" undefined for bash tool | Cross-ref afm raw body: if <parameter=command> present → afm bug; if <function=command> → model error |
SyntaxError with \\\" in written files | Possible afm double-escaping of quotes in tool call arguments |
For each OpenCode error:
raw= body from afm's RECV </tool_call> logCreate $REPORT_DIR/report.md:
# OpenCode Tooling Test Report
- Date: TIMESTAMP
- Model(s): ...
- Prompt: (first 200 chars)
- afm flags: ...
- Iterations per model: N
## Summary
| Model | Runs | Tool Calls | Errors | afm Bugs | Model Errors |
|-------|------|------------|--------|----------|--------------|
## Errors by Category
### afm Translation Bugs (model→client)
| # | Model | Run | Tool | Parameter | What Happened | afm Raw Body |
|---|-------|-----|------|-----------|---------------|-------------|
### afm Translation Bugs (schema→model)
| # | Model | Run | Tool | What Happened |
|---|-------|-----|------|---------------|
### Model Generation Errors
| # | Model | Run | Tool | Error Type | Raw Output |
|---|-------|-----|------|------------|------------|
## Raw Logs
- afm: [link to log file]
- OpenCode: [link to json file]Show the user:
type and afm didn't coerce<tool_call>{"name":"write","arguments":{...}}</tool_call> instead of XML <function=write><parameter=...> format. afm's fallback logs found 0 tool calls — content is silently lost. Qwen3-Coder-Next switches formats unpredictably, especially in longer conversations.<function=X> used instead of <parameter=X> (wrong XML tag)})</function> or </parameter>)<parameter=KEY> without wrapping <function=NAME> — parameters emitted without function context\\\"\\\"\\\") in written files — could be afm double-escaping or model pre-escapingraw= log. Without this, you can't classify.-V flag: Without verbose logging, you can't see raw model output or per-parameter emissions. Always use -V.© scouzi1966, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/test-opencode-tooling of scouzi1966/maclocal-api.
Open the folder on GitHubat commit 138ca5d
Test Opencode Tooling next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Test Opencode Tooling this skillscouzi1966/maclocal-api | 345 | — | ~4.2k | Automated safety check: Pass | MIT | |
| Pulse Releasequnqin24/Pulse | 516 | — | ~1.3k | Automated safety check: Pass | Apache-2.0 | |
| Natural Languagedpearson2699/swift-ios-skills | 1.2k | 1 repos | ~3.5k | Automated safety check: Pass | Custom licence | |
| Prompt AdaptAgriciDaniel/claude-prompts | 110 | — | ~793 | Automated safety check: Pass | MIT | |
| AgentSquad for Swift2FastLabs/agent-squad | 7.8k | — | ~3.5k | Automated safety check: Pass | Apache-2.0 | |
| Perfupraullenchai/Rapid-MLX | 3.9k | — | ~1.6k | Automated safety check: Notes | Custom licence |
qunqin24/Pulse
Release a new Pulse version end to end — checks, bilingual CHANGELOG entry, VERSION, tag, the release workflow, syncing main, and the issue replies that go with it.
dpearson2699/swift-ios-skills
Tokenize, tag, and analyze natural language text using Apple's NaturalLanguage framework and translate between languages with the Translation framework.
AgriciDaniel/claude-prompts
Adapt and convert AI prompts between different models and platforms.
2FastLabs/agent-squad
Guides building on-device multi-agent apps in Swift with the AgentSquad framework: which agent, orchestrator, classifier, storage or voice type fits each situation.
raullenchai/Rapid-MLX
Autonomous performance optimization: research, PoC, benchmark, implement, review, PR
ddalcu/mlx-serve
Hook an app, game or script up to the local mlx-serve server for LLM chat, embeddings, image, speech, music, sound effect, video and 3D generation, and Laya/Kev/Clef typed decisions.
scouzi1966/maclocal-api
Maintain and extend AFM (maclocal-api), a Swift OpenAI-compatible local LLM server and CLI for Apple Foundation Models, MLX models, API gateway proxying, and Vision OCR.
scouzi1966/maclocal-api
Build AFM from scratch — submodules, patches, webui, and Swift build.
scouzi1966/maclocal-api
Run and review the Promptfoo-based AFM agentic evaluation suite.
scouzi1966/maclocal-api
Test a pre-built afm binary at any path — runs pre-flight safety checks, then any combination of unit tests, assertions, smart analysis, promptfoo evals, batch validation, OpenAI compat, GPU…
scouzi1966/maclocal-api
A skill your agent uses when user wants to build a PyPI wheel from an existing compiled afm binary and publish to PyPI.
scouzi1966/maclocal-api
Run the maclocal-api (AFM/MLX) test suite — automated assertions and smart analysis.
Categories
A skill your agent uses when testing tool call reliability between OpenCode and afm — captures streaming XML tool call errors, classifies them as afm translation bugs vs model generation errors, and…. Test Opencode Tooling is an agent skill from scouzi1966/maclocal-api.
Test Opencode Tooling fits situations like: testing tool call reliability between OpenCode and afm — captures streaming XML tool call errors; classifies them as afm translation bugs vs model generation errors; produces a diagnostic report without fixing anything.
Run `npx skills add scouzi1966/maclocal-api --skill test-opencode-tooling -a claude-code`. Or copy the skill folder (.claude/skills/test-opencode-tooling in scouzi1966/maclocal-api) into .claude/skills/test-opencode-tooling in your project. Claude Code loads it when a task matches its description.
Run `npx skills add scouzi1966/maclocal-api --skill test-opencode-tooling -a codex`. Or copy the skill folder (.claude/skills/test-opencode-tooling in scouzi1966/maclocal-api) into .agents/skills/test-opencode-tooling in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add scouzi1966/maclocal-api --skill test-opencode-tooling -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/test-opencode-tooling, .gemini/skills/test-opencode-tooling, .github/skills/test-opencode-tooling and .opencode/skills/test-opencode-tooling in your project.
Going by SKILL.md and its folder, Test Opencode Tooling needs the command-line tools its instructions call (opencode, sqlite3, git and python3). Our summary lists: Python 3.
SKILL.md names 1 domain. In commands or code: opencode.ai; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Test Opencode Tooling is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.2k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Test Opencode Tooling: Pulse Release (qunqin24/Pulse, 516 stars), Natural Language (dpearson2699/swift-ios-skills, 1.2k stars), Prompt Adapt (AgriciDaniel/claude-prompts, 110 stars) and AgentSquad for Swift (2FastLabs/agent-squad, 7.8k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
scouzi1966 (a GitHub user) maintains it in scouzi1966/maclocal-api, which has 345 GitHub stars. The repository holds 12 skills in this directory. The repository was last updated on October 5, 2026.
Source: scouzi1966/maclocal-api on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.