Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
129 commits
Select commit Hold shift + click to select a range
b0b9fb0
Add /narrative skill (ported from lightcone-ui#10)
cailmdaley Apr 30, 2026
4f9a724
skills: add ralph-loops, managing-bibliography, constitution; update …
cailmdaley May 4, 2026
7d53081
skills: add /paper2astra orchestrator + bundle README
cailmdaley May 4, 2026
8bd67ff
CLAUDE.md: surface paper-reproduction skill bundle in repo overview
cailmdaley May 4, 2026
272599b
skills/ralph-loops: tighten description triggers
cailmdaley May 4, 2026
9f19380
Add paper2astra follow-up skills: check-sentence-by-sentence and figu…
NolanKoblischke May 4, 2026
380b87d
skills: tend the bundle — drop provenance, sharpen constitution skill
cailmdaley May 5, 2026
4a003d9
skills/paper2astra: align SKILL.md with restructured constitution
cailmdaley May 5, 2026
0992daa
skills/paper2astra: align phase references with restructured constitu…
cailmdaley May 5, 2026
609d74d
skills/paper2astra/acquire: name why work/reference/code/ matters
cailmdaley May 5, 2026
1be5efa
Merge origin/add/narrative-skill (Nolan's two follow-up skills)
cailmdaley May 5, 2026
79e9f1d
skills/paper2astra: introduce FINAL_REVIEW as the post-loop interacti…
cailmdaley May 5, 2026
15c6dff
skills/paper2astra: phase redesign — collapse 11 phases to 9, sharpen…
cailmdaley May 6, 2026
12ce714
skills/paper2astra: rigor-dial REVIEW + IMPLEMENT, fold FINAL_REVIEW …
cailmdaley May 6, 2026
50c0869
paper2astra: ARCHITECT-first phase shape — references/
cailmdaley May 6, 2026
7fb82fb
paper2astra: ARCHITECT-first phase shape — SKILL.md + interview + README
cailmdaley May 6, 2026
7329524
paper2astra: move LITERATURE after SPECIFY in the skill
cailmdaley May 6, 2026
3169d8f
Merge branch 'main' into add/narrative-skill
EiffL May 7, 2026
7d39486
Merge branch 'main' into add/narrative-skill
EiffL May 8, 2026
6bacfb6
paper-extraction skill: structural extraction from arXiv source / PDF…
cailmdaley May 8, 2026
8a4deca
paper2astra: rewire ACQUIRE to /paper-extraction
cailmdaley May 8, 2026
cd5b83a
retire managing-bibliography; rewire bundle cross-refs to paper-extra…
cailmdaley May 8, 2026
7bfc649
lc-new: skill-creator-shaped description (scoped to fresh-idea)
cailmdaley May 8, 2026
604267d
rename lc-new -> lc-from-question; lc-migrate -> lc-from-code; paper2…
cailmdaley May 9, 2026
0b5b39c
restore lc-new (don't rename to lc-from-question)
cailmdaley May 9, 2026
d13479b
docs: drop retired skill pages from nav
cailmdaley May 9, 2026
223d9ec
docs: align skill indexes with current bundle
cailmdaley May 9, 2026
8f0ec83
docs: rewrite user workflow around current commands
cailmdaley May 9, 2026
a97f814
Clarify code augmentation in paper reproduction skills
cailmdaley May 9, 2026
41e5183
Clarify baseline universe skill behavior
cailmdaley May 9, 2026
d8adffa
Make from-paper skill instructions imperative
cailmdaley May 9, 2026
b9089c6
Streamline from-paper phase workflow
cailmdaley May 10, 2026
44923a8
Rewrite lc-from-paper as orchestrator + named sub-agents
cailmdaley May 10, 2026
333fde1
Rewrite lc-from-paper interview reference
cailmdaley May 10, 2026
bf4df04
Realign acquire/architect references; move cited_papers.yaml to ACQUIRE
cailmdaley May 10, 2026
bc6c266
Realign specify/literature/implement references to orchestrator archi…
cailmdaley May 10, 2026
0f549bc
Realign run/compare/review references; add opportunity assessment to …
cailmdaley May 10, 2026
56a8b4e
Drop constitution and ralph-loops skills; realign top-level docs
cailmdaley May 10, 2026
a312e17
paper-extraction: resolve bibliography DOIs in extract-paper-substrat…
cailmdaley May 10, 2026
21d79d8
paper-extraction: document the enriched citations: block
cailmdaley May 10, 2026
6634ba8
lc-from-paper: collapse bibliography consumers onto index.json#citations
cailmdaley May 10, 2026
7c5d546
lc-from-paper: capture fidelity intent as prose in INTERVIEW + Goal
cailmdaley May 10, 2026
4847912
lc-from-paper: reframe rigor as trajectory toward user's intent
cailmdaley May 10, 2026
eb2ecaf
lc-from-paper: grade COMPARE opportunities against user's fidelity in…
cailmdaley May 10, 2026
f3d81ba
narrative: substrate/mode separation, operational rebuild
cailmdaley May 10, 2026
0c084f2
paper-extraction: refresh Path B note for bibliography-resolution state
cailmdaley May 10, 2026
bc34267
paper-extraction: tighten Step 5 (one example, fold the rambly bits)
cailmdaley May 10, 2026
c1f7563
lc-from-paper: persistent paper-expert + code-expert architecture
cailmdaley May 11, 2026
5499bf9
docs: catch skills docs up to the current bundle
cailmdaley May 11, 2026
e1e6fec
README: fix two stale claims; mirror the same fix in architecture.md
cailmdaley May 11, 2026
78bd863
ralph-loops + constitution: re-add the iteration substrate
cailmdaley May 11, 2026
102ca0c
ralph: collapse constitution + ralph-loops into one skill
cailmdaley May 11, 2026
d743bd1
lc-from-paper: split per-paper template into constitution.md + CLAUDE.md
cailmdaley May 11, 2026
a91b767
lc-from-paper: SKILL.md for the ralph dispatch shape
cailmdaley May 11, 2026
24f1e0d
lc-from-paper: interview retune + drop misplaced edits
cailmdaley May 11, 2026
5a6d02c
lc-from-paper: acquire + architect references for the ralph dispatch
cailmdaley May 11, 2026
bf55fce
docs + bundle index: catch up with the ralph dispatch shape
cailmdaley May 11, 2026
ba8af15
lc-from-paper: retune the remaining phase references for the ralph shape
cailmdaley May 11, 2026
0977eba
CLAUDE.md: add ralph to the skills enumeration
cailmdaley May 11, 2026
d7b48f8
ralph + lc-from-paper docs: cold-survey cleanup
cailmdaley May 11, 2026
b7e0998
lc-from-paper: two small clarifications in SKILL.md
cailmdaley May 11, 2026
b1d532b
lc-from-paper: cold-survey cleanups in specify + compare references
cailmdaley May 11, 2026
2ffbda4
lc-from-paper: rebase SPECIFY + LITERATURE onto astra-spec 0.0.10 gra…
cailmdaley May 11, 2026
1f9ea4d
lc-from-paper: cold-survey cleanups in review + compare references
cailmdaley May 11, 2026
1171786
lc-from-paper/specify: document Option.insights ../ scope grammar
cailmdaley May 11, 2026
d717939
lc-from-paper: cold-survey cleanups in SKILL.md + compare/implement/r…
cailmdaley May 11, 2026
f971ae6
docs: catch bundle-count slips up with the ralph re-add
cailmdaley May 11, 2026
ee7fb70
lc-from-paper/run: align phase-intro with sibling references
cailmdaley May 11, 2026
754756b
lc-from-paper/interview: correct Evidence parenthetical
cailmdaley May 11, 2026
0022bed
docs: catch SPECIFY's implementation-notes.md output in lc-from-paper…
cailmdaley May 11, 2026
987a0d5
lc-from-paper: cold-survey cleanup of prior_insights placeholder lang…
cailmdaley May 11, 2026
d20c680
lc-from-paper: cold-survey cleanup of placeholder-evidence shorthand …
cailmdaley May 11, 2026
6f25aa5
lc-from-paper/architect: cold-survey cleanup of stub-yaml top comment
cailmdaley May 11, 2026
6786a45
lc-from-paper/specify: precise three-block evidence shape in topic se…
cailmdaley May 11, 2026
febf2f3
lc-from-paper/implement: drop imprecise parenthetical from method-fid…
cailmdaley May 11, 2026
ffeb1a1
lc-from-paper: cold-survey cleanup of user-accepted-partial shorthand
cailmdaley May 11, 2026
6406b08
lc-from-paper/review: address iter 15's deferred review.md:3 flag
cailmdaley May 11, 2026
475d389
lc-from-paper: surface cheap-mode review termination in SKILL.md:100
cailmdaley May 11, 2026
ba31239
lc-from-paper: align cheap/heavy at SKILL.md:139 + docs mirror with t…
cailmdaley May 11, 2026
4d028d9
Merge remote-tracking branch 'origin/main' into add/narrative-skill
cailmdaley May 11, 2026
8f6f4aa
lc-from-paper/templates: drop redundant code-as-canonical from consti…
cailmdaley May 11, 2026
17d5329
lc-from-paper/architect: trim vestigial Round-6 SendMessage reference
cailmdaley May 11, 2026
6367c6b
cli/init: reframe Next steps for agent-first usage
cailmdaley May 11, 2026
6918267
README + user docs: substrate tracks, not prescribes (Liam alignment)
cailmdaley May 11, 2026
00e3467
gitignore: .DS_Store
cailmdaley May 11, 2026
f12817d
lc-from-paper: drop in-iteration review fan-out — review is just sequ…
cailmdaley May 11, 2026
2481015
skills: add /astra and /lc-cli reference skills; drop heavy session-s…
cailmdaley May 11, 2026
d9c9a0a
skills/README: add Reference skills section for /astra and /lc-cli
cailmdaley May 11, 2026
f99770d
docs + CLAUDE.md: purge stale ui-brand / guides/ references
cailmdaley May 11, 2026
ba929df
astra: add Options subsection + flag Insight.created_at as required
cailmdaley May 11, 2026
0fa6295
eval/harness: drop dead .claude/guides refs from default loop prompt
cailmdaley May 11, 2026
e310b9a
fix(lc-from-paper): require interview questions and continue after co…
NolanKoblischke May 13, 2026
942d825
Merge main into add/narrative-skill
cailmdaley May 13, 2026
5d69896
docs/skills: writing pass on index + lc-new
cailmdaley May 13, 2026
d1d7645
lc init: scaffolded CLAUDE.md surfaces the three entry skills
cailmdaley May 13, 2026
2b4a120
docs/skills/lc-from-code: writing pass + output-path accuracy
cailmdaley May 13, 2026
8f180c5
docs/skills/lc-from-code: lede verb "Wrap" → "Import"
cailmdaley May 13, 2026
3c4302e
docs/skills/lc-from-paper: writing pass
cailmdaley May 13, 2026
fe54e8d
docs/skills/ralph: writing pass
cailmdaley May 13, 2026
3c51609
docs/skills/paper-extraction: writing pass
cailmdaley May 13, 2026
c9842d9
docs/skills/narrative: writing pass (one-line)
cailmdaley May 13, 2026
0d95321
docs/skills/figure-comparison: writing pass (one-line)
cailmdaley May 13, 2026
c8afb13
docs/skills/check-sentence-by-sentence: writing pass
cailmdaley May 13, 2026
6fd95dd
docs/skills/lc-feedback: writing pass (hard rules only)
cailmdaley May 13, 2026
03719fd
docs/skills/authoring: writing pass + accuracy fixes
cailmdaley May 13, 2026
599ccb3
lc-from-paper: reshape rigor framing + surface CLAUDE.md as state
cailmdaley May 13, 2026
7b9558a
lc-from-paper: collapse review-and-fix into single iteration
cailmdaley May 13, 2026
2d00710
lc-from-paper: correct review termination — clean pass after last fix
cailmdaley May 13, 2026
5254111
lc-from-paper: split INTERVIEW into two beats with /paper-extraction …
cailmdaley May 13, 2026
4524774
lc-from-paper: drop the Rigor vocabulary — review is "read critically…
cailmdaley May 13, 2026
b944a3e
paper-extraction: handle nested caption braces
cailmdaley May 13, 2026
1d4f6b8
lc-from-paper: collapse INTERVIEW + ACQUIRE into a single ORIENT phase
cailmdaley May 13, 2026
6936c54
lc-from-code: drop inline-only rule in scan-only mode; embrace Explore
cailmdaley May 13, 2026
1deb588
docs: propagate INTERVIEW + ACQUIRE → ORIENT renaming
cailmdaley May 13, 2026
dab2d4d
docs/skills: ORIENT-first, not interview-first
cailmdaley May 13, 2026
aa58ac4
ralph: drop Rigor from the CLAUDE.md accumulator example
cailmdaley May 13, 2026
3a50a19
lc-from-paper: drop the orchestrator-era review-file commit cadence
cailmdaley May 13, 2026
05dc341
docs/user/agent-workflow: propagate ORIENT-first + drop the Rigor sec…
cailmdaley May 13, 2026
eb81186
lc-from-paper: drop two more Rigor-vocabulary orphans
cailmdaley May 13, 2026
37232ec
fix(check-sentence-by-sentence): mark skill as user-invoked only
NolanKoblischke May 13, 2026
d2a90df
lc-from-paper: drop four more Rigor-vocabulary orphans
cailmdaley May 13, 2026
b593fe5
lc-from-code: drop allowed-tools so the agent isn't unintentionally l…
cailmdaley May 13, 2026
de89415
paper-extraction: derive ASTRA_SCHEMA_VERSION from installed astra-spec
cailmdaley May 13, 2026
0433eea
docs/skills/authoring: stop calling the resync recipe "lc update"
cailmdaley May 13, 2026
6b75420
paper-extraction: fail loud on missing astra-spec instead of falling …
cailmdaley May 13, 2026
09d1af0
skills: drop allowed-tools from paper-extraction, check-sentence-by-s…
cailmdaley May 13, 2026
20c708b
lc-cli: drop lc eval from the agent-facing CLI reference
cailmdaley May 13, 2026
01cb014
docs/glossary: refresh stale Ralph loop entry
cailmdaley May 13, 2026
811280d
lc-from-paper: mandate an explicit user-approval gate before launchin…
cailmdaley May 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -219,3 +219,6 @@ uv.lock
.dev.vars*
!.dev.vars.example
!.env.example

# macOS
.DS_Store
11 changes: 8 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,11 +67,16 @@ src/lightcone/ # namespace — NO __init__.py
├── harness.py, sandbox.py, graders.py, build.py, report.py, models.py

claude/lightcone/ # Claude plugin source — force-included into the wheel
├── skills/ # lc-new, lc-build, lc-verify, lc-migrate, lc-feedback
├── skills/ # lc-new, lc-from-code, lc-from-paper,
│ # lc-feedback, ralph;
│ # paper-reproduction bundle: lc-from-paper (entry),
│ # ralph (loop substrate), narrative,
│ # paper-extraction, figure-comparison,
│ # check-sentence-by-sentence
│ # (see skills/README.md for the full bundle map)
├── agents/ # lc-extractor
Comment thread
aboucaud marked this conversation as resolved.
├── guides/ # astra-reference, lightcone-cli-reference, ui-brand
├── templates/ # Project CLAUDE.md template
└── scripts/ # Session hooks (bash): venv activation, validate-on-save, status display
└── scripts/ # Session hooks (bash): venv activation, validate-on-save, session-start primer

tests/ # pytest — mirrors src/ structure
pyproject.toml # hatchling + hatch-vcs, ASTRA + Snakemake as deps
Expand Down
14 changes: 9 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,12 @@ cd my-analysis
claude
```

Then tell the agent `/lc-new` to scope your research question. After the spec exists, just tell the agent to build it — implementation is a normal Claude Code workflow guided by `.claude/guides/`.
Then tell the agent what you have to start from — a research question (`/lc-new`), existing code (`/lc-from-code`), or a paper to reproduce (`/lc-from-paper`). After the spec exists, work with the agent however suits you; the substrate (`astra.yaml`, `lc run`, `lc status`, `lc verify`) keeps things in sync.

## Skills

The `/lc-from-*` family is parallel by what you start from: a question, code, or a paper.

### `/lc-new` — Scope and specify an analysis

Guides you from a research question to a complete `astra.yaml` specification through interactive conversation. The agent will:
Expand All @@ -34,26 +36,28 @@ Guides you from a research question to a complete `astra.yaml` specification thr

You don't write any code or YAML during this phase — the agent produces the full specification.

### `/lc-migrate` — Bring an existing project into ASTRA
### `/lc-from-code` — Bring an existing project into ASTRA

Scans an existing codebase, drafts an `astra.yaml` that captures its inputs, outputs, and analytical decisions, parameterizes the code so decisions can vary across universes, and runs the analysis through `lc` until every output materializes. Existing logic is left intact — changes are confined to parameter plumbing.

### `/lc-from-paper` — Reproduce a published paper

ORIENT-first driver for reproducing a published paper in ASTRA. ORIENT runs in the user's main session in seven stages — asks for the paper, runs `/paper-extraction` inline to acquire it, interviews the user (grounded in the paper), clones the reference code and runs `/lc-from-code` scan-only (if a repo exists), optionally follows up, then drafts a per-paper `constitution.md` (the ralph loop's driving document) + `CLAUDE.md` (auto-loading rules + accumulators) from the full paper-plus-code context for user review. Then the rest of the reproduction hands off to a **ralph loop** whose iterations carry the long middle: ARCHITECT → SPECIFY → LITERATURE → IMPLEMENT → RUN → COMPARE. Each iteration runs in a fresh tmux session against the constitution; the fresh-context property between iterations is what makes per-phase review work. When the loop closes (constitution `status: closed` after COMPARE returns `pass`), REVIEW runs back in the user's main session. Composes a bundle of sibling skills (`ralph`, `paper-extraction`, `narrative`, `figure-comparison`, `check-sentence-by-sentence`). See [`claude/lightcone/skills/README.md`](claude/lightcone/skills/README.md) for the full bundle map.

### `/lc-feedback` — Report a bug

Files a GitHub issue against the right repo (ASTRA or lightcone-cli) with version info and error context auto-collected from your session.

### Building and verifying

There is no `/lc-build` or `/lc-verify` skill — building and verifying are part of the normal Claude Code workflow once `astra.yaml` exists. The agent reads `.claude/guides/lightcone-cli-reference.md` (workflow, commands, status meanings) and `.claude/guides/astra-reference.md` (spec syntax) and drives the build directly: write scripts under `src/`, run `lc run`, watch `lc status` until every output is `ok`, then `astra validate astra.yaml` and `lc verify` to confirm the spec is valid and the provenance chain is intact.
Once `astra.yaml` exists, you (or the agent) build it however suits you. The typical flow is `lc run` to materialize outputs, `lc status` to track progress, `astra validate astra.yaml` for spec validity, and `lc verify` for provenance integrity — agent-driven, ralph-looped, or hand-written, the `lc` substrate stays in sync.

## CLI Reference

### Global configuration

The first `lc` invocation auto-creates `~/.lightcone/config.yaml` with `container.runtime: auto`. To pin a runtime or change other settings, edit the file directly.

**Extraction model:** Literature extraction subagents default to Sonnet. To change this, set `extraction_model:` in `~/.lightcone/config.yaml` (options: `sonnet`, `haiku`, or omit for inherit).

### Project scaffolding

```bash
Expand Down
19 changes: 13 additions & 6 deletions claude/lightcone/scripts/session-start.sh
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
#!/bin/bash
# SessionStart hook: surface a terse project status to the agent.
#
# Reports validation status, materialization counts, and pointers to the
# canonical reference docs. Project name / decision count / universe count
# are intentionally omitted -- they are trivia the agent reads from
# astra.yaml and CLAUDE.md when needed, and they cost against the 10k
# additionalContext budget.
# Reports validation status, materialization counts, and a tight CLI
# primer so the agent knows what substrate commands exist and which
# reference skills carry the depth. Project name / decision count /
# universe count are intentionally omitted -- they are trivia the agent
# reads from astra.yaml and CLAUDE.md when needed, and they cost against
# the 10k additionalContext budget.

input=$(cat)
cwd=$(echo "$input" | jq -r '.cwd // empty')
Expand Down Expand Up @@ -48,7 +49,13 @@ fi
summary="$summary
Materialization: ok=$ok_count stale=$stale_count missing=$missing_count alias=$alias_count

References: .claude/guides/astra-reference.md (spec) and .claude/guides/lightcone-cli-reference.md (CLI)."
Substrate CLIs (use --help on any):
lc init / lc run / lc status / lc verify / lc build / lc export wrroc
astra validate / astra paper add / astra universe generate

Reference skills (invoke when the surface above isn't enough):
/astra — astra.yaml spec: decisions, prior_insights, findings, evidence, sub-analyses, narrative anchors
/lc-cli — lc workflow: spec-code invariant, status interpretation, failure diagnosis"

if [ "$validation_ok" -ne 0 ]; then
# tail rather than head -- the leading lines are success markers
Expand Down
43 changes: 43 additions & 0 deletions claude/lightcone/skills/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# lightcone-cli skills

Each subdirectory is one Claude Code skill: `SKILL.md` plus optional `references/`, `assets/`, and `scripts/`. `lc init` copies these into a project's `.claude/skills/` so they are discoverable to Claude Code sessions.

## Project lifecycle skills

| Skill | Role |
|---|---|
| `lc-new` | Scaffold a new ASTRA-shaped project from a research question. |
| `lc-from-code` | Bring an existing codebase into ASTRA — scan, spec, parameterize. |
| `lc-from-paper` | Reproduce a published paper in ASTRA (paper-reproduction bundle entry point — see below). |
| `lc-feedback` | Report bugs and feature requests upstream. |
| `ralph` | Author a constitution and run a ralph loop against it (authoring + launching + iterating in one skill). `lc-from-paper` uses this for the long middle of a reproduction; standalone for any other long-running work. |

## Reference skills

Not direct entry points — Claude invokes these (or other skills invoke them) to load reference content into the session. The session-start hook primes their names so they're discoverable from turn one.

| Skill | Role |
|---|---|
| `astra` | Reference for the `astra.yaml` spec: structure, decisions, options, prior insights, findings, evidence, sub-analyses, narrative anchors, composition mechanics. |
| `lc-cli` | Reference for `lc` workflow: commands, the Spec-Code Invariant, status interpretation, failure diagnosis, multiverse runs, WRROC export. |

## Paper-reproduction bundle

A self-contained toolkit for reproducing published papers in ASTRA. The bundle is co-located so a single `lc init` brings the full toolkit into a project — no plugin marketplace, no separate installs.

| Skill | Role |
|---|---|
| [`lc-from-paper`](lc-from-paper/SKILL.md) | **Reproduction driver.** ORIENT-first; one pre-loop phase in the user's main session that asks for the paper, runs `/paper-extraction` inline, interviews the user (grounded in the paper), clones the reference code and runs `/lc-from-code` scan-only (when a repo exists), and drafts the per-paper `constitution.md` + `CLAUDE.md`. Then hands off to a ralph loop whose iterations carry the long middle: ARCHITECT → SPECIFY → LITERATURE → IMPLEMENT → RUN → COMPARE. When the loop closes (constitution `status: closed` after COMPARE returns `pass`), REVIEW runs back in the user's main session. Fidelity intent — captured as prose at ORIENT — is what every iteration reads when sizing its next move, and what COMPARE grades opportunities against. |
| [`ralph`](ralph/SKILL.md) | The loop substrate. `lc-from-paper`'s ORIENT invokes `/ralph`'s Authoring mode to draft the per-paper constitution; the loop launcher hands off after ORIENT lands. Each iteration runs `/ralph`'s Loop protocol against the constitution. |
| [`narrative`](narrative/SKILL.md) | Author the `narrative:` prose and decision `rationale:` in `astra.yaml`. Invoked by `lc-from-paper`'s ARCHITECT (for the structural narrative) and SPECIFY (for anchored content narrative). |
| [`paper-extraction`](paper-extraction/SKILL.md) | Turn an arXiv ID or DOI into a standardized `work/reference/` directory: structural index (figures, tables, outline, citations with resolved DOIs) plus a stub `astra.yaml` for the paper. Primary acquisition path for `lc-from-paper`'s ORIENT (Stage 2); also invoked per cited paper by LITERATURE. |
| [`check-sentence-by-sentence`](check-sentence-by-sentence/SKILL.md) | Audit paper claims against code locations (`file:line` or `NOT FOUND`). Invoked from `lc-from-paper`'s REVIEW close-out (opt-in); also user-invokable directly. |
| [`figure-comparison`](figure-comparison/SKILL.md) | Build a self-contained HTML side-by-side: original figures/tables/numerics vs replicated. Invoked from `lc-from-paper`'s REVIEW close-out (mandatory); also user-invokable directly. |

The full reproduction story spans these skills. `lc-from-paper`'s `SKILL.md` names each by role and tells the agent when to invoke them; the siblings stand alone and don't know about `lc-from-paper`.

### Why bundle (not depend on plugin install)

- **Testability.** We want to verify `lc-from-paper` invokes its sibling skills correctly. That only works when all are in the same checkout.
- **Single install path.** `lc init` brings the full toolkit. Adding a separate plugin-marketplace step is friction we don't need.
- **Future consolidation is open.** The long-run shape may be `astra` ships skills in `astra`, `lc` ships skills in `lightcone-cli`, plus a centralized external-skills list. Today: bundle it all. See [[lightcone/skills-location-policy]].
Original file line number Diff line number Diff line change
@@ -1,3 +1,17 @@
---
name: astra
description: >
Comprehensive reference for the `astra.yaml` specification — top-level
structure, sub-analyses, inputs/outputs, decisions and options, prior
insights and findings, evidence and quote verification, narrative
anchors, and composition mechanics. Invoke whenever reading, writing,
validating, or debugging an `astra.yaml` spec; whenever working with
decisions, options, prior_insights, findings, or evidence; or whenever
the user asks about ASTRA schema, spec syntax, or sub-analysis
composition.
allowed-tools: Read, Glob, Grep, Bash(astra:*)
---

# ASTRA Reference

## What an ASTRA Analysis Is
Expand Down Expand Up @@ -100,6 +114,17 @@ A decision is a methodological choice where a different defensible option could

Decisions may carry an optional `tags:` list for grouping (e.g. `[preprocessing]`, `[physics]`, `[stats]`). Keep the tag vocabulary **small and consolidated** -- reuse existing tags rather than minting new ones, since tags are mostly useful for cross-cutting views over a shared decision space, and that view fragments quickly when every decision invents its own label.

### Options

Each decision must have at least one option. Options are `key: { ... }` entries:

- `label:` (required) -- short human-readable name for compact rendering.
- `description:` (optional) -- longer prose explaining what the option means.
- `insights:` (optional) -- list of `prior_insights:` IDs that justify this option; back-references the supporting evidence (see [Prior Insights and Findings](#prior-insights-and-findings)).
- `excluded:` + `excluded_reason:` -- option considered but rejected. See [Constraints](#constraints).

`label:` and `options:` are required on the decision itself. An aliased decision (one that points at another via `from: ../decisions.foo` -- see [Composition Mechanics](#composition-mechanics)) inherits both from its source and doesn't redeclare them.

### Parameterization

**Every decision must be parameterized in code** -- never hardcode a decision value. The recipe's `command:` template references it via `{decisions.<id>}` (see [Command Template Substitution](#command-template-substitution)).
Expand Down Expand Up @@ -173,7 +198,7 @@ Two kinds of insight, distinguished by direction:
- **Prior insights** (`prior_insights:`) — knowledge from outside the analysis that informs decisions. From literature (by DOI) or artifacts from a prior/parent analysis.
- **Findings** (`findings:`) — conclusions from the analysis itself, backed by its own output artifacts.

Both use the same Insight model: `id`, `label` (optional), `claim`, `created_at`, `evidence`, plus optional `derived` (true if synthesized/inferred from multiple sources), `scope` (applicability conditions), `tags`, `notes`. Placement determines direction.
Both use the same Insight model. Required: `id`, `claim`, `created_at` (ISO 8601 datetime — e.g. `"2025-02-01T14:00:00"`), `evidence`. Optional: `label`, `derived` (true if synthesized/inferred from multiple sources), `scope` (applicability conditions), `tags`, `notes`. Placement determines direction.

Each evidence item has its own fields: `id`, exactly one of `doi` (literature) or `artifact` (output ID), and either a `quote` (TextQuoteSelector with required `exact`, optional `prefix`/`suffix`) or `location` (FragmentSelector with `value` like `"page=6"` and/or 1-indexed `page`). DOI evidence may add `version` (arXiv version). Artifact evidence may add `snapshot` (path to an immutable artifact copy) and `source_commit` (git commit that produced it).

Expand Down
Loading
Loading