feat: harness-agnostic plugin layer — rename claude/ → plugin/, add HarnessConfig registry#148
Open
aboucaud wants to merge 2 commits into
Open
feat: harness-agnostic plugin layer — rename claude/ → plugin/, add HarnessConfig registry#148aboucaud wants to merge 2 commits into
aboucaud wants to merge 2 commits into
Conversation
…arnessConfig registry Introduces the multi-harness foundation requested in LCR-85: - plugin/lightcone/: renamed from claude/lightcone/ — skills and agents are now stored in a harness-neutral directory; hooks, scripts, and settings remain Claude-specific inside the same tree. - src/lightcone/cli/harness.py: new HarnessConfig dataclass + HARNESS_REGISTRY with a single "claude" entry. New harnesses (Codex, Cursor, etc.) are added one PR at a time — one harness per PR keeps skill-performance verification tractable. - lc init --harness: prompts which AI coding harness to use when the flag is omitted. Currently only "claude" is registered. Skills and agents are installed to .<prefix>/; Claude-specific content (hooks, scripts, settings.json) is gated on harness.has_hooks / harness.has_settings. - AGENTS.md / CLAUDE.md split: lc init now writes AGENTS.md as the harness-neutral project doc for all harnesses. For the Claude harness a lightweight CLAUDE.md shim is also written that delegates to AGENTS.md. - plugin/lightcone/templates/AGENTS.md: renamed from CLAUDE.md; heading updated. lc-from-paper/templates/AGENTS.md likewise renamed. - All CLAUDE.md references across skills, agents, scripts, and docs updated to AGENTS.md (except the Claude-specific shim language in commands.py, sandbox.py docstring, and the root CLAUDE.md itself). - pyproject.toml: force-include and sdist paths updated to plugin/lightcone. - tests/test_harness.py: registry unit tests (8 cases). - tests/test_harness_install.py: install integration tests (8 cases). - All 349 existing tests continue to pass; ruff and mypy clean. https://claude.ai/code/session_013H5Zpn5mmuw4djV7G8xkZ8
❌ Eval Results
GradersNo grader results Full output |
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
lightcone-cli | c2e4ced | Commit Preview URL Branch Preview URL |
Jun 03 2026, 01:26 PM |
…ings coupling, orient shim - sandbox.py: pass --harness claude to lc init subprocess; without it click.prompt() blocks indefinitely on non-interactive stdin in eval trials. - commands.py: write AGENTS.md and CLAUDE.md shim unconditionally after the _install_harness block, using inline constants as fallback. Before this fix both files were only written inside _install_harness(), which is guarded by plugin_source existing — a regression from the old unconditional CLAUDE.md write. - commands.py: fix settings.json gate from `has_settings and hooks is not None` to `has_settings` alone, with hooks included conditionally. The old condition silently skips settings.json for any future harness with has_settings=True but has_hooks=False. - orient.md: instruct lc-from-paper ORIENT to write a CLAUDE.md shim alongside AGENTS.md in the reproduction workdir so Claude Code's walk-up auto-load picks up the reproduction context in every ralph iteration. - test_harness_install.py: add test_agents_md_written_even_when_plugin_source_absent to pin the fallback guarantee. https://claude.ai/code/session_013H5Zpn5mmuw4djV7G8xkZ8
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Introduces the multi-harness foundation requested in LCR-85:
plugin/lightcone/: renamed from claude/lightcone/ — skills and agents are
now stored in a harness-neutral directory; hooks, scripts, and settings remain
Claude-specific inside the same tree.
src/lightcone/cli/harness.py: new HarnessConfig dataclass + HARNESS_REGISTRY
with a single "claude" entry. New harnesses (Codex, Cursor, etc.) are added
one PR at a time — one harness per PR keeps skill-performance verification
tractable.
lc init --harness: prompts which AI coding harness to use when the flag is
omitted. Currently only "claude" is registered. Skills and agents are
installed to ./; Claude-specific content (hooks, scripts,
settings.json) is gated on harness.has_hooks / harness.has_settings.
AGENTS.md / CLAUDE.md split: lc init now writes AGENTS.md as the
harness-neutral project doc for all harnesses. For the Claude harness a
lightweight CLAUDE.md shim is also written that delegates to AGENTS.md.
plugin/lightcone/templates/AGENTS.md: renamed from CLAUDE.md; heading updated.
lc-from-paper/templates/AGENTS.md likewise renamed.
All CLAUDE.md references across skills, agents, scripts, and docs updated to
AGENTS.md (except the Claude-specific shim language in commands.py, sandbox.py
docstring, and the root CLAUDE.md itself).
pyproject.toml: force-include and sdist paths updated to plugin/lightcone.
tests/test_harness.py: registry unit tests (8 cases).
tests/test_harness_install.py: install integration tests (8 cases).
All 349 existing tests continue to pass; ruff and mypy clean.
https://claude.ai/code/session_013H5Zpn5mmuw4djV7G8xkZ8