Most harnesses cannot be installed as documented (13 of 68 on PyPI), and ten reach no backend

Author: Kenbin5Created Sep 12, 2026Updated Sep 12, 2026

Opening this after working through four harnesses in #459, #460, #461 and #462. Those PRs fix specific bugs; this issue is about three things that look systemic, each measured rather than inferred. Happy to split it into separate issues if that suits the maintainers better.

Measured on 2026-09-11 against main.

1. 55 of 68 harnesses are not published on PyPI

Every generated SKILL.md instructs pip install cli-anything-<name>. Checking all 68 harness directories against the PyPI JSON API, 13 resolve and 55 return 404:

Published (13): anygen, audacity, blender, drawio, gimp, inkscape, kdenlive, libreoffice, n8n, obs-studio, shotcut, zoom, zotero

Not published (55): 3mf, adguardhome, browser, calibre, cc-switch, chromadb, cloudanalyzer, cloudcompare, comfyui, dify-workflow, eez-studio, eth2-quickstart, exa, firefly-iii, freecad, godot, intelwatch, iterm2, joplin, jumpserver, krita, live2d, lldb, macrocli, mailchimp, mermaid, minimax, mubu, musescore, notebooklm, novita, nsight-graphics, nslogger, obsidian, ollama, openrefine, openscreen, pm2, qgis, quietshrink, rekordbox, renderdoc, rms, safari, sbox, seaclip, siyuan, slay-the-spire-ii, tigris, unimol-tools, unrealinsights, videocaptioner, wavetone, web-yu-pri, wiremock

That includes some of the largest: the FreeCAD harness advertises 258 commands and the Mailchimp one 303, and neither can be installed the way its own skill says.

The code is all in the repo, so this reads like a release-process gap rather than missing work. Two options that would both close it: publish the remaining packages, or change the generated SKILL.md install line to a source install (pip install -e <software>/agent-harness) for anything unpublished.

2. Ten harnesses reach no backend in non-test code

Scanning each harness's production sources (excluding tests/, test_*.py, conftest.py) for any of subprocess, Popen, os.system, requests, urllib, httpx, aiohttp, websocket:

3MF, cc-switch, cloudanalyzer, exa, live2d, mubu, obs-studio, renderdoc, unimol_tools, web-yu-pri

Several of these are legitimate — 3MF, cc-switch and live2d manipulate file formats directly and need no running application. Others appear to contradict their own descriptions:

  • obs-studio — HARNESS.md lists obs-websocket as the backend, but no websocket client is imported.
  • exa — a web search API, with no HTTP client.
  • web-yu-pri — its skill says it drives the real browser UI.

Worth a pass to confirm which are intentionally backend-free and which are incomplete.

3. Blender video output is broken on current Blender

The generated bpy script sets scene.render.image_settings.file_format = 'FFMPEG'. Blender 5.2.1 LTS rejects that:

TypeError: bpy_struct: item.attr = val: enum "FFMPEG" not found in
('AVIF', 'JPEG', 'OPEN_EXR', 'PNG', 'WEBP', 'BMP', 'CINEON', 'DPX',
 'IRIS', 'JPEG2000', 'HDR', 'TARGA', 'TARGA_RAW', 'TIFF')

This predates the PRs above. It was invisible until #459 added --python-exit-code 1, because Blender exits 0 when a bpy script raises:

blender --background --python boom.py                    -> exit 0
blender --background --python-exit-code 1 --python ...   -> exit 1

Two review findings on #459 (frame-template placeholders, and deriving the output suffix from the active FFmpeg container) depend on video output working, so I left them rather than write code I could not run. They would be natural to fix alongside this.

Method

macOS 15, Blender 5.2.1 LTS, SoX 14.4.2, mlt/melt 7.40.0, GIMP 3.2.4. PyPI checked over the JSON API; backend scan over the checked-out tree. Happy to share the exact commands or re-run anything if a maintainer wants to verify.

Generated with Claude Code