Skip to content

feat: harness-agnostic plugin layer — rename claude/ → plugin/, add HarnessConfig registry#148

Open
aboucaud wants to merge 2 commits into
mainfrom
harness-agnostic
Open

feat: harness-agnostic plugin layer — rename claude/ → plugin/, add HarnessConfig registry#148
aboucaud wants to merge 2 commits into
mainfrom
harness-agnostic

Conversation

@aboucaud
Copy link
Copy Markdown
Member

@aboucaud aboucaud commented Jun 3, 2026

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

…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
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Jun 3, 2026

❌ Eval Results

Metric Value
Score 0.00
Build complete
Cost $0.00
Turns 0
Duration 0s
lightcone-cli 0.3.7.dev4+g80af7a0b9 (80af7a0b)
Results Download

Graders

No grader results

Full output
13:26:08 lightcone.eval.build Building lightcone-cli wheel from /home/runner/work/lightcone-cli/lightcone-cli ...
13:26:12 lightcone.eval.build Built lightcone_cli-0.3.7.dev4+g80af7a0b9-py3-none-any.whl (commit 80af7a0b)
13:26:15 lightcone.eval.harness Trial build-snae-0 failed: Failed to create sandbox: Invalid credentials
Traceback (most recent call last):
  File "/home/runner/work/lightcone-cli/lightcone-cli/src/lightcone/eval/harness.py", line 112, in run_trial
    sandbox.create()
  File "/home/runner/work/lightcone-cli/lightcone-cli/src/lightcone/eval/sandbox.py", line 149, in create
    self._sandbox = self._daytona.create(
                    ^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/work/lightcone-cli/lightcone-cli/.venv/lib/python3.12/site-packages/daytona_sdk/_utils/errors.py", line 206, in sync_wrapper
    process_n_raise_exception(e)
  File "/home/runner/work/lightcone-cli/lightcone-cli/.venv/lib/python3.12/site-packages/daytona_sdk/_utils/errors.py", line 139, in process_n_raise_exception
    raise create_daytona_error(
daytona_sdk.common.errors.DaytonaAuthenticationError: Failed to create sandbox: Invalid credentials
  snae trial 0: score=0.00 error: Failed to create sandbox: Invalid credentials

lightcone-cli: 0.3.7.dev4+g80af7a0b9 (HEAD 80af7a0b)
ASTRA: 0.2.9

  Eval Results: Scores  
┏━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Task ┃     Score     ┃
┡━━━━━━╇━━━━━━━━━━━━━━━┩
│ snae │ 0.00 +/- 0.00 │
│      │  pass@k: 0%   │
│      │   1 errors    │
└──────┴───────────────┘

   Eval Results: Cost &   
         Duration         
┏━━━━━━┳━━━━━━━━━━━━━━━━━┓
┃ Task ┃ Cost / Duration ┃
┡━━━━━━╇━━━━━━━━━━━━━━━━━┩
│ snae │      $0.00      │
│      │       0s        │
└──────┴─────────────────┘

Total: 1 trials, $0.00, 0s

Results saved to: eval-results/build-80af7a0b/results.json

@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented Jun 3, 2026

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants