Skip to content

De-bundle the Claude Code plugin: skills ship from the agent-skills marketplace (LCR-181)#161

Open
cailmdaley wants to merge 23 commits into
mainfrom
cailmdaley/lcr-181-marketplace-skills
Open

De-bundle the Claude Code plugin: skills ship from the agent-skills marketplace (LCR-181)#161
cailmdaley wants to merge 23 commits into
mainfrom
cailmdaley/lcr-181-marketplace-skills

Conversation

@cailmdaley

@cailmdaley cailmdaley commented Jul 19, 2026

Copy link
Copy Markdown
Member

Linear: LCR-181 · Design: de-bundling design doc

This PR de-bundles the Claude Code plugin from the wheel. Skills, hooks, and the lc-extractor agent now ship from the agent-skills marketplace. The CLI keeps the commands, the scaffold, and the compatibility surface the plugin talks to.

The install path

The CLI and the plugin are installed globally, once. Projects only activate.

uv tool install lightcone-cli installs one global command: lc. lc init registers the agent-skills marketplace globally with each harness on the PATH: claude plugin marketplace add for Claude Code, codex plugin marketplace add + codex plugin add for Codex. Registration is idempotent and best-effort; a missing harness is skipped silently.

Activation is per project. lc init writes one key into .claude/settings.json: enabledPlugins. The plugin loads only in lc init directories, on folder trust. The key carries no version and no marketplace source. Codex has no project-scoped plugin config yet (openai/codex#18115), so its plugin stays globally active.

astra is global too. The lightcone-cli wheel exposes both commands, so one uv tool install yields one lc and one astra per machine — no version skew between them. lc init still creates the project venv, but empty — it installs nothing into it. The venv is the project's analysis environment: the plugin's session-start hook activates it, so packages the agent installs land there. Containerized analysis dependencies flow through requirements.txt into the container. When an analysis needs validation against its exact declared spec version, uvx --from astra-tools==X --with astra-spec==Y astra gives a spec-matched toolchain per invocation.

lc init scaffolds new projects only: the target directory must be empty or nonexistent, checked before any file is written. Re-running init and adopting an existing ASTRA project are unsupported — astra init hard-fails on non-empty directories, so a convergent init needs an upstream astra-tools change first (design doc, Open Questions).

The upgrade model

Two artifacts carry two versions:

  • The plugin ships from the marketplace. A skill edit ships without a CLI release.
  • The CLI ships from PyPI via uv. A CLI change that alters the plugin contract requires a plugin version bump.

There is one plugin install per machine, so there is one plugin version per machine. When a CLI change alters the plugin contract, the plugin version bumps with it.

Compatibility enforcement lives on the plugin side, not in this PR. The plugin manifest will declare a compatible lc version range. A harness-agnostic session-start hook will check it against lc version. That work ships from the agent-skills repo (astra plugin: agent-skills#15; the lc-paired compat hooks: stacked agent-skills#17 / LCR-189). Until it lands, the version numbers alone carry the contract. There is no handshake command in the CLI.

Permissions

lc init no longer writes a permission policy. The permission-tier mechanism is removed; the harness owns the trust level. The docs now recommend the harness-native modes: Claude Code's accept-edits and Auto modes, Codex's "Approve for me" (a.k.a. Auto-review). A future best-practices skill could carry this guidance.

Open questions

  • Is the first marketplace release a breaking release? No official release exists yet. The answer decides how much back-compat machinery we owe.
  • Migration. Existing pre-plugin projects, and old plugins that call removed subcommands, are out of scope here. They get their own PR once this design settles. A project init'd during dogfooding keeps a stale extraKnownMarketplaces key in its .claude/settings.json; leaving it is intentional — cleanup belongs to the migration PR.
  • Version scheme. Per-project pinning is off the table: the harness tracks the marketplace's current version, and the install is global. The current direction is a plugin-declared lc version range (minimum, possibly maximum), checked by a session-start hook. The exact scheme is still open. Opinions welcome.

Testing

Full test suite green (344 tests, ruff, mypy).

Merge checklist

  • astra-tools pin — astra-tools 0.2.11 is on PyPI (released 2026-07-23); the git direct reference is gone and the dependency is a plain >=0.2.11 (8bda862).
  • Flip the marketplace ref to the default branch when agent-skills#17 merges (the stacked lightcone CLI-compat PR; Add /prism-feedback skill #15 alone does not put the lc-paired hooks on the default branch). MARKETPLACE_BRANCH in cli/commands.py and the @astra-plugin-rework suffix in eval/sandbox.py track the agent-skills PR branch on purpose (INTERIM comments mark both). One small commit drops them at merge time.
  • Tag the merge commit v0.4.0. The agent-skills plugin declares 0.4.0 ≤ lc < 0.5.0 with 0.4.0 = first de-bundled release. Version is VCS-derived; without the tag every session warns on version skew.

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 19, 2026

Copy link
Copy Markdown

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 a8c1094 Commit Preview URL

Branch Preview URL
Jul 24 2026, 01:39 PM

@github-actions

github-actions Bot commented Jul 19, 2026

Copy link
Copy Markdown

✅ Eval Results

Metric Value
Score 1.00
Build complete
Cost $2.55
Turns 83
Duration 478s
lightcone-cli 0.3.8.dev25+g007cf3865 (007cf386)
Results Download

Graders

✅ spec_valid (1.00)
✅ all_materialized (1.00)

Full output
13:39:10 lightcone.eval.build Building lightcone-cli wheel from /home/runner/work/lightcone-cli/lightcone-cli ...
13:39:15 lightcone.eval.build Built lightcone_cli-0.3.8.dev25+g007cf3865-py3-none-any.whl (commit 007cf386)
13:40:00 lightcone.eval.sandbox Created sandbox ab3168e9-a55e-45f7-aac7-0ad49eea8fd5 for trial build-snae-0
13:40:01 httpx HTTP Request: POST https://proxy.app.daytona.io/toolbox/ab3168e9-a55e-45f7-aac7-0ad49eea8fd5/files/bulk-upload "HTTP/1.1 200 OK"
13:40:02 lightcone.eval.sandbox Installed wheels: ['lightcone_cli-0.3.8.dev25+g007cf3865-py3-none-any.whl']
13:40:05 lightcone.eval.sandbox Headless lightcone plugin install failed (exit 1); trial runs without plugin skills. See LCR-131.
Adding marketplace…✘ Failed to add marketplace: Failed to clone marketplace repository: SSH host key is not in your known_hosts file. To add it, connect once manually (this will show the fingerprint for you to verify):
  ssh -T git@github.com

Or use an HTTPS URL instead (recommended for public repos).

Original error: Cloning into '/home/evaluser/.claude/plugins/marketplaces/LightconeResearch-agent-skills'...
No ED25519 host key is known for github.com and you have requested strict checking.
Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.


13:40:06 httpx HTTP Request: POST https://proxy.app.daytona.io/toolbox/ab3168e9-a55e-45f7-aac7-0ad49eea8fd5/files/bulk-upload "HTTP/1.1 200 OK"
13:40:06 httpx HTTP Request: POST https://proxy.app.daytona.io/toolbox/ab3168e9-a55e-45f7-aac7-0ad49eea8fd5/files/bulk-upload "HTTP/1.1 200 OK"
13:40:06 httpx HTTP Request: POST https://proxy.app.daytona.io/toolbox/ab3168e9-a55e-45f7-aac7-0ad49eea8fd5/files/bulk-upload "HTTP/1.1 200 OK"
13:40:07 httpx HTTP Request: POST https://proxy.app.daytona.io/toolbox/ab3168e9-a55e-45f7-aac7-0ad49eea8fd5/files/bulk-upload "HTTP/1.1 200 OK"
13:48:07 lightcone.eval.sandbox Deleted sandbox for trial build-snae-0
  snae trial 0: score=1.00 complete

lightcone-cli: 0.3.8.dev25+g007cf3865 (HEAD 007cf386)
ASTRA: 0.2.11

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

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

Total: 1 trials, $2.55, 478s

Results saved to: eval-results/build-007cf386/results.json

The skills, hooks, and the lc-extractor subagent leave this wheel. They ship
from the `lightcone` plugin in the `LightconeResearch/agent-skills`
marketplace. `lc init` registers that marketplace and enables the plugin; it
copies no skills, hooks, or agents itself.

- Delete `claude/lightcone/*` (skills, hooks, scripts, agent, templates) and
  the `docs/skills/*` pages; drop the force-include from packaging.
- `lc init` writes `extraKnownMarketplaces` + `enabledPlugins` into
  `.claude/settings.json` instead of copying a skill tree.
- Point every doc and the scaffolded project CLAUDE.md at the new command
  names: `/lc-new` -> `/lightcone:new`, `/lc-from-code` ->
  `/lightcone-experimental:from-code`, `/lc-from-paper` ->
  `/lightcone-experimental:from-paper`, `/lc-cli` -> `/lightcone:cli`,
  `/astra` -> `/lightcone:astra`.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011wWf6Bp7bzZ79vwjkAxsFN
@cailmdaley
cailmdaley force-pushed the cailmdaley/lcr-181-marketplace-skills branch from e98d640 to 9e57d4b Compare July 23, 2026 13:20
cailmdaley and others added 3 commits July 23, 2026 15:25
`lc init` no longer writes a permission policy. Permissions belong to the
harness; the CLI must not impose one. Drop the `--permissions` tier flag and
the settings it wrote.

Documentation keeps an offered-not-imposed "Recommended permissions for
cluster work" section: a starting-point `settings.json`, plus the official
mode names — Claude Code "accept edits"/Auto, Codex approval policies
`untrusted`/`on-request`/`never`. A future best-practices skill may carry it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011wWf6Bp7bzZ79vwjkAxsFN
We do not ship a dormant feature. Claude Code only acts on hints that target
the official Anthropic marketplace, and `lightcone` is not listed there, so the
hint never fired. The discovery story is the `settings.json` trust-prompt
(primary) plus the documented `claude plugin install` command.

- Delete `emit_plugin_hint()` and its call in the group callback.
- Delete the hint test.
- Remove the hint paragraph from `architecture.md` and `api/cli.md`.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011wWf6Bp7bzZ79vwjkAxsFN
`lc init` now converges an ASTRA project onto the lightcone integration. It is
safe to run anywhere, any number of times. There is no separate adopt path.

- A fresh directory gets the full scaffold: `astra init`, `Containerfile`,
  `requirements.txt`, `CLAUDE.md`, optional git and venv, plus the integration
  files.
- An existing ASTRA project keeps its spec and scaffold untouched. `lc init`
  layers on only the missing integration files.

The integration files are written idempotently in both cases: `.lightcone/`
state, `results/`, the `.claude/settings.json` marketplace registration (merged
non-destructively via `_merge_claude_settings`), and the MyST report. `lc init`
reports what it added versus skipped.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011wWf6Bp7bzZ79vwjkAxsFN
@cailmdaley
cailmdaley force-pushed the cailmdaley/lcr-181-marketplace-skills branch 2 times, most recently from 266d61d to dba04cf Compare July 23, 2026 13:31
`astra` is a project-scoped command, not a global export of this wheel. astra-
tools stays a library dependency of lightcone-cli (`lc init` imports
`astra.cli`), but the `astra` executable belongs to the project's venv.

`lc init`'s venv step now also installs astra-tools (the new
`ASTRA_TOOLS_REQUIREMENT` constant) into the project `.venv`, so
`.venv/bin/astra` exists. The plugin's activate-venv SessionStart hook prepends
`.venv/bin` to PATH, so an `astra` invoked inside the project resolves to that
copy. The install is best-effort: on failure `lc init` warns and continues
rather than failing the scaffold.

The install happens only in the venv-creation path, which runs for fresh
scaffolds. `lc init` does not create a venv it did not create, so converging an
existing project that already has a `.venv` without astra-tools does not
retrofit it — install by hand there.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011wWf6Bp7bzZ79vwjkAxsFN
@cailmdaley
cailmdaley force-pushed the cailmdaley/lcr-181-marketplace-skills branch 3 times, most recently from 9036131 to 80e9e03 Compare July 23, 2026 14:37
cailmdaley and others added 3 commits July 23, 2026 16:39
`lc init` now registers the `lightcone` plugin with Codex too, so both harnesses
reach parity. The two mechanisms differ because the harnesses differ:

- Claude Code — per-project and declarative. `lc init` merges the marketplace
  registration into `.claude/settings.json`; Claude Code offers the plugin on
  folder trust.
- Codex — global and imperative. Codex has no project-scoped plugin config yet
  (openai/codex#18115), so `_register_codex_plugin` shells out to
  `codex plugin marketplace add` then `codex plugin add`. The registration is
  user-scoped (applies to every project). Both commands are idempotent, so a
  convergent re-run of `lc init` is a no-op.

Codex wiring is best-effort and harness-optional: absent `codex` skips
silently; a failed command warns and continues rather than failing init. A
project-scoped Codex config file is deliberately not written — none is honored
today, and dead machinery is what this redesign removes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011wWf6Bp7bzZ79vwjkAxsFN
Document how a new user installs the toolchain and how the parts upgrade.

- Add `docs/user/upgrading.md`. Two artifacts, two versions: the marketplace
  ships the plugin, uv ships the CLI. Compatibility is carried by versioning —
  a CLI change that alters the plugin contract bumps the plugin version; there
  is no runtime handshake. A section notes the project-scoped `astra` (pinned
  per-project in the venv). An "Open questions" note records what is still
  unsettled, including the version scheme.
- `install.md`: one global command, `lc`. `astra` is project-scoped —
  `lc init` installs astra-tools into the project venv, resolved via the
  activation hook; a bare terminal outside a project can `uv tool install
  astra-tools`.
- `troubleshooting.md`: `lc init` is convergent, so the deleted-settings and
  outside-a-project notes point at re-running it.
- Wire the upgrade page into the User Guide nav.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011wWf6Bp7bzZ79vwjkAxsFN
The docs read as Claude-Code-only. lightcone-cli supports any agent harness
(Claude Code, Codex, opencode), so generic prose now says "the agent" / "your
harness" / "agent skills" / "the plugin". Harness-specific mechanics stay, but
only in clearly-labeled blocks — ideally paired across harnesses.

- Generic vocabulary across CLAUDE.md, README, architecture.md, cli/index.md,
  cli/init.md, maintainer.md, agent-workflow.md, getting-started.md,
  glossary.md, index.md, install.md, troubleshooting.md, upgrading.md.
- Rename architecture.md "Claude Code plugin" -> "The agent plugin"; label the
  settings.json block as the Claude example.
- getting-started.md follows install.md's shape: generic headings, Claude
  specifics in labeled blocks.
- Fix stale claims: install.md "currently supporting Claude Code" ->
  "Claude Code, Codex, and opencode"; index.md "Claude Code for now" ->
  "Claude Code and Codex".

`lc init` wires both harnesses (see the Codex commit), and the docs say so:
Claude registration is per-project and declarative (`.claude/settings.json`,
offer-on-trust); Codex registration is global and imperative (the `codex plugin`
CLI), because Codex has no project-scoped plugin config yet (openai/codex#18115).
The by-hand commands stay documented as a fallback.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011wWf6Bp7bzZ79vwjkAxsFN
@cailmdaley
cailmdaley force-pushed the cailmdaley/lcr-181-marketplace-skills branch from 80e9e03 to c33648f Compare July 23, 2026 14:39
cailmdaley and others added 2 commits July 23, 2026 21:42
The CLI and plugin install globally, once — not per project. `lc init` no
longer writes the marketplace source into a project's `.claude/settings.json`.
Instead it registers the agent-skills marketplace globally with each harness on
PATH, mirroring the Codex path:

- Claude Code: `_register_claude_marketplace` shells out to
  `claude plugin marketplace add` (best-effort; skip when `claude` is absent,
  warn-and-continue on failure). Marketplaces are user-scoped, so this registers
  once for every project. The plugin is NOT installed at user scope.
- Per project, `_merge_claude_settings` writes only
  `enabledPlugins["lightcone@lightcone-research"] = true` — activation, no
  source, no version. This is what keeps the plugin active only in lc-init'd
  folders the harness trusts.
- Codex is unchanged (openai/codex#18115 keeps project scoping impossible);
  both harnesses now share `_marketplace_arg`.

Tests: settings.json carries only `enabledPlugins`; add a Claude registration
pair mirroring the Codex tests; the autouse fixture now stubs both `claude` and
`codex` off PATH so the suite never mutates real harness config.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BQsFRKkQYqWRsJRh7TNMaT
Describe the install as it now works: the CLI and plugin install globally,
once. `lc init` registers the agent-skills marketplace globally with each
harness on PATH, then activates the plugin per project. For Claude Code that is
a global `claude plugin marketplace add` plus `enabledPlugins` in the project's
`.claude/settings.json` (activation only — no marketplace source, no version).

- README, CLAUDE.md, docs/architecture.md (settings.json JSON block + scope
  table), docs/api/cli.md, docs/user/{install,getting-started,troubleshooting},
  docs/cli/init.md, docs/skills/index.md, docs/maintainer.md — harness-agnostic
  tone, Claude/Codex specifics only where the mechanics differ.
- docs/user/upgrading.md — retract the per-project "pin at lc init" option from
  the version-scheme open question: the plugin installs globally, so a project
  cannot pin its own plugin version. The scheme question stays open otherwise.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BQsFRKkQYqWRsJRh7TNMaT
@cailmdaley
cailmdaley force-pushed the cailmdaley/lcr-181-marketplace-skills branch from c33648f to 1898b26 Compare July 23, 2026 20:04
`lc` installs globally, once per machine (`uv tool install lightcone-cli`),
never into the project venv. This kills the global-vs-venv-vs-container
version skew. The project venv now carries only `astra` (astra-tools); the
plugin's activate-venv hook prepends `.venv/bin` so `astra` resolves
project-locally while `lc` stays global.

- `_init_git_and_venv`: create the venv, install astra-tools, no lightcone-cli.
- Tests assert the venv install list excludes lightcone-cli, includes astra-tools.
- Docs: state the global-lc / project-astra model plainly (cluster, skills).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BQsFRKkQYqWRsJRh7TNMaT
@cailmdaley
cailmdaley force-pushed the cailmdaley/lcr-181-marketplace-skills branch from 1898b26 to f26d85b Compare July 23, 2026 22:57
cailmdaley and others added 2 commits July 24, 2026 01:43
`astra` follows `lc`: both install globally from the one lightcone-cli wheel
(astra-tools is a dependency), so a single `uv tool install` exposes both entry
points with no version skew. `lc init` therefore stops creating a project
`.venv` and stops installing astra-tools into it.

- Remove venv creation, `_install_astra_tools`, the `--no-venv` flag, and the
  now-unused `ASTRA_TOOLS_REQUIREMENT` from `lc init`; `_init_git_and_venv`
  becomes `_init_git`. Rewrite the header design comment to the global model:
  lc + astra global from the wheel, analysis deps flow requirements.txt →
  container, no project venv. Per-project spec-exact astra is a per-call
  `uvx --from astra-tools==X --with astra-spec==Y astra`.
- eval sandbox: drop `--no-venv` from its `lc init` invocation.
- Tests: assert `lc init` creates no `.venv` and pip-installs nothing, and that
  the `--no-venv` flag is gone.
- Docs sweep: install, upgrading, cluster, getting-started, cli/init, cli/index,
  skills/index, architecture, contributing/testing updated to the global model;
  drop the obsolete "activation hook prepends .venv/bin to PATH" claim.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BQsFRKkQYqWRsJRh7TNMaT
@cailmdaley
cailmdaley force-pushed the cailmdaley/lcr-181-marketplace-skills branch from f26d85b to ab2227f Compare July 23, 2026 23:46
cailmdaley and others added 5 commits July 24, 2026 02:57
lc init still creates the project .venv (uv venv, falling back to
python -m venv) but installs nothing into it — it's the analysis
environment the agent populates later, not a copy of lc/astra. Both
tools remain global-only installs. Brings back --no-venv to skip
venv creation for fresh scaffolds.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TvoFZAuwRchz4vW6u7TGob
lc init creates the project .venv (uv venv, falling back to python -m
venv) but installs nothing into it -- lc and astra stay global-only,
and requirements.txt only feeds the container build. Several docs
still claimed lc init creates no venv at all, an intermediate state
that predates 9592432. Fixes docs/cli/init.md, docs/user/install.md,
docs/user/upgrading.md, docs/user/getting-started.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TvoFZAuwRchz4vW6u7TGob
_init_git_and_venv already skipped git init when .git existed but ran
venv creation unconditionally, silently overwriting a .venv a caller
had already populated. Mirror the git guard: skip and report when
.venv exists, and add a test pinning the behavior. Also fixes a typo
in the astra-tools DOGFOOD PIN comment (restore target was
>0.2.11, should be >0.2.10 -- matches the pre-pin version).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TvoFZAuwRchz4vW6u7TGob
…nch as interim

The DOGFOOD commit (ab2227f) conflated two pins with different lifetimes.
astra-tools 0.2.11 released to PyPI 2026-07-23, so the git direct reference
and its allow-direct-references escape hatch go; the dependency is now a
plain >=0.2.11. The marketplace branch ref is not dogfood debris — it
correctly tracks agent-skills#15 until that PR merges — so it stays,
relabeled INTERIM, with one flip-to-default commit owed at merge time.

Also: registration messages now say 'registration ensured (idempotent)'
instead of 'Registered', so convergent re-runs read as what they are.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TvoFZAuwRchz4vW6u7TGob
cailmdaley and others added 5 commits July 24, 2026 13:33
…es on both paths

A cloned lc project converged with lc init previously got no venv
(venv creation was fresh-scaffold-only), leaving the plugin's
activate-venv hook a silent no-op on that checkout. The venv is
per-checkout state every checkout needs, so it now runs on both init
paths, still guarded on .venv existing. git stays fresh-only: a clone
brings its own .git, and an adopted project's git status is its
owner's business.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TvoFZAuwRchz4vW6u7TGob
…ing (LCR-181)

Replaces the fresh/existing split (_scaffold_fresh_project vs _layer_integration)
with a single rule applied to every artifact: present, skip; missing, add. Only
astra.yaml keeps special handling — astra init scaffolds it once and the
container repoint happens only on that write; everything else (Containerfile,
requirements.txt, CLAUDE.md, .gitignore lightcone block, git init) now converges
on both a from-scratch run and adoption of an existing ASTRA project. .gitignore
append is now idempotent by content (checks for a marker line) instead of a
fragile full-string match. Reverts the "registration ensured (idempotent)"
wording from 8bda862 back to the plain "Registered..." messages.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TvoFZAuwRchz4vW6u7TGob
The lightcone CLI-compat hooks (venv activation, lc version range,
.lightcone gate) were split out of agent-skills#15 into the stacked
agent-skills#17. The marketplace default branch carries the content
this CLI pairs with only when #17 merges, so the flip-to-default
commit waits for #17.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TvoFZAuwRchz4vW6u7TGob
astra init hard-fails on any non-empty directory (dogfood-confirmed), so
the convergence design lc init previously implemented — re-running init
on an existing directory to add whatever was missing — never actually
worked. Rather than work around it or fix it upstream, lc init's scope
is cut to new-project scaffolding: it now pre-checks that the target
directory is empty, then writes the full scaffold in one linear pass
with no exists/skip bookkeeping. Re-run/adoption support is deferred as
an open question rather than solved here.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TvoFZAuwRchz4vW6u7TGob
@cailmdaley
cailmdaley force-pushed the cailmdaley/lcr-181-marketplace-skills branch from e3eb405 to a8c1094 Compare July 24, 2026 13:38
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.

1 participant