| name | bulk-write |
| description | Use when you have a CSV file of payloads to write across many tags — the skill will prompt you to present each tag in sequence and track progress for resumable runs. |
Bulk Write
Write payloads to multiple NFC tags from a CSV file. The skill presents each row, prompts the user to present the corresponding tag, writes the payload, and records progress in a sidecar JSON file so interrupted runs can be resumed.
When to use
- You have a batch of 10+ tags to program with different payloads.
- CSV source is the authoritative list (columns:
payload, type, label at minimum).
- You want resumable progress tracking if the batch is interrupted.
Inputs to gather
- CSV file path — full path to the CSV (e.g.,
~/Documents/nfc-batches/batch-2026-04.csv). If not provided, prompt user; store the selected path in ${CLAUDE_USER_DATA:-${XDG_DATA_HOME:-$HOME/.local/share}/claude-plugins}/nfc-ops/config.json for future runs.
- CSV columns required:
payload, type (url|text|ndef-raw), label.
- Optional:
uid column (if present, verify presented tag UID matches before write).
Procedure
- Verify
nfc-list is available.
- Load the CSV file. If a sidecar
<csv>.progress.json exists, load the completed-row list and skip to the first incomplete row.
- For each row (starting from the first incomplete):
- Display row number, label, payload preview: "Row 3 of 10 — Label: 'ID Badge #102' — Payload (url): https://office.example.com/emp/102"
- Prompt: "Present the tag and press Enter to write, or type 'skip' to skip this row or 'abort' to stop."
- If
uid column exists, run nfc-list, capture the tag UID, and verify it matches the CSV row. If mismatch, warn and ask to re-present the correct tag.
- Call
write-tag logic: compose NDEF, write, read-back verify.
- If write succeeds, mark the row as completed in
<csv>.progress.json and log to write-log.jsonl.
- If write fails, offer retry (up to 3 times) or skip.
- Display progress: "Row 3 of 10 completed. Time elapsed: 2m 15s. Est. time remaining: 3m."
- After the final row, summarize: "Batch complete. 10 of 10 tags written successfully. Total time: 5m 30s."
Output / side effects
- All tags now contain their assigned payloads.
<csv>.progress.json is updated (and can be deleted after successful completion, or kept for auditing).
write-log.jsonl is appended with entries for each successful write.
- Terminal shows real-time progress and summary.
Safety / constraints
- Resumability: Do not delete the
<csv>.progress.json sidecar during a run.
- No auto-confirmation: Every tag must be confirmed by the user before write — this is human-in-the-loop by design.
- CSV validation: Reject CSVs with missing
payload or type columns. Offer to backfill label with row number if missing.
- UID mismatch: If a
uid column is present and does not match the presented tag, halt that row and require re-presentation or skip.