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.
Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
git clone --depth 1 https://github.com/datopian/portaljsWrote 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.
[](https://agentmods.dev/commands/datopian/portaljs/arcgis-to-portaljs)<a href="https://agentmods.dev/commands/datopian/portaljs/arcgis-to-portaljs"><img src="https://agentmods.dev/badge/commands/datopian/portaljs/arcgis-to-portaljs/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.
<a href="https://agentmods.dev/commands/datopian/portaljs/arcgis-to-portaljs"><img src="https://agentmods.dev/badge/commands/datopian/portaljs/arcgis-to-portaljs.svg" alt="Reviewed on agentmods" width="80" height="20"></a>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.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00130 | $0.12064 |
| Opus 5 | $0.00065 | $0.06032 |
| Sonnet 5 | $0.00026 | $0.02413 |
| Haiku 4.5 | $0.00013 | $0.01206 |
Grade B, and why
arcgis-to-portaljs scanned grade B with 2 findings 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 11d 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.
Asks for rootmediumPrivilege escalation
A mod that escalates privileges can change anything on the machine, not only the project.
# Debian: sudo apt-get install -y gdal-bin duckdb jq nodejs # tippecanoe: build from source 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(ogr2ogr:*), Bash(ogrinfo:*), Bash(tippecanoe:*), Bash(duckdb:*), Bash(git:*), Bash(curl:*), Bash(jq:*), Bash(npx:*), Bash(node:*), Bash(mkdir:*), Bash(cp:*), Bash(wc:*), Bash(zip:*) How it starts
The opening of the file, as written. The whole thing — 652 lines — stays where its author put it; the contents beside it link to each section on GitHub.
/arcgis-to-portaljs
Migrate an entire ArcGIS Hub open-data site into a PortalJS Arc portal in one pass.
Every Hub site is machine-readable — a DCAT-US catalog at /data.json, and every dataset
behind it is an ArcGIS REST FeatureService with a documented query API — so migration is a
harvest → export → convert → publish → verify pipeline that is almost fully automated.
The tooling is the reusable arcgis-to-portaljs migrator: input = a Hub URL, output = a
ready-to-deploy PortalJS catalog + a parity report. This is the repeatable asset, not a
one-off.
Input is one Hub URL (e.g. https://hub-lewisville.opendata.arcgis.com or
https://streamwaterdata.co.uk). Output: datasets.json entries, data on R2, and
arcgis-parity-report.md.
What this composes — do NOT reinvent
This skill is the ArcGIS-Hub-specialized orchestrator. It reuses three existing pieces and adds two ArcGIS-specific steps (the REST export loop and the parity report):
| Step | Owned by | This skill's role |
|---|---|---|
Harvest /data.json (DCAT-US → canonical) |
/portaljs-migrate (dcat source) |
Reuse its DCAT-US field map; add Hub item classification (FeatureService vs table vs non-data). |
| Export FeatureService → GeoJSON (REST paging) | new here | /portaljs-migrate's arcgis mode only links the query URL; this downloads the features so they can be converted and served serverless. |
| Convert → PMTiles + GeoParquet (dual tier) | /portaljs-add-geo |
Reuse its exact ogr2ogr/tippecanoe/duckdb recipes per layer. |
Publish: bulk Git-LFS → R2 + datasets.json |
/portaljs-migrate (download mode) + /portaljs-add-geo (§10 dual-tier entry) |
Reuse the bulk Giftless push; emit dual-tier entries. |
| Parity report (source vs derived) | new here | Record counts, bbox, attribute schema, geometry validity per layer. |
Naming note (Phase 0, for review): the bead names the deliverable
arcgis-to-portaljs(a directional, pitch-friendly asset name). The rest of the suite is prefixedportaljs-. Renaming toportaljs-migrate-arcgisfor suite consistency is a trivial follow-up if the reviewer prefers it — the skeleton is name-agnostic.
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.
- 11d ago First seen · 652 lines · 130 tokens per session scan B 7e6f7af67c0d
arcgis-to-portaljs is a command published in the GitHub repository datopian/portaljs (2,350 stars, last pushed 3d ago), licensed MIT. It adds 130 tokens to every session and 12,064 once invoked, about $0.0006 per session on Opus 5. A static security scan graded it B with 2 findings (asks for root, makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other commands, from other repositories
audit-code
When /audit-code [target] is invoked, immediately execute the following steps to analyze code quality, security, and adherence to project standards.
laravel-ai-sdk
Build AI features with the first-party Laravel AI SDK (Laravel 13+); use the laravel:ai-sdk skill exactly as written.
speckit.archive.run
Archive merged feature specs into project memory with provenance, sweep discovery, and gated cleanup.
dare-llm-integration
Integração segura e eficiente com LLMs (Gemini, Claude, OpenAI, Ollama) em projetos DARE.
vlm-ocr-evaluation
Run the vlm-ocr skill in its evaluate phase: compare candidate OCR systems against a stratified human-transcribed ground-truth sample and pick a model on measured CER/WER before committing to a bulk run.
data-pipeline
You are a data pipeline architecture expert specializing in scalable, reliable, and cost-effective data pipelines for batch and streaming data processing.