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.
npx skills add zakariaf/Flutter-Skills --skill data-export-and-restoregit clone --depth 1 https://github.com/zakariaf/Flutter-SkillsWrote 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/zakariaf/flutter-skills/data-export-and-restore)<a href="https://agentmods.dev/skills/zakariaf/flutter-skills/data-export-and-restore"><img src="https://agentmods.dev/badge/skills/zakariaf/flutter-skills/data-export-and-restore/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/zakariaf/flutter-skills/data-export-and-restore"><img src="https://agentmods.dev/badge/skills/zakariaf/flutter-skills/data-export-and-restore.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.00219 | $0.03355 |
| Opus 5 | $0.00110 | $0.01677 |
| Sonnet 5 | $0.00044 | $0.00671 |
| Haiku 4.5 | $0.00022 | $0.00335 |
Grade A, and why
data-export-and-restore 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 9d 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 — 236 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Data export and restore
In an app with no server, the export file is the only copy of a user's data that can
outlive the phone, and restore is the only recovery path they can invoke themselves.
Both are dangerous in opposite directions: a lossy export silently becomes someone's
backup, and a half-applied restore destroys the very database it was meant to protect.
This skill governs the portable artifacts; the on-device VACUUM INTO snapshot and
WAL rules belong to persistence-drift.
Depth lives in references/formats-and-encoding.md (CSV/JSON/PDF mechanics) and
references/restore-and-merge-policy.md (validation ladder, merge strategies).
Non-negotiable rules
- Backup and export are two different features — never conflate them. Backup is exact, machine-read, round-trippable, and the only thing restore accepts. Export (CSV for a spreadsheet, PDF for a human) is an interop artifact, lossy by design, and must be refused as a restore source. WHY: the moment a CSV is restorable, a format built for readability becomes the file someone's records depend on.
- Every backup carries an envelope, and restore reads it first.
formatVersion,schemaVersion,appVersion,exportedAtUtc, a checksum over the payload, then the payload. Restore verifies the checksum, refusesschemaVersiongreater than the app's with a plain message, and migrates an older payload through the same forward-only path as the database (run-migration). WHY: an unversioned file cannot be refused, only misread. - Restore is all-or-nothing and never edits the live database in place. Import into a fresh staging database, validate everything, close every handle, then publish by atomic rename with the previous file kept as a rollback until the new one opens cleanly. WHY: a partial restore is worse than a failed one — it leaves a state the user cannot describe and you cannot reproduce.
- Machine formats carry canonical values only. Integer minor units, SI integers,
ISO-8601 UTC instants, stable ids, untranslated enum codes. Never a localized
numeral, a formatted date, a currency symbol, or a translated label in a file that
will be parsed. Localize only in human-facing exports, which are never re-imported.
WHY:
١٢٫٥and12.5and12,5are the same quantity and three different parses. - Identity is content-assigned, never a rowid. Every exportable row carries a stable id (UUID/ULID) minted at creation. WHY: re-importing the same file must be idempotent — with autoincrement ids it duplicates every record instead.
- State the merge policy and show it before it runs. Replace-all (wipe then
import) and merge-by-id (last-write-wins on a stored
updatedAtUtc) are different promises; the confirmation names which one is about to happen and what will be lost. WHY: "Restore" reads as "add my data back" to a user who is about to lose a week. - Stream to a temp file, publish by rename. Build the artifact through an
IOSinkinto the app's own temp directory and rename it into place only when the last byte is flushed. WHY: a 100k-row export assembled in aStringOOMs a cheap phone, and a half-written file must never be shareable. - Nothing leaves the sandbox without an explicit user action, through an injected
Gateway. No auto-upload, no background sync, no "helpful" cloud copy. The share
sheet and file-save picker sit behind a
ShareGateway/FileExportGateway(service-boundary-and-native), faked in tests. - CSV is escaped twice: RFC 4180 and against formula injection. Quote any field
containing the delimiter, a quote, CR or LF, doubling embedded quotes; and neutralize
a leading
=,+,-,@, tab or CR so a spreadsheet renders the text instead of executing it. WHY: an unescaped cell is a code-execution vector in the recipient's spreadsheet, and a lost row in yours. - Export and restore return typed results, never throw at the UI.
Result<ExportArtifact, ExportFailure>/Result<RestoreReport, RestoreFailure>with a distinct failure per refusal reason (checksum, unsupported version, malformed payload, no space, permission denied). WHY: "Restore failed" with no reason is indistinguishable from data loss to the person reading it. - A failed export leaves no artifact. Delete the temp file on every failure path and never publish a partial one. WHY: a truncated file that looks like a backup is the failure mode that surfaces months later.
- Say what an export is. Exports are plaintext and unencrypted unless you built
encryption on purpose; the UI must say so at the moment of sharing, and the claim
must match the code (see
release-and-store-shippingfor claim wording).
What ships with it
4 files 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.
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.
- 9d ago First seen · 236 lines · 219 tokens per session scan A 50e745d96526
data-export-and-restore is a skill published in the GitHub repository zakariaf/Flutter-Skills (2 stars, last pushed 11d ago), licensed MIT. It adds 219 tokens to every session and 3,355 once invoked, about $0.0011 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
pptx
A guide for turning a paper, outline, or structured text into a PowerPoint presentation. It covers an 8–12-slide structure, concise slide points, and generation of a .pptx file.
feishu
Work with Feishu or Lark bots, docs, sheets, bitables, approval flows, and OpenAPI/MCP setup without hardcoding credentials.
Read, extract, split, merge, rotate, watermark, fill, OCR, or create PDF files with verification of page counts and text extraction.
docx
Create/edit/inspect Word documents using available managed or host capabilities.
pptx
Create/edit/inspect/verify slide decks and PPTX presentations.
xlsx
Create/edit/analyze/verify spreadsheet workbooks including XLSX/CSV/TSV.