portaljs-add-geo
portaljs-add-geo is a skill in datopian/portaljs, last changed 8 Jul 2026. It can run shell commands, reach the network, name web addresses and pre-approve tools — read the findings before installing. Our pattern check found 1 item to review at commit fc7ccd6 on 27 Oct 2026.
Pattern check: 1 item to review · commit fc7ccd6 · 27 Oct 2026
InstallAuto-ingest a geospatial file (GeoJSON, Shapefile, GeoPackage, KML/KMZ, FlatGeobuf, CSV-with-geometry) into a PortalJS portal on the user's own machine, with no server. Normalizes CRS to EPSG:4326, derives a PMTiles render tier and a GeoParquet query tier, pushes all three artifacts to Cloudflare R2 via Git LFS, and appends one dual-tier datasets.json entry the showcase auto-renders. Use when the source is a vector geo format that needs a map or spatial-query view.
- Licence
- MIT
- Repo stars
- 2.4k
- Folder last changed
- 8 Jul 2026 (opens in a new tab)
- Publisher
- datopian
- Files
- 2 files
- Checked
- fc7ccd6 (opens in a new tab) · 27 Oct 2026
Install
Each tab says whether it installs commit fc7ccd6, the one we checked, or the latest version.
No tab for your agent? Use Any agent for OpenCode, Goose, Windsurf (Devin Desktop), Zed, Roo Code, Factory Droid, Junie, Amp and Antigravity, and Claude Code for Cline. Kiro needs the folder copied by hand.
Pinned to commit fc7ccd6, the one we checked.
From your project's root folder:
tmp="$(mktemp -d)" &&
git clone -q --depth 1 --filter=blob:none --no-checkout https://github.com/datopian/portaljs.git "$tmp" &&
git -C "$tmp" fetch -q --depth 1 origin fc7ccd651459549a962c8b7aa08f60f8849fd9a5 &&
git -C "$tmp" sparse-checkout set -- skills/portaljs-add-geo &&
git -C "$tmp" checkout -q fc7ccd651459549a962c8b7aa08f60f8849fd9a5 &&
mkdir -p .claude/skills &&
mkdir .claude/skills/portaljs-add-geo &&
cp -R "$tmp"/skills/portaljs-add-geo/. .claude/skills/portaljs-add-geo/ &&
rm -rf "$tmp"If Claude Code was already running and this created the skills folder, run /reload-skills.
Or install the portaljs plugin it ships in. Installs the latest version, not the one we checked. Installs everything in the plugin, including any hooks, MCP servers and scripts our check doesn't cover.
claude plugin marketplace add datopian/portaljs --scope project &&
claude plugin install portaljs@datopian-portaljs --scope projectPinned to commit fc7ccd6, the one we checked.
Skills in the Claude apps belong to your account rather than to a project.
Make portaljs-add-geo.zip, with the skill folder at the top level:
tmp="$(mktemp -d)" &&
git clone -q --depth 1 --filter=blob:none --no-checkout https://github.com/datopian/portaljs.git "$tmp" &&
git -C "$tmp" fetch -q --depth 1 origin fc7ccd651459549a962c8b7aa08f60f8849fd9a5 &&
git -C "$tmp" sparse-checkout set -- skills/portaljs-add-geo &&
git -C "$tmp" checkout -q fc7ccd651459549a962c8b7aa08f60f8849fd9a5 &&
out="$(mktemp -d)" &&
cp -R "$tmp"/skills/portaljs-add-geo "$out"/portaljs-add-geo &&
(cd "$out" && zip -qr - portaljs-add-geo) > portaljs-add-geo.zip &&
rm -rf "$tmp" "$out"In Claude, open Customize > Skills, select +, then + Create skill > Upload a skill, and choose portaljs-add-geo.zip.
On Free, Pro and Max plans, turn on Code execution and file creation (Create and edit files in newer settings) under Settings > Capabilities.
Pinned to commit fc7ccd6, the one we checked.
From your project's root folder:
tmp="$(mktemp -d)" &&
git clone -q --depth 1 --filter=blob:none --no-checkout https://github.com/datopian/portaljs.git "$tmp" &&
git -C "$tmp" fetch -q --depth 1 origin fc7ccd651459549a962c8b7aa08f60f8849fd9a5 &&
git -C "$tmp" sparse-checkout set -- skills/portaljs-add-geo &&
git -C "$tmp" checkout -q fc7ccd651459549a962c8b7aa08f60f8849fd9a5 &&
mkdir -p .agents/skills &&
mkdir .agents/skills/portaljs-add-geo &&
cp -R "$tmp"/skills/portaljs-add-geo/. .agents/skills/portaljs-add-geo/ &&
rm -rf "$tmp"Codex picks up new skills on its own; restart it if this one does not appear.
Pinned to commit fc7ccd6, the one we checked.
From your project's root folder:
tmp="$(mktemp -d)" &&
git clone -q --depth 1 --filter=blob:none --no-checkout https://github.com/datopian/portaljs.git "$tmp" &&
git -C "$tmp" fetch -q --depth 1 origin fc7ccd651459549a962c8b7aa08f60f8849fd9a5 &&
git -C "$tmp" sparse-checkout set -- skills/portaljs-add-geo &&
git -C "$tmp" checkout -q fc7ccd651459549a962c8b7aa08f60f8849fd9a5 &&
mkdir -p .cursor/skills &&
mkdir .cursor/skills/portaljs-add-geo &&
cp -R "$tmp"/skills/portaljs-add-geo/. .cursor/skills/portaljs-add-geo/ &&
rm -rf "$tmp"Pinned to commit fc7ccd6, the one we checked.
From your project's root folder:
tmp="$(mktemp -d)" &&
git clone -q --depth 1 --filter=blob:none --no-checkout https://github.com/datopian/portaljs.git "$tmp" &&
git -C "$tmp" fetch -q --depth 1 origin fc7ccd651459549a962c8b7aa08f60f8849fd9a5 &&
git -C "$tmp" sparse-checkout set -- skills/portaljs-add-geo &&
git -C "$tmp" checkout -q fc7ccd651459549a962c8b7aa08f60f8849fd9a5 &&
mkdir -p .github/skills &&
mkdir .github/skills/portaljs-add-geo &&
cp -R "$tmp"/skills/portaljs-add-geo/. .github/skills/portaljs-add-geo/ &&
rm -rf "$tmp"In a running Copilot CLI session, run /skills reload.
Or install it with gh skill, which also installs the commit we checked. Needs GitHub CLI 2.90 or later.
gh skill install datopian/portaljs skills/portaljs-add-geo/SKILL.md@fc7ccd651459549a962c8b7aa08f60f8849fd9a5 --agent github-copilot --scope projectPinned to commit fc7ccd6, the one we checked.
From your project's root folder:
tmp="$(mktemp -d)" &&
git clone -q --depth 1 --filter=blob:none --no-checkout https://github.com/datopian/portaljs.git "$tmp" &&
git -C "$tmp" fetch -q --depth 1 origin fc7ccd651459549a962c8b7aa08f60f8849fd9a5 &&
git -C "$tmp" sparse-checkout set -- skills/portaljs-add-geo &&
git -C "$tmp" checkout -q fc7ccd651459549a962c8b7aa08f60f8849fd9a5 &&
mkdir -p .gemini/skills &&
mkdir .gemini/skills/portaljs-add-geo &&
cp -R "$tmp"/skills/portaljs-add-geo/. .gemini/skills/portaljs-add-geo/ &&
rm -rf "$tmp"In a running session, run /skills reload.
Or use Gemini CLI’s own installer. Installs the latest version, not the one we checked.
gemini skills install https://github.com/datopian/portaljs.git --path skills/portaljs-add-geo --scope workspacePinned to commit fc7ccd6, the one we checked.
Codex, Cursor, Copilot, VS Code, Gemini CLI, OpenCode, Goose, Amp and Zed all read .agents/skills; Claude Code and Kiro list only their own folders.
From your project's root folder:
tmp="$(mktemp -d)" &&
git clone -q --depth 1 --filter=blob:none --no-checkout https://github.com/datopian/portaljs.git "$tmp" &&
git -C "$tmp" fetch -q --depth 1 origin fc7ccd651459549a962c8b7aa08f60f8849fd9a5 &&
git -C "$tmp" sparse-checkout set -- skills/portaljs-add-geo &&
git -C "$tmp" checkout -q fc7ccd651459549a962c8b7aa08f60f8849fd9a5 &&
mkdir -p .agents/skills &&
mkdir .agents/skills/portaljs-add-geo &&
cp -R "$tmp"/skills/portaljs-add-geo/. .agents/skills/portaljs-add-geo/ &&
rm -rf "$tmp"Or use the skills CLI from skills.sh. Installs the latest version, not the one we checked. The skills CLI reports installs to skills.sh unless you set DISABLE_TELEMETRY=1.
npx skills@1.7.4 add datopian/portaljs --skill portaljs-add-geoWhat it can touch
From the files and frontmatter at commit fc7ccd6. This is how much a skill can do, not whether it is risky.
What it can touch: Shell, network or credentials
Runs shell commands
Its instructions or files give the agent commands to run on your computer.
Reaches the network
It sends or fetches data over the internet, for example with curl, an HTTP library or a package install.
Names web addresses
It mentions outside web addresses the agent may visit. We list them but don't follow them.
Pre-approves tools
Its allowed-tools field lists tools the agent may use without asking you first, in agents that honour it.
SKILL.md:4
Pattern check
Pattern check: 1 item to review · commit fc7ccd6 · 27 Oct 2026
R34 · HighBroad tools pre-approved in allowed-tools
SKILL.md:4 (opens in a new tab)allowed-tools: Read, Write, Edit, Bash(ogr2ogr:*), Bash(ogrinfo:*), Bash(tippecanoe:*), Bash(duckdb:*), Bash(git:*), Bash(curl:*), Bash(npx:*), Bash(node:*), Bash(mkdir:*), Bash(cp:*), Bash(wc:*), Ba…
We checked every text file in this skill, at commit fc7ccd6 on 27 Oct 2026, against 45 published patterns such as download-and-run commands, hidden text and credential access. We don't run the skill, we don't read the web pages it points to, and we can't judge everything its instructions might lead an agent to do. In published tests, pattern checks like this one missed most malicious skills. Read the skill before you install it — especially anything it asks you to download or run.
How the check worksReport an incorrect finding
Outside links we did not follow
- https://github.com/datopian/portaljs/blob/main/.claude/commands/portaljs-add-geo.md
- https://github.com/felt/tippecanoe
- https://duckdb.org/docs/extensions/spatial
Format check
Each agent reads SKILL.md a little differently. We check the file against each one's published rules; we don't run the skill in any agent.
Agent Skills specPasses with warnings
The open format from agentskills.io, held to what the strictest agents enforce, so one folder loads everywhere.
- Warning
Fields outside the spec: version, author and tags. Uploads to the Claude apps and API, and the spec's validator, reject the file; most agents ignore these fields. O1
Fix: Delete them for a portable skill, or keep them if you only target the agents that read them.
- Warning
Claude CodePasses
Claude Code reads its own extra fields, ignores unknown ones, and still loads a skill whose frontmatter is broken, without its fields.
- Note
Claude Code ignores fields it doesn't know: version, author and tags. O1
Fix: Check the spelling against Claude Code's field list, or delete them.
- Note
Claude apps & API uploadFails
Uploading to claude.ai or the Claude API, or packaging with Anthropic's script, accepts only the six spec fields and stops on anything else.
- Error
Upload and packaging fail on fields outside the spec: version, author and tags. O1
Fix: Delete them, and keep your own data under metadata as text values.
- Note
The description is 469 characters. The claude.ai Help Center says 200 at most, though Anthropic's API docs and validator allow 1,024. D4
Fix: If the claude.ai upload refuses it, trim the description to 200 characters.
- Error
OpenAI (Codex & API)Passes with warnings
Codex finds SKILL.md by its exact name and needs a description; OpenAI's Skills API checks the frontmatter against the spec and caps uploads.
- Warning
Fields outside the spec: version, author and tags. Codex ignores them; OpenAI doesn't say whether its upload accepts them. O1
Fix: Delete them, or move your own data under metadata as text values.
- Warning
VS Code & CopilotPasses
VS Code reads skills one folder below .github/skills, .claude/skills or .agents/skills and falls back to the folder name when the name is missing or differs; GitHub's Copilot docs require the exact name SKILL.md.
- Note
VS Code ignores fields it doesn't support: version, author and tags. O1
Fix: Delete them unless another agent you target reads them.
- Note
SKILL.md
Files
2 files
| Path | Size |
|---|---|
| SKILL.md (opens in a new tab) | 6.8 KB |
| references/reference.md (opens in a new tab) | 5 KB |
More from datopian/portaljs
arcgis-to-portaljs
datopian/portaljs
Migrate a whole ArcGIS Hub site into a PortalJS Arc portal end-to-end. Harvests the Hub /data.json (DCAT-US) inventory, exports every FeatureService layer through the ArcGIS REST query API with resultOffset paging, converts each to the serverless dual tier (PMTiles render + GeoParquet query) with tabular items to Parquet, pushes everything to Cloudflare R2 via Git LFS, appends dual-tier datasets.json entries, and writes a source-vs-derived parity report. Use to move a City or sector ArcGIS Hub open-data portal onto PortalJS with no server-side compute.
- Runs shell commands
- Reaches the network
- +2 more
Pattern check: 1 item to reviewMIT · 2.4k repo stars · Updated 18 Jul 2026
portaljs-add-chart
datopian/portaljs
Add a chart (line, bar, area, pie, or scatter) to a dataset's showcase in a PortalJS portal. Installs recharts, writes a reusable Chart component, and renders it in the showcase Views section. Use when visualizing a dataset already registered in datasets.json.
- Runs shell commands
- Reaches the network
- +2 more
Pattern check: 1 item to reviewMIT · 2.4k repo stars · Updated 20 Oct 2026
portaljs-add-dataset
datopian/portaljs
Add a dataset (CSV, TSV, JSON, or GeoJSON) to an existing PortalJS portal. Appends an entry to datasets.json so the catalog and showcase render it automatically; routes the data by source (local file vs remote URL) — R2 via Git LFS by default, remote URLs by passthrough. Use when registering a new dataset in a scaffolded portal.
- Runs shell commands
- Reaches the network
- +2 more
Pattern check: 1 item to reviewMIT · 2.4k repo stars · Updated 7 Jul 2026
portaljs-add-dcat
datopian/portaljs
Make a PortalJS portal harvestable by national/EU/US open-data portals — emit standards-compliant DCAT catalog feeds (DCAT 2/3, DCAT-AP, DCAT-US, national profiles) in JSON-LD, Turtle, and RDF/XML at build, with autodiscovery and per-profile conformance checking. Use when a portal needs to be harvested by data.europa.eu, data.gov, or a national open-data catalog.
- Runs shell commands
- Reaches the network
- +2 more
Pattern check: 1 item to reviewMIT · 2.4k repo stars · Updated 15 Oct 2026
portaljs-add-map
datopian/portaljs
Render a GeoJSON dataset on an interactive Leaflet map in the Views section of a dataset's showcase. Installs react-leaflet and a Map component, then renders the map for the chosen dataset. Use when a dataset's data is geographic and a map view is needed alongside the showcase's default metadata and download.
- Runs shell commands
- Reaches the network
- +2 more
Pattern check: 1 item to reviewMIT · 2.4k repo stars · Updated 20 Oct 2026
portaljs-add-resource
datopian/portaljs
Add another file (resource) to an EXISTING dataset in a PortalJS portal — a data dictionary, methodology, or an additional data file. Turns a single-file dataset into a multi-resource one; the showcase renders a section per resource. Use when a dataset needs a second file, such as a data dictionary, methodology doc, or an additional period's data.
- Runs shell commands
- Reaches the network
- +2 more
Pattern check: 1 item to reviewMIT · 2.4k repo stars · Updated 7 Jul 2026