Skip to content
Merged
1 change: 1 addition & 0 deletions .claude/commands/af_adapt_to_domain.md
1 change: 1 addition & 0 deletions .claude/commands/af_audit_skill_apis.md
1 change: 1 addition & 0 deletions .claude/commands/af_chain_searches.md
1 change: 1 addition & 0 deletions .claude/commands/af_compose_model.md
1 change: 1 addition & 0 deletions .claude/commands/af_configure_search.md
1 change: 1 addition & 0 deletions .claude/commands/af_custom_analysis.md
1 change: 1 addition & 0 deletions .claude/commands/af_debug_fit_failure.md
1 change: 1 addition & 0 deletions .claude/commands/af_ingest_paper.md
1 change: 1 addition & 0 deletions .claude/commands/af_inspect_results_mcp.md
1 change: 1 addition & 0 deletions .claude/commands/af_load_results.md
1 change: 1 addition & 0 deletions .claude/commands/af_plot_fit.md
1 change: 1 addition & 0 deletions .claude/commands/af_refresh_api_docs.md
1 change: 1 addition & 0 deletions .claude/commands/af_run_search.md
1 change: 1 addition & 0 deletions .claude/commands/af_setup_environment.md
1 change: 1 addition & 0 deletions .claude/commands/af_simulate_dataset.md
1 change: 1 addition & 0 deletions .claude/commands/af_to_notebook.md
1 change: 1 addition & 0 deletions .claude/commands/af_update_wiki.md
1 change: 1 addition & 0 deletions .claude/commands/af_wrap_likelihood.md
1 change: 1 addition & 0 deletions .claude/commands/contribute-upstream.md
1 change: 1 addition & 0 deletions .claude/commands/start-new-project.md
1 change: 1 addition & 0 deletions .claude/skills/af_adapt_to_domain.md
1 change: 1 addition & 0 deletions .claude/skills/af_ingest_paper.md
1 change: 1 addition & 0 deletions .claude/skills/af_wrap_likelihood.md
1 change: 1 addition & 0 deletions .claude/skills/contribute-upstream.md
1 change: 1 addition & 0 deletions .claude/skills/start-new-project.md
7 changes: 7 additions & 0 deletions .codex/skills/autofit-assistant-af-adapt-to-domain/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: autofit-assistant-af-adapt-to-domain
description: "The domain-adaptation orchestrator — turn a fresh clone of this assistant into the user's own domain inference assistant. Runs a light interview about their field, data and conventions; drives the three adaptation channels (paper ingestion into wiki/literature/, likelihood wrapping, model composition); and records everything durable in wiki/project/profile.md so future sessions start domain-aware. Use when a user says \"become my assistant for (field)\", \"adapt to my domain\", \"train yourself on my papers\", or arrives with a new scientific domain the assistant hasn't recorded. Not for a single paper (af_ingest_paper) or a single wrap (af_wrap_likelihood) — this composes them."
---
<!-- Generated by PyAutoBrain/bin/project_discovery.py; do not edit. -->

Read and follow the canonical skill: [SKILL](../../../skills/af_adapt_to_domain.md).
7 changes: 7 additions & 0 deletions .codex/skills/autofit-assistant-af-audit-skill-apis/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: autofit-assistant-af-audit-skill-apis
description: "Verify every PyAuto* API symbol cited in skills/, wiki/core/, and generated scripts (scripts/) resolves in the currently installed stack. Reports stale references (renamed, moved, or removed) with suggested replacements drawn from string-similarity and a cross-module search. Also owns the API version baseline (`wiki/core/api_audit_baseline.json`) that pins the workspace to an autofit version: `--write-baseline` records the installed versions + public-API-surface hash, and `--check-version` (the cheap session-start drift-check) flags when the installed stack has moved. Pairs with `af_update_wiki` (which detects prose drift via pinned source commits) — this skill closes the complementary gap that skills have no pinned commits and that wiki pages can name symbols that no longer exist. Run when a user reports an API error, after a PyAuto* upgrade, or on a manual cadence; the helper script `autoassistant/audit_skill_apis.py` does the mechanical pass and this skill drives interpretation and curates fixes."
---
<!-- Generated by PyAutoBrain/bin/project_discovery.py; do not edit. -->

Read and follow the canonical skill: [SKILL](../../../skills/af_audit_skill_apis.md).
7 changes: 7 additions & 0 deletions .codex/skills/autofit-assistant-af-chain-searches/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: autofit-assistant-af-chain-searches
description: "Chain non-linear searches — pass one fit's result into the next fit's priors or start points, so a cheap simplified fit hands a focused parameter space to the expensive full fit. Covers `result.instance` (fix at fitted values), `result.model` (posterior-updated priors), the `model_centred*` variants, and the Initializer start-point classes. Use when the user says \"use the first fit to seed the second\", \"fix these components at the previous result\", \"chain searches\", or wants a staged/pipelined analysis. Not for choosing a single sampler (af_configure_search) or combining datasets (that is the factor graph)."
---
<!-- Generated by PyAutoBrain/bin/project_discovery.py; do not edit. -->

Read and follow the canonical skill: [SKILL](../../../skills/af_chain_searches.md).
7 changes: 7 additions & 0 deletions .codex/skills/autofit-assistant-af-compose-model/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: autofit-assistant-af-compose-model
description: "Compose a PyAutoFit model from the user's parametrisation — turn Python classes into `af.Model` objects, combine components with `af.Collection`, and set every prior deliberately (uniform, log-uniform, Gaussian, fixed, linked, asserted). Use when the user wants to define what is being fitted — \"set up my model\", \"what priors should I use\", \"fix this parameter\", \"tie these two parameters together\". Not for writing the likelihood (that is `af_wrap_likelihood` / a custom Analysis) or for running the fit (that is `af_run_search`)."
---
<!-- Generated by PyAutoBrain/bin/project_discovery.py; do not edit. -->

Read and follow the canonical skill: [SKILL](../../../skills/af_compose_model.md).
7 changes: 7 additions & 0 deletions .codex/skills/autofit-assistant-af-configure-search/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: autofit-assistant-af-configure-search
description: "Choose and configure a PyAutoFit non-linear search — nested samplers (Nautilus, DynestyStatic/Dynamic), MCMC (Emcee, Zeus, BlackJAXNUTS), and MLE optimizers (LBFGS, Drawer) — including output paths, cores, initializers and per-sampler settings. Use when the user asks \"which sampler should I use\", \"configure the search\", or wants to tune convergence/runtime. Not for actually executing the fit (that is `af_run_search`) or for composing the model (that is `af_compose_model`)."
---
<!-- Generated by PyAutoBrain/bin/project_discovery.py; do not edit. -->

Read and follow the canonical skill: [SKILL](../../../skills/af_configure_search.md).
7 changes: 7 additions & 0 deletions .codex/skills/autofit-assistant-af-custom-analysis/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: autofit-assistant-af-custom-analysis
description: "Extend an Analysis class beyond plain likelihood wrapping — extra data/config inputs in __init__, a custom Visualizer that plots model fits during and after the search, and a custom Result carrying science-specific attributes. Use when the user wants on-disk visualization of fits as the search runs, richer Result objects, or an Analysis carrying masks/kernels/covariances. Builds on af_wrap_likelihood (do that first if the likelihood isn't wrapped yet); not for the wrapping itself."
---
<!-- Generated by PyAutoBrain/bin/project_discovery.py; do not edit. -->

Read and follow the canonical skill: [SKILL](../../../skills/af_custom_analysis.md).
7 changes: 7 additions & 0 deletions .codex/skills/autofit-assistant-af-debug-fit-failure/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: autofit-assistant-af-debug-fit-failure
description: "Triage a misbehaving fit — garbage posteriors, stuck samplers, NaN likelihoods, truth not recovered, walls of sampler warnings. A strict-order diagnostic flowchart: likelihood sanity first, then prior coverage, then data pathology, then sampler diagnostics — because each later stage is meaningless if an earlier one is broken. Use when the user says \"the fit isn't working\", \"the posterior looks wrong\", \"the sampler is stuck\", or a simulation recovery failed. Not for slow-but-correct fits (that is a chaining/budget conversation, af_chain_searches / af_configure_search)."
---
<!-- Generated by PyAutoBrain/bin/project_discovery.py; do not edit. -->

Read and follow the canonical skill: [SKILL](../../../skills/af_debug_fit_failure.md).
7 changes: 7 additions & 0 deletions .codex/skills/autofit-assistant-af-ingest-paper/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: autofit-assistant-af-ingest-paper
description: "Add a verified paper from the user's scientific domain to the literature record — project-local (`wiki/project/bibliography.md`) by default when working inside a science project, or this clone's literature wiki + canonical BibTeX layer when in the assistant clone or on explicit promotion. Accepts a local PDF or public paper URL, resolves or adds canonical metadata, writes a compact claim-oriented source entry, updates relevant concept/entity links, validates key consistency, and never records local PDF paths. This is a primary domain-adaptation channel: each ingested paper makes the assistant more fluent in the user's field. Use when a user wants a paper added so future sessions can cite its supported claims reliably."
---
<!-- Generated by PyAutoBrain/bin/project_discovery.py; do not edit. -->

Read and follow the canonical skill: [SKILL](../../../skills/af_ingest_paper.md).
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: autofit-assistant-af-inspect-results-mcp
description: "Run and configure the read-only results-inspector MCP server, which lets an MCP client (Claude Desktop, Claude Code) inspect PyAutoFit output directories without running Python — list fits ranked by evidence, read model and posterior summaries, and view result images inline in chat. Use when the user wants to \"browse/inspect my results from chat\", asks about the MCP server, or wants Claude Desktop wired to their output folder. Not for loading results in Python (that is `af_load_results`) and not for running fits."
---
<!-- Generated by PyAutoBrain/bin/project_discovery.py; do not edit. -->

Read and follow the canonical skill: [SKILL](../../../skills/af_inspect_results_mcp.md).
7 changes: 7 additions & 0 deletions .codex/skills/autofit-assistant-af-load-results/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: autofit-assistant-af-load-results
description: "Load and analyse the results of completed PyAutoFit fits — the Result object's posterior samples (medians, errors at sigma, instances), the Bayesian evidence, marginalisation, CSV export, and bulk loading of many fits via the aggregator/database. Use when the user says \"load my results\", \"what did the fit find\", \"get the posterior/errors/evidence\", or wants to compare or tabulate many completed fits. Not for running fits (that is `af_run_search`)."
---
<!-- Generated by PyAutoBrain/bin/project_discovery.py; do not edit. -->

Read and follow the canonical skill: [SKILL](../../../skills/af_load_results.md).
7 changes: 7 additions & 0 deletions .codex/skills/autofit-assistant-af-plot-fit/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: autofit-assistant-af-plot-fit
description: "Visualise fits and posteriors — corner plots and search diagnostics via autofit.plot (aplt), model-vs-data and residual figures via matplotlib over model instances, and the af.ex.plot_profile_1d helper for 1D profiles. Use when the user says \"plot the fit\", \"show me the corner plot\", \"plot residuals\", or wants figures from a completed search. Not for the in-search Visualizer hooks (that is af_custom_analysis) or for loading the results being plotted (af_load_results)."
---
<!-- Generated by PyAutoBrain/bin/project_discovery.py; do not edit. -->

Read and follow the canonical skill: [SKILL](../../../skills/af_plot_fit.md).
7 changes: 7 additions & 0 deletions .codex/skills/autofit-assistant-af-refresh-api-docs/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: autofit-assistant-af-refresh-api-docs
description: "Run a full workspace-maintenance pass to bring skill recipes, wiki API pages, and other PyAuto* references back into line with the current installed stack and source repos. This is the umbrella entry point when the user wants \"make the docs current again\" rather than only \"check whether this symbol still exists\" or only \"refresh this wiki page\". It orchestrates `af_audit_skill_apis` (symbol-resolution drift), `af_update_wiki` (pinned-source prose drift), and any follow-up edits to `skills/*.md`. Use after a PyAuto* upgrade, after pulling fresh source repos, or on a deliberate maintenance cadence. Do not use for unrelated feature work."
---
<!-- Generated by PyAutoBrain/bin/project_discovery.py; do not edit. -->

Read and follow the canonical skill: [SKILL](../../../skills/af_refresh_api_docs.md).
7 changes: 7 additions & 0 deletions .codex/skills/autofit-assistant-af-run-search/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: autofit-assistant-af-run-search
description: "Execute a PyAutoFit model-fit — bring together the composed model, the Analysis (likelihood) and the configured search, run `search.fit(...)`, monitor progress, and do the first inspection of the returned Result. Use when the user says \"run the fit\", \"fit my data\", or has a model+analysis ready to execute. Not for choosing the sampler (that is `af_configure_search`) or deep posterior analysis (that is `af_load_results`)."
---
<!-- Generated by PyAutoBrain/bin/project_discovery.py; do not edit. -->

Read and follow the canonical skill: [SKILL](../../../skills/af_run_search.md).
7 changes: 7 additions & 0 deletions .codex/skills/autofit-assistant-af-setup-environment/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: autofit-assistant-af-setup-environment
description: "Detect, install, and configure a Python environment for the PyAutoFit stack. First checks the active interpreter and distinguishes an absent, broken, or ready stack; then offers pip in a venv (the normal user path) or editable clones (contributors). Sets sandbox cache env vars and verifies imports. Use when PyAutoFit is unavailable, imports fail, or a new machine needs setup."
---
<!-- Generated by PyAutoBrain/bin/project_discovery.py; do not edit. -->

Read and follow the canonical skill: [SKILL](../../../skills/af_setup_environment.md).
7 changes: 7 additions & 0 deletions .codex/skills/autofit-assistant-af-simulate-dataset/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: autofit-assistant-af-simulate-dataset
description: "Simulate a dataset from a composed model — draw or fix \"true\" parameters, generate noiseless model data, add noise, and save it alongside a truth record, so fits can be validated against a known answer before touching real data. Use when the user says \"simulate data\", \"make a test dataset\", \"check the pipeline recovers known inputs\", or before a first fit on an expensive real dataset. Not for preparing real data (that is the data-inspection conversation in af_run_search)."
---
<!-- Generated by PyAutoBrain/bin/project_discovery.py; do not edit. -->

Read and follow the canonical skill: [SKILL](../../../skills/af_simulate_dataset.md).
7 changes: 7 additions & 0 deletions .codex/skills/autofit-assistant-af-to-notebook/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: autofit-assistant-af-to-notebook
description: "Convert a generated narrative-docstring PyAutoFit script (.py) into a Jupyter notebook (.ipynb) — each top-level docstring becomes a markdown cell, the code between becomes code cells. Use when the user says \"turn this into a notebook\", \"convert to ipynb\", or wants a Jupyter/Colab version of a script the assistant produced."
---
<!-- Generated by PyAutoBrain/bin/project_discovery.py; do not edit. -->

Read and follow the canonical skill: [SKILL](../../../skills/af_to_notebook.md).
7 changes: 7 additions & 0 deletions .codex/skills/autofit-assistant-af-update-wiki/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: autofit-assistant-af-update-wiki
description: "Refresh wiki/ pages whose pinned source commits have moved, by re-reading the relevant source files from the PyAuto* repos and rewriting stale sections. Also surfaces newly added public APIs (new classes / functions in __init__.py) so the user can decide whether they warrant new wiki pages. Use whenever the user reports an API change, after pulling fresh source repos, or on a manual refresh cadence. Do NOT run opportunistically as part of unrelated work — the diff should be reviewable."
---
<!-- Generated by PyAutoBrain/bin/project_discovery.py; do not edit. -->

Read and follow the canonical skill: [SKILL](../../../skills/af_update_wiki.md).
7 changes: 7 additions & 0 deletions .codex/skills/autofit-assistant-af-wrap-likelihood/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: autofit-assistant-af-wrap-likelihood
description: "Wrap the user's existing likelihood code into a PyAutoFit `Analysis` class — the assistant's defining task and the ideal domain-adaptation entry point. Takes a function or method the user already trusts (anything that scores parameters against their data), builds the `af.Analysis` subclass around it without altering its numerics, pairs it with a composed model, and validates the wrapper on hand-built instances before any fit. Use when the user says \"wrap my likelihood\", \"connect my code to PyAutoFit\", \"I already have a function that computes chi-squared/log-likelihood\", or brings analysis code of their own. Not for composing priors (af_compose_model) or running fits (af_run_search)."
---
<!-- Generated by PyAutoBrain/bin/project_discovery.py; do not edit. -->

Read and follow the canonical skill: [SKILL](../../../skills/af_wrap_likelihood.md).
7 changes: 7 additions & 0 deletions .codex/skills/autofit-assistant-contribute-upstream/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: autofit-assistant-contribute-upstream
description: "Prepare a scoped update to autofit_assistant and propose it back upstream. Use this skill when the user says \"contribute this back\", \"open a PR upstream\", \"suggest this to the assistant\", or \"send this to PyAutoLabs/autofit_assistant\". It validates the git remote layout, confirms PR scope, creates or reuses a feature branch, stages only the intended files, commits with the repo's commit conventions, pushes either to the upstream repo (for collaborators) or the user's fork, and opens a draft PR against PyAutoLabs/autofit_assistant."
---
<!-- Generated by PyAutoBrain/bin/project_discovery.py; do not edit. -->

Read and follow the canonical skill: [SKILL](../../../skills/contribute-upstream.md).
7 changes: 7 additions & 0 deletions .codex/skills/autofit-assistant-start-new-project/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: autofit-assistant-start-new-project
description: "The single bridge from the assistant to a standalone science project, and the project's full lifecycle. Use when the user says \"start a new project\", \"create a project\", \"set up a science project\", \"set up a paper repo\", \"share this analysis with collaborators\", \"continue a collaborator's project\" (they forked/cloned one), \"open-source the repo that goes with my paper\", or \"prepare this project for public release\". Creates a separate, self-contained git repo for one analysis/paper that refers back to this assistant for skills and wiki, then carries it through Create → Work → Collaborate → Publish."
---
<!-- Generated by PyAutoBrain/bin/project_discovery.py; do not edit. -->

Read and follow the canonical skill: [SKILL](../../../skills/start-new-project.md).
12 changes: 7 additions & 5 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ never-rewrite-history.
Map every request onto one or more layers:

1. **Instructions** (this file, `README.md`) — meta.
2. **Skills** (`skills/*.md`, symlinked into `.claude/skills/`) — *procedural*: how to do a
2. **Skills** (`skills/*.md`, exposed through generated Claude and Codex adapters) — *procedural*: how to do a
task. Inference skills are `af_<task>.md` and produce/evolve a Python script;
project-workflow skills (`start-new-project.md`, `contribute-upstream.md`) drive
repo-level operations. Skills starting with `_` (`_style.md`, `_bootstrap_skill.md`) are
Expand Down Expand Up @@ -191,7 +191,7 @@ grep the frontmatter `description:` of `skills/*.md` for a topical question.
When no skill fits, follow [`skills/_bootstrap_skill.md`](./skills/_bootstrap_skill.md):
confirm scope, read `_style.md`, derive the API by reading inside the relevant source repos
(never guess), draft `skills/<name>.md`, add a wiki page if needed, register it in
`skills/README.md`, and add a `.claude/skills/<name>.md` symlink.
`skills/README.md`, and regenerate both discovery surfaces as described there.

---

Expand All @@ -218,9 +218,11 @@ When **not** in maintainer mode, commit at natural checkpoints (a script + its
- **One checkpoint = one commit.** **Stage explicitly by filename** — never `git add -A`.
- **Never push** (always an explicit user action). **Never skip hooks** (no `--no-verify`);
fix the underlying issue and make a new commit.
- **Co-author trailer.** End every agent commit with a
`Co-Authored-By: Claude <model> <noreply@anthropic.com>` trailer naming the current
session's model — this marks the commit as agent-authored.
- **Agent attribution.** Name the actual harness and model in the commit body
when known (for example, `Agent: Codex; model: <actual model>`). Use a
`Co-Authored-By` trailer only when the active harness supplies a valid identity;
never invent a provider email, model name, or Claude attribution. If the model
is unavailable, record the known harness and say the model is unavailable.
- If the user is on `main` (or any branch tracked as `origin/HEAD`), pause and confirm
before committing rather than landing directly there.

Expand Down
Loading
Loading