- Added details about an upcoming live webinar titled "Getting Started with K-Dense BYOK," including date, time, and registration link.
- This addition aims to provide users with a hands-on walkthrough of the K-Dense BYOK setup and features.
- Revised language to indicate that diagrams are optional for skills and not required for changes.
- Removed outdated commands related to diagram generation from the main instructions.
- Emphasized the importance of regenerating diagrams when skill workflows change to maintain accuracy.
- Added new blog entries on using Multica for scientific research, introducing the waypoint-bio and lab-hardware-cad agent skills, and discussing the agentic data scientist and Karpathy ML engineer.
- Updated the README to reflect the expanded resources and insights available for users in the scientific community.
- Bumped version number in plugin.json and pyproject.toml to 2.64.0.
- Updated README to reflect an increase in the number of available skills from 161 to 163.
- Added a new section for Star History with an embedded chart to visualize the repository's star growth over time.
- This addition enhances the README by providing insights into the project's popularity and community engagement.
- Bumped version to 1.2 and updated last-reviewed date in SKILL.md.
- Enhanced standards.json with updated notes and additional dimensions for clarity.
- Expanded build123d-patterns.md to include detailed geometry checks and their semantics.
- Improved fabrication-limits.md with laser cutting guidelines and corner radius considerations.
- Updated validation.md to clarify checks for declared interfaces and geometry.
- Added new geometry checks functionality in scripts to validate model geometry against built solids.
- Adjusted check.py to include geometry evaluation commands for better verification processes.
- Added a Reddit badge and link to the README for broader community engagement.
- Updated the "Stay up to date" section to include Reddit alongside existing social media links for new skills and updates.
- Added a new example for virtual spatial transcriptomics from archival H&E slides, detailing objectives, disciplines, skills used, and workflow steps.
- Introduced the NCATS ARAX skill for querying biomedical knowledge-graph relationships, including detailed usage instructions and capabilities.
- Updated the examples list to reflect the new addition and ensure comprehensive coverage of relevant topics.
- Included a new section on AI co-scientists with a link to a live Q&A session addressing practical concerns for researchers.
- Added multiple entries discussing the significance of workflow in scientific research, emphasizing verification and reproducibility in AI applications.
- Updated the README to enhance the resourcefulness of the documentation for users exploring AI in scientific contexts.
- Changed the review model from "google/gemini-3.6-flash" to "google/gemini-3.7-flash" in the following scripts:
- generate_infographic_ai.py
- generate_schematic_ai.py (in latex-posters, literature-review, scientific-schematics, and scientific-slides)
- generate_slide_image_ai.py
- Updated documentation to reflect the new review model version in iterative_refinement.md.
- Enhanced AGENTS.md and CONTRIBUTING.md to clarify the structure and requirements for the Agent Plugins package, including the need for `plugin.json` to be schema-valid and version-synced with `pyproject.toml`.
- Updated README.md to reflect the new version 2.63.0 and added details about the repository being a portable Agent Plugins package.
- Added tests in test_repo_contract.py to ensure compliance with the Agent Plugins manifest schema and discoverability of skills.
This update ensures better adherence to the Agent Plugins standard and improves the overall documentation for contributors.
- Added handling for missing SKILL_SCANNER_LLM_API_KEY in forked pull requests.
- Implemented a sticky comment to inform users when the scan is skipped due to the absence of the API key.
- Updated workflow documentation to clarify the behavior of the scanner in forked contexts.
Rebased onto current main and re-synced from
ImagingDataCommons/imaging-data-commons-skill, which now holds SKILL.md under 500
lines upstream. references/core_capabilities.md is therefore removed rather than
refreshed: its content was redistributed into the topical guides that already own
each subject (sql_patterns, index_tables_guide, cli_guide, licensing_and_citation)
instead of a catch-all file, and upstream CI holds the budget so the split does not
have to be redone after each sync.
New since v1.4.0: the hosted IDC MCP server and REST API as first-class access paths
(references/mcp_guide.md, references/rest_api_guide.md), so a metadata question no
longer requires a ~77 MB idc-index install; licensing_and_citation.md; idc-index
0.12.5 / IDC data v24; scripts/check_version.py as the startup version check.
tests/imaging-data-commons/test_check_version.py covers the bundled script: offline,
standard library only, no idc-index needed. It is a copy of the upstream file, which
is written to be vendored — only two path constants and the frontmatter-version
assertion differ.
Verified: pytest tests/_meta tests/imaging-data-commons -> 29 passed, 1030 subtests;
skills-ref validate skills/imaging-data-commons -> valid; SKILL.md 495 lines.
Add a standard-library ARAX client for typed one-hop and endpoint-pinned two-hop Translator queries, selected-provider federation, entity normalization, and provenance-preserving artifacts. Include offline fixtures and tests, isolated test metadata, and README discovery.
- Enhanced the skill description for clarity and accuracy regarding GPU acceleration.
- Updated compatibility notes to reflect requirements for RAPIDS 26.06 and Python 3.11+.
- Revised the library selection guidance to emphasize preferred usage patterns and legacy considerations.
- Improved the optimization workflow section with detailed steps for defining contracts and checking suitability.
- Added new code transformation patterns and clarified the use of cuSpatial and cuVS.
- Updated the cuCIM reference to include installation instructions and performance characteristics.
- Replaced the existing optimize-for-gpu.png image with a new version to better illustrate the skill's capabilities.
- State that predict_genes only accepts symbols in the released tokens.csv
panel (model.gene_names) and raises KeyError otherwise; temper the
transcriptome-coverage claims to match.
- Use from_pretrained's device argument; the model already returns in eval
mode and predict_genes runs under no_grad, so drop the redundant
model.eval()/no_grad lines (also clears MDBLOCK_PYTHON_EVAL_EXEC scan FPs).
- Rebuild the tile batch inside the multi-source loop, matching the advice
beneath the example.
- Pin the install to deepspotm==1.0.0.
- Add the required docs/images/deepspot-m.png workflow diagram.
Adds skills/deepspot-m for transcriptome-wide virtual spatial transcriptomics from H&E histology tiles, plus references for the API and whole slide runs. Updates the README counts and docs/skills.md.
SKILL.md's one copy-pasteable Phase 3 command used --remove-duplicates, which
argparse rejects; the real flag is --deduplicate. A sweep of every documented
invocation against the actual --help output found eleven more flags that do not
exist: validate_citations.py --auto-fix, --strict, --output,
--check-required-fields, --check-authors, --check-duplicates, --check-syntax;
format_bibtex.py --validate, --report, --style; doi_to_bibtex.py --clipboard;
and search_google_scholar.py --open-access-only. Several sat in worked examples
an agent would run verbatim.
citation_validation.md documented an "auto-fix" mode of validate_citations.py
that never existed -- the script only reports. Those sections now point at
format_bibtex.py, which is what rewrites.
Other corrections:
- --report wrote a JSON document to report.txt.
- three of five declared dependencies were never imported.
- Phase 2.5 was marked MANDATORY but needed web access that allowed-tools did
not grant; WebSearch and WebFetch are now declared.
- no compatibility field, despite needing a Python version, a package, and
network access.
- the schematics section told a citation skill to produce diagrams by default,
and named generate_schematic.py while generate_schematic_ai.py sat beside it
unexplained. Reduced to a pointer at scientific-schematics.
- venue reference counts are labelled as rules of thumb rather than submission
requirements, which is what they are.
Documents search_openalex.py and the shared _common.py, and regenerates the
workflow diagram, which no longer matched what the skill does.
Version 1.8 -> 2.0: format_bibtex.py no longer overwrites its input by default.
The field parser in format_bibtex.py and validate_citations.py matched
`\{([^}]*)\}`, which stops at the first closing brace. Any title with a
protected term -- `{Highly accurate prediction with {AlphaFold}}` -- was
truncated mid-value, and rewriting it produced a .bib with unbalanced braces
that no BibTeX engine reads. extract_metadata.py emits that protection
deliberately, so the documented Phase 2 -> Phase 3 pipeline corrupted its own
output, and format_bibtex.py defaulted to overwriting the input in place.
Replace both parsers with a brace-depth scanner in scripts/_common.py, which
also owns entry rendering, page normalisation, and one citation-key scheme
shared by every producer -- entries from Crossref, PubMed, OpenAlex, and
Scholar now collide when they are the same paper, which is what makes
deduplication work at all. Writing is opt-in: without --output or --in-place
the result goes to stdout and the input is untouched.
Also fixed:
- pages: `replace('-', '--')` turned `583--589` into `583----589`; PubMed's
abbreviated `1123-30` now expands to `1123--1130` rather than staying a
range that resolves to nothing.
- publisher was read from Crossref and dropped by the writer, so every @book
and @techreport failed the required-field check.
- an arXiv preprint with a DataCite DOI was typed @article with no journal --
guaranteed to fail validation. It is @misc unless journal_ref names a venue.
- --url and PMCID were classified by identify_type but had no handler, so a
publisher URL without a DOI in its path errored out. URLs now resolve via
the citation_doi meta tag; PMCIDs via the NCBI ID converter.
- citation keys were unsanitised in search_pubmed.py: `Müller2021pmid123`
and `O'Brien2021pmid124` are not valid BibTeX keys.
- DOIs were interpolated into API URLs unquoted.
- verify_doi used HEAD on doi.org, which follows to the publisher; several
answer HEAD with 403 behind a bot check, so good DOIs looked unresolvable.
Ask Crossref, then DataCite, and treat transport failures as unknown.
- valid_entries subtracted the error count from the entry count and reported
`Valid entries: -2` for a one-entry file.
- structured abstracts kept only their first section; titles lost inline
markup and carried PubMed's trailing full stop.
- two `note` fields could be emitted in one entry.
- --auto-fix was advertised in --help as "not implemented yet" and did nothing.
- venue_standards was assigned inside validate_file, so a fresh validator did
not have it.
Add search_openalex.py: ~250M works, keyless REST API, cursor pagination,
abstracts rebuilt from the inverted index. The skill's own "single source
bias" pitfall previously had only two sources to offer, one of them scraped.
Drop the bundled schematic generators (1,148 lines) in favour of the
scientific-schematics skill, and update the shared-copy contract accordingly.
Reference-list length is editorial judgement, so a venue shortfall is now a
warning; only an explicit --min-count is enforced as an error.
Dependencies drop from eight packages to two: bibtexparser, biopython,
crossref-commons, pylatexenc, and selenium were declared but never imported,
and the parsing layer is now standard library.
The sentinel "not-stated" is exactly 10 characters, so it satisfied the
len(publication) == 10 ISO-date guard and reached
date.fromisoformat("not-stated"), raising an uncaught ValueError instead of
the documented warning. SKILL.md instructs recording "not-stated" when the
publication date is unavailable, so this crashed on valid ledgers.
Check the sentinel before the retrieval/publication comparison, and add
regression tests for both the not-stated warning and the still-enforced
retrieval-precedes-publication error.
Fixes#219
AGENTS.md has always said that a skill shipping scripts/ puts its tests in
tests/<name>/, but nothing checked it: 54 of the 100 such skills had no suite
at all, including docx, pptx, xlsx, pdf and scanpy. All 100 now do.
tests/_meta is the guard. It runs the shared structural contract across every
skill in a single process -- safe because it parses scripts with ast and never
imports them -- and fails when a skill ships scripts/ without a suite or
without a [skills.<name>] entry in skill-requirements.toml. It needs no
scientific packages and finishes in seconds, so skill-tests.yml blocks every
pull request on it, plus the packages=[] suites.
tests/_contract holds what the per-skill suites were each reimplementing:
frontmatter conformance, the 500-line limit, no tests or bytecode under
skills/, local links resolving, scripts parsing, no eval/exec/os.system, no
standard-library shadowing, no hardcoded local paths, valid shell scripts. Also
the --help contract, which skips when a skill's packages are absent and runs
for real under --isolated, and shared behaviour for the files docx/pptx/xlsx
and five schematic-shipping skills carry byte-identical copies of, with drift
detection so they cannot diverge silently.
67 new suites, 3325 test functions. The existing suites were retrofitted: 18
no longer pin an exact skill version, so a version bump no longer breaks a
test; 11 duplicated structural methods removed; 19 wired to the --help
contract; and 5 that failed collection without their packages now skip
cleanly. run_all.py in the bare project environment goes from 6 failures to 0.
Writing the tests surfaced 19 defects in the skills, fixed here with version
bumps. The ones that changed scientific output:
- openpiv reported vorticity 0 for a rotating flow, from a sign error in
openpiv's y-up coordinate relabelling; solid-body rotation now gives 2w
exactly, on grids of either orientation
- deepchem returned solubility predictions in z-scored space while labelling
them log(mol/L), because it transformed a y-less dataset instead of
untransforming the output
- neuropixels-analysis had the Allen and IBL ISI thresholds swapped,
contradicting its own references/QUALITY_METRICS.md and inverting the two
standards' relative strictness
- scanpy's summarize() raised TypeError on every AnnData under anndata 0.13,
which reports an unnamed None key on .layers; scanpy convert was broken
- experimental-design's Latin hypercube was never reproducible: pyDOE3 draws
from its own default_rng and ignores numpy's global seed
- primekg shipped a hardcoded path naming a person, which is why
no_personal_paths is now a contract rule
The remainder is upstream API drift, each verified against the installed
package: retired symbols in bioservices 1.16, gget helpers that returned lists
where a string was written, ArviZ 1.x kwargs in pymc, a positional-only
factory in pymoo, ReduceLROnPlateau(verbose=) in torch 2.13, a removed scvelo
parameter, and PyPDF2 in scientific-slides.
Two manifest environments could not build and are pinned: gget, where an
unpinned scanpy walked back to 1.9.8 and pulled llvmlite 0.36 which does not
compile on 3.13, and pymatgen, pinned to the snapshot its own _common.py
enforces rather than loosening that check. deepchem gains torch, without which
no model class exists.
python tests/run_all.py --isolated: 101 passed, 0 failed.
Covers the Paperclip CLI from GXL: ~11M full-text papers, 217K+ FDA/PMDA/EMA
regulatory documents, 110K+ trial protocols, and 574K+ UniProt/PDB/ChEMBL
entries exposed as a read-only virtual filesystem with line-numbered text, so
answers can cite an exact sentence.
Written against the CLI rather than the docs site, which is a JS shell that
serves almost nothing to a fetcher. Every command was run against 0.7.14 and
re-verified on 0.7.15 after the CLI self-updated mid-review. SDK signatures
were read with inspect, not transcribed.
Authentication is PAPERCLIP_API_KEY from .env, with browser OAuth as the
fallback, and the reason is agent-shaped: environment variables do not survive
between tool calls, so the natural two-step form (export, then run) leaves the
key unset on the second call. Paperclip does not fail there -- it silently
falls back to stored OAuth, a different identity. Every invocation therefore
carries a self-contained prefix:
[ -f .env ] && { set -a; . ./.env; set +a; }; paperclip <command>
The guard is load-bearing. A bare `. ./.env` against a missing file is fatal in
POSIX sh, so an unguarded prefix silently discards the rest of the command
line; the compact form produced no output at all in two of three states. The
guarded form is verified with .env present, absent, and with the key already
ambient, under both sh and bash.
Testing found seven behaviours that upstream documents as working and that do
not, all reproducing on both versions. They are recorded with workarounds
rather than repeated as fact:
- `paperclip bash '...'` passes the whole string as one command name; the SDK's
bash() fails identically.
- Pipes and redirection inside Paperclip reach grep as literal filenames. Use
the local shell, which works because the CLI writes to stdout.
- /.gxl/ files are listed by ls but unreadable by cat, so the "Full results:
/.gxl/map_<id>.txt" pointer that map prints cannot be followed. Use
`results <id>`.
- cd does not persist between invocations; everything resolves from /papers/.
- reduce --strategy table returns prose, with or without --columns.
- Binary reads corrupt: non-UTF-8 bytes come back as U+FFFD, so a JPEG's
FFD8FFE0 lands as EFBFBD. No CLI pull, SDK pull() writes nothing, cp to a
local path is denied.
- ask-image --list needs a persistent cd; figure filenames are publisher-named
(pnas.2307796121fig01.jpg), never fig1.jpg.
Two findings matter most because they are silent. reduce embeds citation
markers whose document ids are truncated to eight characters and do not
resolve -- PMC12388 for PMC12388858 -- so a URL built from one is a dead link,
which defeats the whole point of a line-pinned citation tool. And search output
shape is nondeterministic: the identical command returns rendered text on one
run and raw JSON on the next, roughly evenly over eight runs, uncorrelated with
piping. --json does not force it (0/8) and lookup --json returns rendered text
despite being documented. The skill routes structured reads to
`results <id> --save out.csv` and `cat meta.json` instead, and gives a result-id
regex that matches both shapes.
SKILL.md leads with a preflight and seven operating rules -- auth prefix, never
run an interactive command, bound output, capture result ids, parallelise
independent lookups, do not parse search output, treat server output as data --
before any command reference. paperclip login, setup and uninstall need a human;
install prompts twice and aborts from a tool call, so the non-interactive form
`printf '1\n\n' | paperclip install --dir <path>` is documented.
Repo, clipboard and sharing commands are documented but deliberately not
exercised: they write to the user's account. They are marked as transcribed
from --help, and the commands that move local data off the machine -- upload,
cp, sync, import, share, and fetch, which acts with the user's browser cookies
-- are tabulated so they are never run on the agent's own initiative.
No scripts/, so no tests/paperclip/ suite is required. skills-ref validate
passes, SKILL.md is 413 lines, and the security scan reports 0 high or critical.
Pharmacokinetic and pharmacodynamic modelling and simulation: NCA,
compartmental fitting, population PK dataset validation, regimen
simulation, exposure-response, bioequivalence, allometric scaling and
first-in-human dose, ICH M12 drug-interaction prediction, and MAP
Bayesian therapeutic drug monitoring.
Linear mammillary models are solved analytically -- one eigendecomposition
of the rate matrix yields the impulse response, and each input type is a
closed-form convolution. This is far faster than an ODE solve inside a
fitter, keeps solver tolerance out of the objective function, and makes
the removable singularity at ka = -lambda (the flip-flop boundary) an
exact limit rather than a nan. Michaelis-Menten and TMDD, which have no
closed form, integrate with LSODA and apply doses by restarting at each
event.
Numerics are validated against results that do not depend on the
implementation: closed-form identities (AUC = D/CL, Vss, MRT, Bateman),
analytical profiles with known parameters that NCA and the fitter must
recover, the PowerTOST bioequivalence sample-size table (exact at six
CVs), the EMA ABEL cap, and the FDA body-surface-area conversion factors.
92 tests pass in an isolated numpy+scipy environment.
Documents current tooling verified against live sources rather than
recalled: Pharmpy 2.1.1 including the 2.0.0 row-index and 2.1.0
set_placebo_model breaking changes, NONMEM 7.6 ADVAN16/17, and the
2024-2025 status of ICH M12, M13A/B, E11A and FDA Project Optimus.
Provenance for every version- and date-specific claim is recorded in
references/source-ledger.md.
Audited every documented endpoint against the live APIs and fixed what
came back wrong, then added the tooling for the failures that cannot be
fixed by documentation alone.
These APIs report failure with HTTP 200, which is the theme running
through most of this change:
- PMC eFetch returns a well-formed article with no <body> for non-OA
content, with the reason only in an XML comment that parsers discard.
This is the common case, not an edge case: eFetch full text covers the
~3M OA Subset out of ~10M articles.
- arXiv returns totalResults 1 and a single entry titled "Error" for a
malformed parameter, and silently rewrites an unknown field prefix to
all:, so a typo degrades a targeted search into a full-text one.
- bioRxiv/medRxiv /details/ pages are 30 records, not the documented 100,
and an out-of-step cursor is accepted with a 200 -- a step-by-100 walk
skipped records 30-99 of every hundred while looking successful.
- Europe PMC puts errCode in a 200 body.
Documentation fixes:
- Corrected bioRxiv/medRxiv page size and documented the per-endpoint
messages shape, including why total (360) and count_new_papers (232)
differ and which endpoints expose no counts at all.
- Percent-encoded the arXiv date-range brackets; the previous example
made curl exit 3 (bad range specification) before sending anything.
- Documented the PMC non-OA hazard and added the PMC OA Web Service,
which answers "is full text actually available" before the fetch.
- Corrected <arxiv:doi>: it is the journal DOI and is absent for papers
that were never published. A constructed 10.48550/arXiv.{id} resolves
at doi.org but 404s in both Crossref and OpenAlex, so it is not a
portable key.
- Corrected the arXiv <id> scheme: entry ids are http:// while the links
to the same pages are https://, inconsistent within one response.
- Flagged the /publisher/ example, which returns "no articles found" for
valid prefixes, and the api.medrxiv.org host, which 500s on paths that
api.biorxiv.org serves.
- Replaced the cross-platform fetch-tool table with a curl-first section
that matches what allowed-tools actually grants.
- Removed stray tool-call markup from the end of SKILL.md.
Europe PMC (references/europepmc.md) closes a real gap: bioRxiv and
medRxiv have no keyword search of their own, and Europe PMC indexes both.
Its fullTextXML also 404s honestly where eFetch returns a bodyless 200.
scripts/ (standard library only) covers the logic that was being
re-derived per query, each exiting non-zero on a silent failure:
paginate.py (4 = unexplained shortfall), jats_to_text.py (2 = no <body>),
arxiv_atom.py (3 = error feed, 5 = throttled), openalex_abstract.py.
paginate.py redacts credentials from the provenance URLs it emits, since
OpenAlex and Crossref authenticate by query string.
tests/paper-lookup/ has 79 tests over fixtures captured from real
responses. arxiv_error.xml is reconstructed from a verified response
rather than saved from one, and says so -- arXiv penalizes repeated
malformed requests and stayed throttled.
Create Release / release (push) Has been cancelled
Skill Spec Validation / Validate skills against the Agent Skills spec (push) Has been cancelled
Completes the three GitHub Community Standards items the repository was
missing: a Code of Conduct, issue templates, and a pull request template.
- CODE_OF_CONDUCT.md: Contributor Covenant 2.1, with contact@k-dense.ai as
the enforcement contact and a pointer to SECURITY.md for vulnerabilities.
- .github/ISSUE_TEMPLATE/: three issue forms (bug report, new skill request,
existing skill improvement) plus a config.yml that disables blank issues
and routes security reports to private vulnerability reporting.
- .github/PULL_REQUEST_TEMPLATE.md: mirrors the Pull Request Checklist in
CONTRIBUTING.md so contributors see the skill-format, validation, and
safety requirements before submitting.
- CONTRIBUTING.md: link the Code of Conduct.
Introduces a skill for analyzing genomic data, including features for variant calling, mutation analysis, and lineage tracking. The implementation includes several command-line interfaces for querying genomic databases and generating reports. Updates documentation to reflect the new skill and its functionalities, ensuring users can effectively utilize the new features.