portaljs-add-resource

portaljs-add-resource is a skill for Claude Code from datopian/portaljs. It costs 78 tokens per session (1,535 once invoked), scanned A, original, MIT.

A way to add another file to an existing dataset in a PortalJS data catalogue. The extra file can be a data dictionary, methodology document, or another data file.

In plain words
What is it for?
Use it to add CSV, TSV, JSON, or GeoJSON resources and show a preview, schema, and download section for each one.
Why use it?
It turns a single-file dataset into a collection of related files while keeping them together in one showcase.

Skill for Claude Code

Written for Claude Code: allowed-tools in frontmatter. Also seen: reads .claude/ paths; mentions Claude Code.

Needs its repository: it runs a file that does not travel with it, so clone the repository first. The line is /portaljs-add-resource orders ./data/orders-data-dictionary.csv --title "Data dictionary".

Part of the portaljs plugin — 14 skills, 25 commands shipped together

Good fit Use it to add CSV, TSV, JSON, or GeoJSON resources and show a preview, schema, and download section for each one.

Compare 6 skills from other repositories ↓
About the project

PortalJS is a framework for building data portals that present searchable datasets through a home page, catalog, and dataset showcase. It is for teams that want to choose a data backend, scaffold a Next.js portal, load CSV or JSON data, connect services such as CKAN, and deploy the result. The catalogue entries are agent commands, skills, instructions, and a plugin that guide portal creation and data loading.

datopian/portaljs · 2,350 stars · on GitHub · portaljs.com

Install

Getting it into your agent

It runs from inside its repository, so the clone comes first — what it calls does not travel with the file alone.

Clone the repo
git clone --depth 1 https://github.com/datopian/portaljs
agentmods
npx agentmods add skills/datopian/portaljs/portaljs-add-resource

Made for: Claude Code.

Or install portaljs, the plugin that ships this one along with the rest of its 14 skills, 25 commands.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for portaljs-add-resource

README.md
[![agentmods](https://agentmods.dev/badge/skills/datopian/portaljs/portaljs-add-resource/github.svg)](https://agentmods.dev/skills/datopian/portaljs/portaljs-add-resource)
Your own site
<a href="https://agentmods.dev/skills/datopian/portaljs/portaljs-add-resource"><img src="https://agentmods.dev/badge/skills/datopian/portaljs/portaljs-add-resource/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for portaljs-add-resource

Your own site · 80×15
<a href="https://agentmods.dev/skills/datopian/portaljs/portaljs-add-resource"><img src="https://agentmods.dev/badge/skills/datopian/portaljs/portaljs-add-resource.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 78 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,535 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 1 finding. A grade says what 26 rules found in the file — not that it is safe. Third-party audits
  • NVIDIA SkillSpector warn 7 Sept 2026
SkillSpector: 3 findings, up to medium

These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →

  • medium MCP Rug Pull · line 39
    npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
    Fix: Pin the version: npx @scope/[email protected]
  • medium MCP Rug Pull · line 60
    npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
    Fix: Pin the version: npx @scope/[email protected]
  • medium MCP Rug Pull · line 81
    npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
    Fix: Pin the version: npx @scope/[email protected]
How audits are shown
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00078 $0.01535
Opus 5 $0.00039 $0.00767
Sonnet 5 $0.00016 $0.00307
Haiku 4.5 $0.00008 $0.00153

Measured 10d ago against content hash 99a365e44575, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-10, from the pricing page.

Security

Grade A, and why

portaljs-add-resource scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 10d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Makes network callslowCapability

Not a fault in itself. Listed so you know the mod talks to something, and to what.

allowed-tools: Read, Write, Edit, Bash(npm:*), Bash(curl:*), Bash(mkdir:*), Bash(cp:*), WebFetch
skills/portaljs-add-resource/SKILL.md · 118 lines

How it starts

The opening of the file, as written. The whole thing — 118 lines — stays where its author put it; the contents beside it link to each section on GitHub.

PortalJS — Add Resource

Overview

Add a resource — an additional file — to a dataset that already exists in a portaljs-catalog portal. Where /portaljs-add-dataset creates a new dataset (one file), this skill adds a file to an existing one: a data dictionary, a methodology document, or another data file (e.g. a second year's figures).

Mirrors the Frictionless Data Package model: a dataset holds a resources[] array, and the showcase at /@<namespace>/<slug> renders one section per resource (preview, schema, download). A single-file dataset migrates to resources[] automatically the first time a second file is added — no data is lost.

Prerequisites

  • An existing PortalJS portal (portaljs-catalog template) with datasets.json, package.json, and pages/[owner]/[slug].tsx present.
  • The target dataset already registered in datasets.json.
  • The new resource's source: a local file path or a public URL, in CSV, TSV, JSON (array), or GeoJSON format.
  • Node 18+ installed to run npx next build for verification.

Instructions

The canonical, full step-by-step workflow lives in .claude/commands/portaljs-add-resource.md in this repository — that file is the single source of truth. Read and follow it. Summary:

  1. Gather input (interview if thin): DATASET (slug or namespace/slug), SOURCE (path or URL), PORTAL_DIR (default .), RESOURCE_NAME, RESOURCE_TITLE, DESCRIPTION. If DATASET or SOURCE is missing, list datasets from datasets.json and ask.
  2. Validate the portal and locate the dataset entry by slug (and namespace, if given). If the dataset does not exist, offer /portaljs-add-dataset instead.
  3. Detect the format from extension/Content-Type, fetch (check HTTP status) or confirm the local path exists, then copy into PORTAL_DIR/public/data/ under a non-colliding filename.
  4. Update datasets.json: if the dataset has no resources yet, migrate its top-level file/format/schema into the first resource (lossless), then append the new resource; if resources already exists, just append, keeping name unique within the array.
  5. Verify the build with npx next build, capturing output to a log file; fix malformed JSON before reporting success.
  6. Report the outcome (see Output below).

Read the full file on GitHub · 118 lines

Files

What ships with it

1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 10d ago First seen · 118 lines · 78 tokens per session scan A 99a365e44575

Subscribe to this mod's changes

portaljs-add-resource is a skill published in the GitHub repository datopian/portaljs (2,350 stars, last pushed 2d ago), licensed MIT. It adds 78 tokens to every session and 1,535 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.

Related

Other skills, from other repositories

test-review

You are an expert DataHub test reviewer. Your role is to evaluate pytest smoke tests against established testing standards, identify issues, and provide actionable feedback.

datahub-project/datahub · 0 tokens

data-data-catalog

Use this skill when asked about data catalog, DataHub, Amundsen, Apache Atlas, OpenMetadata, metadata management, data discovery, business glossary, data lineage, data ownership, or column-level lineage. This skill enforces: metadata ingestion pipelines, column-level lineage tracking, business glossary management…

j4flmao/agent-skills · 102 tokens

mediabrain-reader

Analysiert bereitgestellte Medienlisten und Metadaten unabhängig von einer bestimmten Medien-App.

ellmos-ai/skills · 24 tokens

brand-assets-setup

Generate and deploy a complete brand asset pack for a Next.js App Router project. Scans the project, prints what to generate with exact specs, then imports and wires everything correctly.

JohnWayneeee/ai-agent-skills · 41 tokens

sf-metadata-parser

Use this skill whenever the user wants to parse, analyze, document, or export SAP SuccessFactors OData metadata ($metadata XML). Triggers include: any mention of 'metadata', '$metadata', 'OData entities', 'entity fields', 'SF metadata', 'SuccessFactors schema', 'data dictionary', or requests to understand, compare, or…

shaktibarath/sf-metadata-parser · 175 tokens

nextjs-optimization

Optimize images, fonts, scripts, and metadata for Next.js performance and Core Web Vitals. Use when configuring next/image for LCP, next/font for zero layout shift, next/script loading strategies, or generateMetadata for SEO.

FilippoDeSilva/skills · 51 tokens