Repository navigation
Skill Constellations dataset v1.0
This dataset is the dated copy network behind the Skill Constellations study of how agent skills spread on GitHub.
It dates each adoption of a skill lineage by a repository, links each copy to its source, and lists the commit history of every SKILL.md file.
The snapshot date is 2026-07-20.
All times are UTC in ISO 8601 form, and repositories are named by their GitSkills full_name.
The tables hold no author names, no email addresses and no commit messages.
Files
history
The table is stored in history.parquet.
The table has 16,222,844 rows.
Every first-parent change to a SKILL.md in the cloned repositories.
Rows are restricted to the repositories of the study population.
The population keeps valid SKILL.md files and drops forks, files with a wrong content hash and files first committed before 2025-10-01.
Rows that involve a withheld blob are removed.
| Column | Type | Meaning |
|---|---|---|
| repository | string | GitSkills full_name of the repository |
| commit | string | Git commit hash |
| author_time | string, UTC ISO 8601 | Author time of the commit |
| commit_time | string, UTC ISO 8601 | Committer time of the commit |
| status | string | Change status of the file in the commit (A added, M modified, D deleted) |
| old_blob | string | Git blob hash of the SKILL.md before the commit (all zeros when the file was added) |
| new_blob | string | Git blob hash of the SKILL.md after the commit (all zeros when the file was deleted) |
| path | string | Path of the SKILL.md inside the repository |
adoptions
The table is stored in adoptions.parquet and adoptions.csv.gz.
The table has 2,139,851 rows.
One row per adoption, the first appearance of a lineage in a repository.
It is dated at the later of the lineage time and the creation of the repository.
Mirrors are excluded.
| Column | Type | Meaning |
|---|---|---|
| repository | string | GitSkills full_name of the adopting repository |
| path | string | Path of the SKILL.md at which the repository first held the lineage |
| blob | string | Git blob hash of the version held at that path |
| lineage | integer | Lineage identifier, joins to lineages |
| adopted_at | string, UTC ISO 8601 | Time of the adoption, never earlier than the creation of the repository |
| origin | boolean | TRUE for the first adoption of the lineage |
lineages
The table is stored in lineages.parquet and lineages.csv.gz.
The table has 1,434,748 rows.
A lineage joins the versions of one skill across edits within one front matter name.
Identifiers follow the order of first adoption, then the smallest blob hash.
They are assigned after withholding and run from 1 to the number of lineages.
| Column | Type | Meaning |
|---|---|---|
| lineage | integer | Lineage identifier |
| name | string | Normalised front matter name of the skill (empty when the skill has none) |
| versions | integer | Number of distinct versions (blobs) in the lineage |
| adopters | integer | Number of repositories that adopted the lineage |
| origin_repository | string | Repository of the first adoption (empty when the lineage has no dated adoption) |
| origin_at | string, UTC ISO 8601 | Time of the first adoption (empty when the lineage has no dated adoption) |
copy_events
The table is stored in copy_events.parquet and copy_events.csv.gz.
The table has 18,282 rows.
A copy event is a commit that adds 10 or more skill files.
It is a bundle below 100 files and a bulk copy from 100 files.
One earlier adopter, the source, must already hold at least half of the existing lineages in the event, checked on a sample of at most 200 of them.
Identifiers follow time, then copier, then source, and are assigned after withholding.
| Column | Type | Meaning |
|---|---|---|
| event | integer | Copy event identifier, joins to transmissions |
| copier | string | Repository that received the copies |
| source | string | Repository that the copies came from |
| at | string, UTC ISO 8601 | Time of the commit that made the copies |
| lineages | integer | Number of lineages copied from the source in the event |
| kind | string | bundle (10 or more skill files in one commit) or bulk (100 or more) |
transmissions
The table is stored in transmissions.parquet and transmissions.csv.gz.
The table has 644,626 rows.
One row per lineage in a copy event that the source held before the copy.
| Column | Type | Meaning |
|---|---|---|
| lineage | integer | Lineage identifier, joins to lineages |
| source | string | Repository that held the lineage and was the source of the copy |
| copier | string | Repository that copied the lineage |
| at | string, UTC ISO 8601 | Time of the copy |
| event | integer | Copy event identifier, joins to copy_events |
Withheld records
Lineages that hold a version confirmed malicious by MalSkills are removed from every table.
Every history row whose old or new blob belongs to such a lineage or to the malicious class is removed as well.
85 lineages are withheld.
6,203 history rows are withheld.
258 adoption rows are withheld.
32 transmission rows are withheld.
No other information about withheld records is published.
Source and citation
The data derive from GitSkills (DOI 10.5281/zenodo.21875637), released under CC BY 4.0.
Please cite GitSkills together with this dataset.
License
This release is licensed under Creative Commons Attribution 4.0 International (CC BY 4.0).
You may share and adapt the data for any purpose, including commercial use.
You must give appropriate credit, link to the license, and indicate if you made changes.
You must not suggest that the licensor endorses you or your use.
The license text is at creativecommons.org/licenses/by/4.0/legalcode.
The LICENSE file holds the attribution line.
Integrity
SHA256SUMS holds the SHA-256 checksum of every other file in this directory.