Borrowing it
Nothing to install: this file belongs to patrickdeanfox/zuar-portal-mcp. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/patrickdeanfox/zuar-portal-mcp/main/.claude/skills/portal-bulk-ops/SKILL.mdgit clone --depth 1 https://github.com/patrickdeanfox/zuar-portal-mcpWrote 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/skills/patrickdeanfox/zuar-portal-mcp/portal-bulk-ops)<a href="https://agentmods.dev/skills/patrickdeanfox/zuar-portal-mcp/portal-bulk-ops"><img src="https://agentmods.dev/badge/skills/patrickdeanfox/zuar-portal-mcp/portal-bulk-ops/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/skills/patrickdeanfox/zuar-portal-mcp/portal-bulk-ops"><img src="https://agentmods.dev/badge/skills/patrickdeanfox/zuar-portal-mcp/portal-bulk-ops.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.00064 | $0.00904 |
| Opus 5 | $0.00032 | $0.00452 |
| Sonnet 5 | $0.00013 | $0.00181 |
| Haiku 4.5 | $0.00006 | $0.00090 |
Grade A, and why
portal-bulk-ops scanned grade A with 0 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 12d 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.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 51 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Portal bulk ops (safe discipline)
Bulk changes touch many resources, so a mistake multiplies. Run them through the
portal-bulk-operator agent (.claude/agents/) or the /portal-bulk command — this
skill is the thin discipline they follow. The per-block authoring rules still apply on every
edit: see assets/conventions.md (binding, the $ trap, scoped CSS, safety) and the global
zportal skill. For bulk data writes back to a database, do not hand-roll SQL in a loop —
use the global db-modifications skill (the /api/db_modifications/run service).
The loop (never skip a step)
- Snapshot first — the rollback point. Call
snapshot_portalbefore any write. This is your one-command revert if the batch goes wrong. (Writes are also mirrored to version control when configured —vc_status/vc_log— and any single resource is revertible viarestore_resource.) - Enumerate the targets.
list_resource(resource="block", etc.) to build the exact set you'll touch. Resolve it to concrete ids; don't operate on a fuzzy "all blocks like X" — name them. - Dry-run plan + confirm. Produce a plan: for each target, the current value → the proposed value (rename/restyle/retag/rebind/placement). Show it and get explicit confirmation before any mutation. No silent bulk writes.
- Apply in a controlled loop — one at a time, validated. For each target:
get_resource resource="block"first to read current state, including its existingui_queries.- Make the change.
validate_blockon the newjson_data+css; fix errors before writing.update_block— and RE-SEND the existingui_queriesverbatim. Omitting it wipes the binding and the block goes blank. This is the #1 bulk footgun.
- Page placement is one declarative call. To set the blocks on a page, use
place_blocks(an atomic read-modify-write:mode:"merge"to append/update/remove,mode:"replace"+confirm:truewhen the page must become exactly the list — it preserves customizedgrid.layoutsand survivors' hidden flags). Never fire parallel per-block placement writes — they race and corrupt page order / drop blocks. - Verify. After the batch, re-
list_resource/get_resourcea sample (and any rebound blocks) to confirm the changes landed and bindings survived. Spot-check live data still flows on rebinds. - Revert if wrong. Roll a single resource back with
restore_resource, or fall back to thesnapshot_portaltaken in step 1 to undo the whole batch.
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.
- 12d ago First seen · 51 lines · 64 tokens per session scan A 007cd04cf47c
portal-bulk-ops is a skill published in the GitHub repository patrickdeanfox/zuar-portal-mcp (1 stars, last pushed 1mo ago), licensed MIT. It adds 64 tokens to every session and 904 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
recipe-create-meet-space
Create a Google Meet meeting space and share the join link.
atmos-config
Atmos root configuration: atmos.yaml discovery, precedence, deep merging, basepath, imports, minimal bootstrap, and routing to narrower Atmos skills.
workthreads
SpecStory Workthreads - a weekly work-thread rollup across a team's repos from SpecStory coding histories (any agent - Claude Code, Codex, Cursor, Gemini, and more). It groups the window's sessions into threads of work per project and labels each new / open / recently closed, so a lead sees what shipped, what is still…
story-readiness
Validate that a story file is implementation-ready. Checks for embedded GDD requirements, ADR references, engine notes, clear acceptance criteria, and no open design questions. Produces READY / NEEDS WORK / BLOCKED verdict with specific gaps. Use when user says 'is this story ready', 'can I start on this story', 'is…
projects
List all managed projects with status, branch, open PRs, and open issue counts — portfolio-level view.
magpie-security-issue-import-from-md
Open one or more tracking issues from a markdown file containing a batch of security findings. Each finding becomes one tracker landing in the Needs triage board column. The file itself is the full report — there is no inbound reporter to reply to and no PR to inspect.