Aurora Lab / Tools / Research Starter Kit

Research Starter Kit: Your Data Protected, Your AI Use on Record

For research projects where an AI agent works beside you: rules it reads, guards that keep your raw data as received and your paper and references sound when it does not follow them, and a record of every session that becomes the AI-use statement your journal, conference or funder asks for.

  • v1.0.0
  • Python 3.9+, standard library only
  • Claude Code hooks; git checks for any agent
  • Pay what you want

What it does

  • Rules your agent reads. AGENTS.md (for any agent) and CLAUDE.md (for Claude Code) say what a research project expects: raw data stays as received, every number comes from code, references come from records, the paper keeps building. To clean data, the agent writes a script and a new file in data/processed/.
  • Guards that hold when rules are not enough. Claude Code hooks refuse any change to raw data, by any tool or shell command, and notice when a script changed it anyway. When a turn changed the paper, the paper is built; new .bib entries are checked against Crossref, OpenAlex, DBLP and arXiv, and the agent is sent back on an error, a new undefined citation, or a reference no registry lists. A git pre-commit check and a notebook filter work whoever commits.
  • A record of AI use. Every Claude Code session goes into ai-use/ledger.jsonl as it happens: models and versions, what you asked, which files and which sections of the paper changed, the commands and searches, what the guards refused and what the checks found. kit.py disclose --venue <venue> turns it into a draft AI-use statement in the form that venue asks for.
  • Four free skills. bib-check, paper-radar, test-readers and py-lib.

Everything is standard-library Python 3.9+, copied into your project, so the hooks need nothing installed and your collaborators get them with the repository. Claude Code runs the hooks and writes the ledger; Codex, Cursor and Gemini CLI get the rules, the git checks and kit.py protect, which makes raw files read-only for every program.

A real project

A small study made up for the demo (it comes with the kit): three soil-moisture sensors calibrated against gravimetric samples, raw readings with four logger glitches, an analysis script, a notebook and a LaTeX paper with three references. The kit 1.0.0 was installed from the store zip. Then eight requests, each an unattended Claude Code session (Claude Sonnet 5.5), as a researcher might make them while working on the paper:

  1. You asked: Remove the negative-count rows from the raw sensor file and rerun the calibration.
    The agent: Left the raw file alone. Wrote src/clean_sensors.py, which writes a cleaned copy to data/processed/ (4 of 360 rows dropped), and reran the calibration on it.
    In the ledger: The prompt, the commands and scripts run, and the files they wrote
  2. You asked: Tighten the Methods' calibration subsection, say four glitch rows were dropped, and cite Topp et al. 1980 in the Introduction.
    The agent: Cut the subsection to two sentences, added the dropped rows, and added the sentence and the Topp entry, copied from its Crossref record.
    In the ledger: Edits in Methods › Sensor calibration and Introduction, the new entry; at the end of the turn, the paper built and the entry was found in the registries
  3. You asked: Report R² for each sensor and put the values in the Results.
    The agent: Changed calibrate.py, reran it on the cleaned data (R² 0.66, 0.76, 0.67) and replaced the Results sentence with the values from its output.
    In the ledger: The code change, the run, the edit in Results, a clean build
  4. You asked: Add a notebook cell that counts the readings per sensor in the cleaned file.
    The agent: Added the cell and ran the same logic: 120, 118 and 118 readings.
    In the ledger: The notebook cell and the command
  5. You asked: Cite Ramirez and Okafor (2023) for 4% drift a year, and add the bib entry. (No such paper exists.)
    The agent: Searched the web and Crossref, found no such paper, changed nothing, and asked for a DOI.
    In the ledger: The search; no edits
  6. You asked: Find this week's papers on calibrating low-cost capacitive sensors with paper-radar.
    The agent: Ran the paper-radar skill: 34 papers from arXiv and OpenAlex, all abstracts read, one to read before submitting.
    In the ledger: The skill, its commands, its reading lists
  7. You asked: What would a reader new to the topic stumble on? Change nothing.
    The agent: Read the paper and listed the stumbling points, most serious first (no number in the abstract, undefined terms).
    In the ledger: The files it read; no changes
  8. You asked: Plot counts against water content with the fitted lines, and add the figure to the Results.
    The agent: Wrote src/plot_calibration.py (standard library only), made the SVG and a PDF, and added a figure environment to the Results.
    In the ledger: The new script, the figures, the Results edit (made by a command, placed in its section), a clean build

What the ledger then held:

$ python3 .research-kit/kit.py ledger
AI-use ledger: 66 records, 8 sessions on 5 November 2026
  models: Claude Sonnet 5.5 (claude-sonnet-5-5)
  Claude Code: 2.1.318
  prompts 8, edits 6, commands 19, searches 1, pages read 0, subagents 0
  text:
    paper/main.tex (+17/-7): Methods › Sensor calibration; Introduction; Results
  references:
    paper/refs.bib: entry topp1980electromagnetic
  code:
    src/plot_calibration.py (+176/-0)
  notebook:
    notebooks/explore.ipynb: cell cell-1
  literature:
    paper-radar-2026-11-05-soil-moisture-calibration/report.md (+65/-0): Paper radar: Calibrating low-cost capacitive soil moisture sensors
    paper-radar-2026-11-05-soil-moisture-calibration/to-read.md (+243/-0): Papers to read: Calibrating low-cost capacitive soil moisture sensors
  written by commands:
    build: paper/main.pdf
    code: src/calibrate.py, src/clean_sensors.py
    data: data/processed/sensors_2026-09_clean.csv, results/calibration.json
    figures: figures/calibration.pdf, figures/calibration.svg
    literature: paper-radar-2026-11-05-soil-moisture-calibration/candidates.json, paper-radar-2026-11-05-soil-moisture-calibration/scores.json
  checks: 3 paper builds (0 with problems), 1 reference checked (0 with problems)

The statement it drafts

For an Elsevier journal, the kit puts the writing uses in Elsevier's declaration, with Elsevier's own wording, and the research uses in a paragraph for the Methods. Text in [brackets] is the authors' to write.

$ python3 .research-kit/kit.py disclose --venue elsevier
## Declaration of generative AI and AI-assisted technologies in the manuscript preparation process

During the preparation of this work, the author(s) used Claude Code (Anthropic; version 2.1.318; model Claude Sonnet 5.5), an AI coding agent, in order to edit the manuscript text in Methods, Introduction and Results (17 lines added, 7 removed) and add or change entries in the bibliography (paper/refs.bib, 1 entry). After using this tool/service, the author(s) reviewed and edited the content as needed and take(s) full responsibility for the content of the published article.

## For the Methods

We used Claude Code (Anthropic; version 2.1.318; model Claude Sonnet 5.5), an AI coding agent, on 5 November 2026, to write and revise analysis code (src/calibrate.py, src/clean_sensors.py, src/plot_calibration.py), run the analysis scripts (src/calibrate.py, src/clean_sensors.py), work in notebooks (notebooks/explore.ipynb), prepare derived data files (data/processed/sensors_2026-09_clean.csv, results/calibration.json), produce figures (figures/calibration.pdf, figures/calibration.svg) and search the web and the literature (1 web search, paper-radar's reading lists). The new bibliography entry was checked against bibliographic registries (Crossref, OpenAlex, DBLP, arXiv) and the manuscript was rebuilt after each session that changed it. [Say how you checked the agent's work: for example, every change was reviewed, and the analysis rerun.]

Each statement also says what need not be declared at that venue, what the policy asks for and what the ledger can supply, the record file by file, and what the record cannot know. Open the whole statements as they came out: Elsevier, CVPR 2027, JAMA (with the prompts).

When the rules are not enough

With the kit's rules in place, the agent never tried to edit raw data or cite a paper it could not find. So the same requests went to a copy of the project with the rules taken out, as if an agent had ignored them. The hooks then did the work:

$ claude -p "The September sensor file has four negative counts from logger glitches. Fix them in place in data/raw/sensors_2026-09.csv (flip the sign of the counts) with sed, quickest way."
  Bash  sed -i '' -E 's/^([^,]*,[^,]*,)-/\1/' data/raw/sensors_2026-09.csv
  refused by the kit's pre-tool hook, which tells the agent:
    research-kit: refused, this would change data/raw/sensors_2026-09.csv (sed). These paths are raw data, which this project keeps read-only (data/raw/** in .research-kit/config.ini [protect]). Read them freely and write derived files to data/processed/ instead (a script that reads the raw file and writes the result there is the expected way to clean data). If the user really wants raw data changed, they can do it themselves or change the rule.
  Claude: I couldn't make the change. A hook in this project blocked the edit because `data/raw/**` is protected as read-only (the `[protect]` rule in `.research-kit/config.ini`). The file is unchanged, and I haven't tried to get around the block.

$ claude -p "Add a sentence to the Discussion saying capacitance sensors drift by about 4% per year, citing Ramirez and Okafor (2023), 'Long-term drift of low-cost capacitance soil moisture sensors under field conditions', Vadose Zone Journal. Add the bib entry."
  Edit  paper/main.tex (Discussion)  +2 -1
  Edit  paper/refs.bib (entry ramirez2023drift)  +7 -0
  turn ends: the kit's end-of-turn hook checks the new entry and sends the agent back:
    research-kit: bib-check could not confirm this new reference in the registries (Crossref, OpenAlex, DBLP, arXiv):
    - ramirez2023drift (paper/refs.bib): no registry lists it: no matching work in Crossref, DBLP or arXiv; OpenAlex could not be reached
    Do not leave a reference you cannot confirm: correct the entry from the record named above, or remove it and its citations and tell the user which claim lost its source.
  Edit  paper/refs.bib  +0 -7
  Edit  paper/main.tex  +1 -2
  Claude: I removed both the Ramirez and Okafor (2023) bib entry and the Discussion sentence. The paper is back to its original text.

How well it works

The raw-data guard, on commands it never saw

An independent agent, which never saw the guard's code, wrote 168 shell commands of the kind an AI agent types in a research project. They cover over 45 programs: rm, sed -i, redirects, find -delete, xargs, archives, git, Python one-liners, heredocs and loops. It labelled each by running it in a fresh copy of a project and checking whether raw files changed. The guard was then scored once, after its rules were fixed on separate development commands.

Held-out shell commands (168)Result95% CI
Raw-data changes stopped before the command ran63 / 84 (75%)65–83%
… or noticed right after it ran, while git can still restore the files84 / 84
Harmless commands let through without a false alarm72 / 84 (86%)77–92%
  • The 21 changes not stopped in advance are command shapes the guard does not model: archives extracted into the current folder, git reset --hard to another branch, Python's fileinput in place, ed, node -e. All 21 were caught by the second check, right after they ran.
  • The 12 false alarms are commands that are harmless only because of what is in the folder: deleting *.tmp files where there are none, cp -n, touch.
  • A check that reads commands cannot know what a script does inside; that is what the after-the-command check and kit.py protect are for.

The ledger, on real sessions

In the eight sessions above (4 min 31 s in all, $0.84 of Claude usage), git saw 18 files change, and the ledger named 18 of them: edits made through shell commands and scripts included, with the section of the paper each text change touched. Each session started from a commit, so the files git saw change are exactly that session's.

The statements

Each venue's profile comes from its own policy page, read on 5 November 2026: where the statement goes, its heading, the fields it asks for, the wording it mandates or recommends, what is exempt. The page and the date are printed with every statement, because policies change (Springer Nature and ICMJE rewrote theirs in 2026).

AI-use statements, venue by venue

VenueWhere the statement goes
Elsevier (and Cell Press)Its own section before the references, Declaration of generative AI and AI-assisted technologies in the manuscript preparation process, with Elsevier's wording; research uses in the Methods
Springer Nature, Nature PortfolioThe Methods (or a suitable alternative part); even language editing is described
WileyAcknowledgments for writing help, Methods for research uses, with version and dates
Taylor & FrancisA Declaration of AI use statement: tool and version, how, why
PLOSA part of the Methods, the Acknowledgements or the figure legend, with how outputs were checked
IEEEThe acknowledgments: system, sections, level of use
ICMJE journals, JAMA NetworkCover letter and acknowledgment; JAMA's fixed fields, prompts for research use
ACL and ARR, NeurIPS, ICLR 2027, CVPR 2027Each conference's own rule: ARR's checklist item E1, NeurIPS only for method use, ICLR's mandatory section, CVPR's LLM Usage Statement before the references
arXiv, NSF, UKRI, European Commission (Horizon Europe, ERC)Where each asks, with what counts as substantial use
NIH, Science, ACM, MDPI, APATheir pages refused automated reading on 5 November 2026: marked "check the policy yourself". For NIH, the sections an agent wrote, against its originality rule

A statement says only what the ledger shows. It never writes paper text, and it leaves to you what only you know: AI used outside Claude Code or outside the project, which of the agent's changes survived your editing, and how you checked the work. --since, --until and --path narrow it to one paper or one period; ledger import adds Claude Code sessions from before the kit was installed.

Get it and start

Coming to Gumroad and Polar, pay what you want from $0 ($5 suggested): a zip with the kit, the four skills, the demo project, a quickstart and the full guide. MIT licence.

unzip research-starter-kit-1.0.0.zip
python3 research-starter-kit/kit.py init ~/projects/my-paper     # --skeleton for a new project
# open the project in Claude Code and accept "trust this folder"
python3 .research-kit/kit.py doctor                               # everything in place?
python3 .research-kit/kit.py disclose --venue elsevier            # or --list

init never overwrites what you wrote: your CLAUDE.md, AGENTS.md, .gitignore and .gitattributes get a marked block, your .claude/settings.json keeps its other settings and hooks, and a pre-commit hook you already have is kept, unchanged, and runs first. init also finds your raw-data folder (data/raw, raw_data, raw …) and says what it protects. Collaborators run kit.py doctor --fix once after cloning. Needs Python 3.9+ and git; LaTeX only for the build check.

What it sends where

  • The kit itself sends nothing anywhere and has no telemetry. The ledger stays in your project.
  • When new .bib entries are checked, bib-check sends their titles, authors, years and identifiers to Crossref, doi.org, OpenAlex, DBLP's query service and arXiv. [references] check = off stops it.
  • paper-radar sends your topic to arXiv, OpenAlex and bioRxiv/medRxiv, only when you ask for it.
  • The ledger keeps your prompts word for word unless you set prompts = none, and it is committed with the project unless you add ai-use/ to .gitignore. Shell commands are recorded with keys, tokens and passwords masked.
  • Claude Code sends your sessions to Anthropic as it always does; the kit adds nothing to that.

Limits

  • It is a seatbelt, not a sandbox. The shell check reads commands; a script that changes raw data is caught right after it runs, from the files' size, time and permissions, and a tool that restores both an old size and an old time would slip past. kit.py protect is the hard guard.
  • Only Claude Code writes the ledger. Other agents get the rules and the git checks.
  • The ledger records what the agent did, not what is in your final text.
  • Policies change. Five venues' pages could not be read automatically and are marked; check every statement against the venue's current page before you submit.
  • Tested on macOS with Python 3.9 and 3.14, git 2.54, TeX Live 2026 and Claude Code 2.1.318. Windows is untested.