When a harness has no README.md, skill_intro is an empty string.
The previous code unconditionally appended " - ..." producing malformed
output like "Command-line interface for TestApp - ..." in SKILL.md
YAML frontmatter.
Also fixed: when skill_intro is non-empty but <=100 chars, no ellipsis
is appended (previously appended to complete text).
Applied the same fix to both:
- cli-anything-plugin/skill_generator.py (line 118)
- mubu/agent-harness/skill_generator.py (line 238)
Updated test_harness_without_readme to assert skill_description is
well-formed when intro is empty.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1. Replace all hardcoded /Users/whitenoise-oc/ dev paths in SEACLIP.md
and TEST.md files (seaclip, pm2, chromadb) with generic placeholders
2. Extract shared _EXTRA_PATH_DIRS constant and _augmented_path() helper
in pm2_backend.py so _find_pm2() and _build_env() use identical logic
3. Open SQLite in read-only mode (file:...?mode=ro) in _query_db()
4. Add trailing newline to registry.json
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove unused imports (load_project, save_project, etc.)
- Use shlex.split() in REPL for proper quoted-path handling
- Pass json_mode to _error() in REPL for consistent JSON errors
- Add --trajectory-reference to inspect web/web-export commands
- Add --heatmap/--trajectory to web-export command
- Validate --history/--history-dir in baseline decision (fail fast)
- Combine --history and --history-dir instead of ignoring one
- Add JSON validation with clear errors in baseline_decision backend
- Add try/except to info version command
- Pass --plot to backend instead of post-hoc dict mutation
CloudAnalyzer is a QA platform for mapping, localization, and
perception point cloud outputs with 32 CLI commands.
Unlike other harnesses, the backend imports CloudAnalyzer's Python
API directly (no subprocess needed). Includes Click CLI with --json
on all commands, project/session management, REPL, SKILL.md, and
unit + E2E tests (14 passed).
One-shot commands start a fresh Session each run, so in-memory changes
were silently discarded without an explicit 'document save'. This ports
the same pattern already used in the Shotcut harness (commit 17a30ba):
- Add -s/--save flag to the cli() group
- Register ctx.call_on_close(_auto_save_callback)
- _auto_save_callback saves if session is modified and not in REPL mode
- Implemented a new CLI wrapper for the Dify workflow DSL, allowing users to create, inspect, validate, edit, export, and layout workflows through a unified command-line interface.
- Added REPL functionality for interactive command execution.
- Created utility functions for backend command resolution and subprocess execution.
- Developed comprehensive test suite covering core functionality and end-to-end scenarios.
- Included installation instructions and usage documentation in SKILL.md.
- Updated registry.json to include the new Dify Workflow entry with installation and usage details.
Must fix:
- Merge conflicts with main resolved
- Remove hardcoded developer path in seaclip_backend.py; require SEACLIP_DB
env var for SQLite queries (raises RuntimeError if unset)
- Switch all three setup.py from find_packages() to
find_namespace_packages(include=["cli_anything.*"])
- Remove global os.environ["PATH"] mutation in pm2_backend.py; use
shutil.which(path=...) with a local variable instead
Should fix:
- Align PM2 SKILL.md format with existing convention (name + description
with >- folding syntax, command group tables)
- Add missing setup.py fields: classifiers, extras_require, package_data,
include_package_data, zip_safe, url, consistent author
All 91 unit tests pass (25 seaclip + 28 pm2 + 38 chromadb).
Keep all new CLI entries (exa, sts2, rms, renderdoc, videocaptioner,
intelwatch, clibrowser, cloudcompare) and incorporate the godot entry
added on main.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1. Fix project_save --output parameter: add Click parameter name
mapping so --output correctly maps to output_path
2. Use functools.wraps in handle_error decorator to preserve
__click_params__ and other attributes
3. Fix test count mismatch: OPENSCREEN.md now shows 101 (78+23),
TEST.md table updated with missing test row and correct numbering
4. Replace raw input() with skin.sub_input() in REPL add flows
(zoom, speed, trim, crop) to use prompt_toolkit when available
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1. Rename pi-extension/ to .pi-extension/ to match Pi auto-discovery
convention. Update root README install instructions to reference
correct path and install.sh workflow instead of non-existent
.pi-extension/extensions/cli-anything/.
2. Move test_skill_generator.py from .pi-extension/cli-anything/tests/
to cli-anything-plugin/tests/ (next to skill_generator.py) so it
runs standalone without fragile parent-navigation fallbacks.
Update install.sh to copy tests during global install.
31/31 pytest tests pass.
- Reformat PR body to match repo template
- Add Exa to root README (category table, software grid, directory tree)
- Add comment explaining different build_contents_param() usage in search vs get_contents
- Document that server status consumes 1 search credit
- Clarify auto=neural in --type help text
- Remove stale noqa: SIM114 comment
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix REPL to use skin.get_input() instead of skin.prompt() so it
actually reads user input
- Use shlex.split() instead of str.split() to preserve quoted arguments
- Remove unnecessary ImportError guard on ReplSkin (prompt-toolkit is
optional within ReplSkin itself)
- Deduplicate get_contents() by reusing build_contents_param()
- Use shutil.which() instead of shelling out to `which` in tests
- Fix get_client() docstring to match actual RuntimeError raise
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
cli.main() re-invokes the root group callback on every dispatch, which
already resets _json_output = use_json before any output runs — so the
reset in finally was a no-op.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Prevents --json from leaking across subsequent REPL commands when a
user types e.g. `--json search "foo"` — the global was left True for
all following commands in the session.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Web search with neural/fast/instant/deep/deep-reasoning modes
- Find similar pages by URL
- Fetch full-text or highlighted page contents
- LLM-synthesised answers with cited sources
- Category filters, domain filters, date filters, geo-bias
- --json flag for agent-native output on all commands
- Interactive REPL mode
- 40 unit tests passing (no API calls required)
- E2E test suite (requires EXA_API_KEY)
- registry.json entry added
Merge best-of-both from manual CLI harness and HARNESS.md auto-generated
version. Adds update/query helpers, input validation, sorted list output,
_resolve_cli test helper, and 51 new tests covering edge cases.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a complete CLI harness for Openscreen (https://github.com/siddharthvaddem/openscreen),
an Electron-based screen recording editor. The harness provides agent-native access to
zoom effects, speed ramps, trim, crop, annotations, backgrounds, and polished video exports
via ffmpeg.
- 50 tests (37 unit + 13 E2E) all passing
- Full segment-based rendering pipeline (crop+scale zoom, setpts+atempo speed)
- Session management with 50-level undo/redo
- REPL mode with prompt-toolkit
- JSON and human-readable output modes
- SKILL.md for AI agent discovery
- OPENSCREEN.md SOP document
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds .pi-extension directory with full CLI-Anything plugin support:
- 5 slash commands: /cli-anything, /cli-anything:refine,
/cli-anything:test, /cli-anything:validate, /cli-anything:list
- Full HARNESS.md methodology documentation
- Guides for skill generation, PyPI publishing, MCP backend, etc.
- Utility scripts: repl_skin.py, skill_generator.py, setup-cli-anything.sh
- SKILL.md template for AI-discoverable skill definitions
- README.md documenting the extension structure and usage
- Updated root README.md to include Pi as a supported platform
- setup.py: add description, long_description, package_data for SKILL.md
- wiremock_cli.py: explicit encoding="utf-8" on all file reads
- wiremock_cli.py: stub_get, request_find, request_unmatched now have
human-mode formatting instead of always printing raw JSON
- test_full_e2e.py: use shutil.which() instead of subprocess `which`
- test_full_e2e.py: fix all envelope assertions to match raw API JSON output
- stubs.py: quick_stub body check uses `is not None` for empty string support
- wiremock_cli.py: CLI option overrides use `is not None` for falsy values