Agent Native

external-data-upload

Uploads test data files to Filebase IPFS storage using the S3 API, replacing them with .cid content links, and maintains a manifest file.

by GreptileOfficial publisherNot reviewed

Identity proven by GitHub's verified organisation badge (greptileai)

Agents
Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode
License
Apache-2.0 (permissive)
Pin
3ae346cpinned Oct 9, 2026
Context cost
about 1,400 tokenswhen the skill loads
GitHub stars
0on greptileai/demo-itk
Scripts
3 scripts

What it does

“Upload ITK test data to Filebase IPFS storage and produce .cid content links via the S3 REST API + npx ipfs-car (no Kubo daemon required), optionally mirror into ITKTestingData, and normalize existing .md5 / .sha256 / .cid content links. Use when the user wants to add test images, baseline data, or model files under Testing/Data/ or a module's data/ directory, or when asked to convert hash-based content links to CID.”
The author's description, from SKILL.md

Generated summary from the skill's own text

Uploads test data files to Filebase IPFS storage using the S3 API, replacing them with .cid content links, and maintains a manifest file. Also normalizes existing hash-based content links to CID format and reconciles local mirrors with the Filebase bucket.

When to use it

  • Adding test images or baseline data to Testing/Data/ directory
  • Converting hash-based content links to CID format
  • Maintaining ITK test data storage infrastructure
  • Mirroring files to ITKTestingData GitHub Pages gateway

When not to

  • User lacks Filebase credentials or pixi environment setup
  • Files larger than 50 MB and GitHub mirror requested simultaneously

Install

These commands install from the publisher's repository and need no account.

skills CLI

npx skills add greptileai/demo-itk --skill external-data-upload

Installs from the repository's default branch, which may have changed since the commit we checked.

GitHub CLI 2.90 or later

gh skill install greptileai/demo-itk external-data-upload@3ae346c24099adce41da49dbc8201d73ee6f8a4f

Installs the commit we checked (3ae346c).

Copy by hand

Download the folder at 3ae346c and put it in .claude/skills/external-data-upload for Claude Code and in .agents/skills/external-data-upload for Codex, Cursor, Gemini CLI, GitHub Copilot and OpenCode.

Skill folder on GitHub at 3ae346c

Copy for your agent

A prompt for any coding agent. It installs this skill from GitHub at the pinned commit, copies the files as they are, and runs nothing unless you ask.

Prompt

Install the agent skill "external-data-upload" by Greptile.

Source, pinned to commit 3ae346c24099adce41da49dbc8201d73ee6f8a4f:
https://github.com/greptileai/demo-itk/tree/3ae346c24099adce41da49dbc8201d73ee6f8a4f/Utilities/Maintenance/ExternalDataUpload

1. Download that folder at exactly this commit. Do not use the default branch.
2. Copy every file unchanged, keeping the folder structure, into .claude/skills/external-data-upload/ for Claude Code and .agents/skills/external-data-upload/ for Codex, Cursor, Gemini CLI, GitHub Copilot and OpenCode. Create the folders if they do not exist.
3. Do not edit the files, and do not run any script in the folder unless I ask you to.
4. When you are done, list the files you copied and where you put them.

Listing and checks: https://www.agentnative.dev/skills/greptile/external-data-upload

SKILL.md at the pin

---
name: external-data-upload
description: >
  Upload ITK test data to Filebase IPFS storage and produce .cid content
  links via the S3 REST API + npx ipfs-car (no Kubo daemon required),
  optionally mirror into ITKTestingData, and normalize existing
  .md5 / .sha256 / .cid content links. Use when the user wants to add
  test images, baseline data, or model files under Testing/Data/ or a
  module's data/ directory, or when asked to convert hash-based content
  links to CID.
allowed-tools:
  - Bash
  - Read
---

# ITK External Data Upload

Upload a file to Filebase IPFS storage and replace it with a `.cid` content
link, maintain `Testing/Data/content-links.manifest`, and (optionally) mirror
the bytes into `ITKTestingData` for the GitHub Pages gateway. Also: regenerate
existing `.md5` / `.sha256` / `.cid` content links under the unixfs-v1-2025
profile.

## Prerequisites

The developer must have the `external-data-upload` pixi environment installed
and Filebase credentials exported. If not, direct them to
[`README.md`](./README.md) in this directory.

Required:

- pixi environment installed: `pixi install -e external-data-upload`
- Filebase IPFS bucket with an S3 access key
- Environment variables exported: `FILEBASE_ACCESS_KEY`,
  `FILEBASE_SECRET_KEY`, `FILEBASE_BUCKET`

A local Kubo daemon, IPFS Desktop, or any `ipfs pin remote` PSA service is
**not** required — the upload talks to Filebase's S3 REST API directly and
relies on `npx ipfs-car` (installed via Node.js in the pixi environment) for
local CAR construction.

## Tasks this skill handles

### 1. Upload a single file

Run the upload script via pixi:

```bash
pixi run -e external-data-upload python \
    Utilities/Maintenance/ExternalDataUpload/upload.py <filepath>
```

If the user mentions `ITKTestingData` or asks you to mirror the bytes to
GitHub Pages, pass `--testing-data-repo <path>`:

```bash
pixi run -e external-data-upload python \
    Utilities/Maintenance/ExternalDataUpload/upload.py \
    --testing-data-repo <path-to-ITKTestingData> \
    <filepath>
```

The script will:

1. Pack the file into a CARv1 with `npx ipfs-car pack --no-wrap`
   (defaults match the unixfs-v1-2025 profile)
2. Upload the CAR to the Filebase IPFS bucket via boto3 with
   `Metadata={"import": "car"}` and verify the CID returned by
   `head_object` matches the local CID
3. If `--testing-data-repo` given and file ≤ 50 MB, copy to
   `<path>/CID/<cid>` and `git add` it there. Files over 50 MB are skipped
   for the mirror step only (GitHub rejects > 50 MB) — Filebase pinning still
   succeeds.
4. Replace the source file with `<source>.cid`
5. Update `Testing/Data/content-links.manifest`

### 2. Normalize existing content links

Use when the user wants to convert `.md5` / `.sha256` / `.sha512` links to
`.cid`, or re-generate `.cid` links under the unixfs-v1-2025 profile.

```bash
pixi run -e external-data-upload python \
    Utilities/Maintenance/ExternalDataUpload/normalize.py <path-or-file>
```

Useful options:

- `--dry-run` — report what would change
- `--hash-only` — only touch `.md5` / `.shaNNN` links, leave `.cid` alone
- `--cid-only` — only re-hash existing `.cid` links under the new profile
- `--testing-data-repo <path>` — forwarded to the upload helper
- `--bucket <name>` — Filebase bucket override (default: `$FILEBASE_BUCKET`)

The normalize script fetches bytes through the gateway templates in
`CMake/ITKExternalData.cmake` (same order as the build), verifies them
against the declared hash or CID, and calls `upload.upload_file_to_filebase`
to produce the new `.cid`.

### 3. Reconcile a local ITKTestingData mirror with Filebase and the manifest

Use when the user has files under `<ITKTestingData>/CID/` that are
referenced by `.cid` content links in the ITK source tree but are missing
from `Testing/Data/content-links.manifest` (and so may not be pinned on
Filebase yet).

```bash
pixi run -e external-data-upload python \
    Utilities/Maintenance/ExternalDataUpload/sync.py \
    --testing-data-repo <path-to-ITKTestingData>
```

The sync script:

1. Loads CIDs already in the manifest and skips files whose CID is listed.
2. Indexes `.cid` content links in the source tree via `git ls-files`.
3. For each file in `<ITKTestingData>/CID/` whose CID is unlisted and is
   referenced by at least one `.cid` link, uploads the bytes to Filebase
   under the unixfs-v1-2025 profile and verifies the returned CID matches
   the filename.
4. Appends a manifest entry per referencing `.cid` link.

Files in `<ITKTestingData>/CID/` not referenced by any `.cid` link are
skipped silently — the script will not pin loose bytes. The source-tree
`.cid` files are never modified.

Useful options:

- `--dry-run` — preview the CIDs that would be uploaded
- `--bucket <name>` — Filebase bucket override (default: `$FILEBASE_BUCKET`)

## After Upload

Stage the git changes the upload script prints. Typical ITK workflow:

```bash
git rm <original-file>
git add <original-file>.cid
git add Testing/Data/content-links.manifest
```

If `--testing-data-repo` was used, follow the printed commands in that repo:

```bash
git -C <ITKTestingData> commit -m "Add <file> (<cid>)"
git -C <ITKTestingData> push
```

Commit the ITK changes with an appropriate prefix per
[`Documentation/AI/git-commits.md`](../../../Documentation/AI/git-commits.md):

- `ENH:` for new test data
- `STYLE:` for normalizing existing content links (no test semantics change)

## How `.cid` Files Work

A `.cid` file is one line of plain text: a CIDv1, base32-encoded. ITK's
`CMake/ITKExternalData.cmake` recognises the `.cid` extension and fetches
through the gateway list declared there (local Kubo, `ipfs.io`,
`gateway.pinata.cloud`, `cloudflare-ipfs.com`, `dweb.link`, plus the
`ITKTestingData` GitHub Pages mirror at
`insightsoftwareconsortium.github.io/ITKTestingData/CID/<cid>`).

Because CIDs are content-addressed, integrity is verified automatically at
fetch time.

From greptileai/demo-itk at 3ae346c, shown as plain text under its license: Apache-2.0 (permissive). The license text is in LICENSE.

View SKILL.md on GitHub at 3ae346c

Files

5 files, 50 KB in total. Each file has a sha256 in the pin's manifest; the first 12 characters are shown.

Skill folder on GitHub at 3ae346c
All 4 skills from Greptile

More from Greptile

  • image-generation

    This skill generates images using Google's Gemini API through text prompts or by modifying reference images with image-to-image mode.

    Contains scripts

    Claude Code, Codex, Cursor +3 · about 650 tokens · pinned 6 days ago

  • onyx-cli

    The skill queries an Onyx enterprise search platform to retrieve company documents and internal knowledge.

    Contains scripts

    Claude Code, Codex, Cursor +3 · about 1.5K tokens · pinned 6 days ago

  • pptx

    This skill enables agents to work with PowerPoint presentations through text extraction, visual analysis, template-based editing, and creation from scratch.

    Contains scripts

    Agents not labelled yet · about 2.2K tokens · pinned 6 days ago

All Cloud and DevOps skills
  • n8n-cli

    This skill enables agents to manage n8n workflows, credentials, executions, and instance resources via the n8n CLI command-line tool.

    by n8nOfficial publisher

    Claude Code, Codex, Cursor +4 · about 2.9K tokens · pinned 6 days ago

  • managing-streamlit-apps

    Manage Streamlit apps running in PostHog sandboxes through the full lifecycle: create, set or edit source code, start and stop the sandbox, poll status, and…

    by PostHogOfficial publisher

    Claude Code, Codex, Cursor +4 · about 1.4K tokens · pinned 6 days ago

  • release-candidate-prep

    Prepares a local Python SDK release candidate in a dedicated Git worktree when explicitly invoked with a version number.

    by OpenAIOfficial publisher

    Contains scripts

    Claude Code, Codex, Cursor +3 · about 4.8K tokens · pinned 6 days ago

  • cloud-run-basics

    Deploys and manages Google Cloud Run services, jobs, and worker pools for running containerized applications or source code.

    by GoogleOfficial publisher

    Claude Code, Codex, Cursor +4 · about 3.9K tokens · pinned 6 days ago

  • debug-openshell-cluster

    Diagnoses OpenShell gateway deployment problems across Docker, Podman, Kubernetes, and VM compute platforms.

    by NVIDIAOfficial publisher

    Claude Code, Codex, Cursor +4 · about 19.1K tokens · pinned 6 days ago

  • hf-cloud-aws-context-discovery

    This skill reads the user's local AWS configuration to discover their active profile, region, account ID, and caller identity before any AWS work begins.

    by Hugging FaceOfficial publisher

    Claude Code, Codex, Cursor +4 · about 830 tokens · pinned 6 days ago

Open roles at Greptile

5 of 6 open roles on the jobs board

The skills listed here are third-party software, collected from public GitHub repositories as a catalog of recent skills and provided as is. Agent Native does not write or control them and is not responsible for any harm, loss or damage caused by installing or using them. Labels and checks describe what we saw at one commit and are not a guarantee. Read a skill's files before you run it. Terms of use