Amini One-Shot
Compile one paste-ready brand prompt for tools that cannot read your files, sized to fit their box.
Install
$ zana add amini-oneshotStdlib-only Python 3.9+, nothing to install: `python3 scripts/build_prompt.py --list-targets`. Use `--strict` for CI. Pairs with the amini-illustrations, humanizer-voice, and amini-decks skills, which own the checks that run on whatever the external tool gives back.
Sample work
What this skill actually produced. Not mockups.
One brief, three tools
examples/ministry-briefingA ministry briefing compiled to three targets from one `brief.json`. Same rules, three sizes, because the boxes are three sizes.
{
"task": "Sovereign AI infrastructure: what a trust layer with local data control actually gives a ministry",
"audience": "Ministry of Digital Transformation, permanent secretary and CISO in the room",
"sources": "Barbados deployment notes, Benin ingestion debrief, SIDSense paper on arXiv",
"slides": "11",
"length": "25 minutes with questions",
"notes": "Open on agency, not technology. Name the Benin document-quality gap in the deck, not in the Q&A."
}
wrote examples/ministry-briefing/pitch-L.txt (5732 chars) [pitch · tier L · dark · 5732/8000 chars] clean wrote examples/ministry-briefing/powerpoint-M.txt (2804 chars) [powerpoint · tier M · dark · 2804/4000 chars] clean wrote examples/ministry-briefing/notebooklm-audio-XS.txt (454 chars) [notebooklm-audio · tier XS · dark · 454/500 chars] - 454 characters, within 10% of the 500 budget.
Focus the conversation on: what local data control gives a ministry, and where Benin fell short Listeners: policy leads Length: 18 minutes Write like a person. Vary sentence length and openings. No em dashes. Never say leverage, unlock, empower, seamless, robust, moreover, additionally, in conclusion. Give the number, not the adjective. Never end by restating. Stay inside the sources. If something is not in them, say so instead of filling the gap.
Build a deck of 11 slides for Amini, an infra-tech company closing the data, connectivity, and compute gaps for Africa and the Global South. Subject: Sovereign AI infrastructure: what a trust layer with local data control actually gives a ministry Room: Ministry of Digital Transformation, permanent secretary and CISO in the room Source material: Barbados deployment notes, Benin ingestion debrief, SIDSense paper on arXiv Open on agency, not technology. Name the Benin document-quality gap in the deck, not in the Q&A. BRAND, NON-NEGOTIABLE Dark: #121212 ground, #FFFFFF text, one #FFC83C accent per slide, never a fill. No other colour. Nothing outside this palette. No blue, no green, no teal, no purple, no red that is not #861D2C, which appears on light grounds only. Leave space. At least a third of any layout stays empty. Do not add an element because a slide looks bare. Neutrals: #1A1A1A secondary ground, #202020 raised surface or card, #ECECEC lines and light surfaces, #E1E1E1 dividers and muted rules. Headings in Helvetica Now Display. If that font is unavailable use Geist, then Aspekta, then the closest geometric sans. Eyebrows and labels in Geist Mono, ALL-CAPS, wide letter-spacing. Order on every surface: eyebrow, heading, body, caption. Nothing skips a level. No gradients, glows, drop shadows, bevels, 3D, glassmorphism, or neon.
Build a presentation of 11 slides for Amini, an infra-tech company closing the data, connectivity, and compute gaps for Africa and the Global South. Subject: Sovereign AI infrastructure: what a trust layer with local data control actually gives a ministry Room: Ministry of Digital Transformation, permanent secretary and CISO in the room Source material: Barbados deployment notes, Benin ingestion debrief, SIDSense paper on arXiv Open on agency, not technology. Name the Benin document-quality gap in the deck, not in the Q&A. BRAND, NON-NEGOTIABLE Dark: #121212 ground, #FFFFFF text, one #FFC83C accent per slide, never a fill. No other colour. Nothing outside this palette. No blue, no green, no teal, no purple, no red that is not #861D2C, which appears on light grounds only. Leave space. At least a third of any layout stays empty. Do not add an element because a slide looks bare. Neutrals: #1A1A1A secondary ground, #202020 raised surface or card, #ECECEC lines and light surfaces, #E1E1E1 dividers and muted rules. Headings in Helvetica Now Display. If that font is unavailable use Geist, then Aspekta, then the closest geometric sans. Eyebrows and labels in Geist Mono, ALL-CAPS, wide letter-spacing. Order on every surface: eyebrow, heading, body, caption. Nothing skips a level. No gradients, glows, drop shadows, bevels, 3D, glassmorphism, or neon.
17 files. Read them here, or pull the folder without the CLI.
$ npx degit aminitech/amini-zana/catalog/skills/amini-oneshot ~/.claude/skills/amini-oneshotNo clone, no history. Just this folder.
$ git clone --depth 1 --filter=blob:none --sparse https://github.com/aminitech/amini-zana.git && cd amini-zana && git sparse-checkout set catalog/skills/amini-oneshot$ curl -sL https://raw.githubusercontent.com/aminitech/amini-zana/main/catalog/skills/amini-oneshot/SKILL.md--- name: Amini One-Shot description: >- Compile one paste-ready Amini brand prompt for a tool that cannot read your files. Use for "NotebookLM prompt", "Copilot prompt for PowerPoint", "Pitch prompt", "Gamma prompt", "Canva prompt", "Google Slides / Gemini prompt", "make an on-brand deck in <external tool>", "one prompt with our brand rules", or "single-shot prompt". Merges the Amini brand kit (palette, type, layout), the humanizer voice rules, and the illustration direction into one block sized to the target tool's instruction box. Ships a compiler with a brand linter. license: MIT metadata: author: Amini version: "1.0.0" --- # Amini One-Shot NotebookLM, PowerPoint Copilot, Pitch, Gamma, and Canva all have the same shape: one box, one shot, no filesystem. They cannot read `brandkit/DESIGN.md`, cannot run the palette auditor, and will not ask a follow-up question. Whatever the box does not say, the tool invents, and what it invents is a purple gradient with the word "seamless" on it. This skill compiles that box. It merges three sources into one block: | Source | What it contributes | | --- | --- | | `brandkit/DESIGN.md` | Palette hex, type, hierarchy, layout, the hard don'ts | | `humanizer-voice` | Sentence rhythm, banned vocabulary, no summary endings | | `amini-illustrations` | Flat vector direction, one Sunglow accent, the Ami figure | Inside Claude Code, use the three skills directly. They read files, run checkers, and iterate. This one exists for the moment the work leaves the terminal. ## Read these as needed - `references/targets.md` — what each tool profile assumes and where each tool fights back. - `references/assembly.md` — how the blocks compress, what to cut first, editing the source blocks. - `references/aftercare.md` — what to check when the output comes back, and how to bring it home. - `assets/blocks/` — the three block files. Edit these, not the compiled prompt. - `assets/targets.json` — the tool profiles: blocks, tier, character budget, header, footer. - `examples/ministry-briefing/` — one brief compiled to three targets at three sizes. ## Workflow ### 1. Get the brief Four things, and the first is the only one that is required: - **task** — the subject, in a sentence - **audience** — who is in the room - **sources** — what the tool has been given, by name - **length** — slide count, minutes, or word count If the user has an article, deck spec, or research paper open, pull these from it rather than asking. Ask only for what you genuinely cannot infer. ### 2. Compile ```bash python3 scripts/build_prompt.py --list-targets python3 scripts/build_prompt.py --target pitch \ --task "Sovereign AI infrastructure: not a telco, not SaaS, not public cloud" \ --audience "Ministry of Digital Transformation, permanent secretary and CISO" \ --sources "Barbados pilot debrief, Benin ingestion report, SIDSense paper" \ --slides 11 python3 scripts/build_prompt.py --brief brief.json --target gamma --mode light -o prompt.txt ``` Paths are relative to this skill's directory. Stdlib only, Python 3.9+. The prompt goes to stdout and the lint report to stderr, so `> prompt.txt` gives you a clean file with the report still on screen. `--strict` exits non-zero for CI. Useful flags: `--tier XS|S|M|L` to override the profile's size, `--mode light`, `--blocks ground,voice` to drop a block the tool has no use for, `--budget` when you know the real limit of the box. ### 3. Read the lint report before you hand it over It fails on unfilled slots, on an em dash in a prompt that bans them, on a brand token that got trimmed away, and on going over the character budget. A budget finding is the common one, and the fix is to drop a tier, not to delete lines by hand. Budgets are conservative defaults, not published limits. NotebookLM's customisation box is genuinely small; a deck tool's box usually is not. If you know the real number, pass it. ### 4. Hand it over, then say what it cannot do Give the user the block and the three-line version of what it will not fix. A pasted prompt carries rules, not fonts and not files: - **Fonts do not travel.** No tool will install Helvetica Now Display. Expect a substitute and plan to reset type on export. - **The logo is placed, never generated.** Drop the SVG in afterwards from `brandkit/assets/logo/`. - **Nothing is audited.** No palette check runs inside Gamma. The output comes back to a session with the real skills for that. Anything the tool produces that will be reused, bring home: run the copy through `humanizer-voice`, the images through `amini-illustrations/scripts/palette_check.py`, and rebuild a deck that matters with `amini-decks` rather than exporting theirs. ## What this skill will not do Do not paste a compiled prompt into a Claude session and call it done. In a session with files, `amini-decks` builds a real `.pptx` and `amini-illustrations` audits every image. A one-shot prompt is what you use when that is not available, and it is strictly worse. Do not invent brand rules to fill a block. Every line traces to `brandkit/DESIGN.md` or to one of the two skills. New rule, new pull request, and it goes in the block file so every prompt gets it. ## Output register Give the compiled block, the character count against the budget, and the limits. Do not explain the brand rules back to the user. The block carries them.
About
NotebookLM, PowerPoint Copilot, Pitch, Gamma, and Canva all have the same shape: one box, one shot, no filesystem. They cannot read a design system, cannot run a palette auditor, and will not ask a follow-up question. Whatever the box does not say, the tool invents. This skill compiles that box. It merges three sources into one block: the brand kit (palette hex, type, hierarchy, layout, the hard prohibitions), the humanizer voice rules (sentence rhythm, banned vocabulary, no summary endings, invent nothing), and the illustration direction (flat vector, 16:9, a single accent, the recurring deadpan operator figure). The compression is the point. Nine tool profiles fix which blocks go in, how much of each, and a character budget, because a NotebookLM customisation field and a Pitch prompt are two orders of magnitude apart. Four tiers rank every line by how much it changes the output per character, so trimming to fit is a flag rather than a judgement call. Dark and light are separate forks rather than a rule with an exception, since a tool given both will apply the exception. `scripts/build_prompt.py` assembles the prompt from a brief and lints what it produced: unfilled slots, an em dash in a prompt that bans them, a brand token lost to trimming, and the character budget. Stdlib only, non-zero exit under `--strict`. It is deliberately the weaker option. In a session that can read files, the three source skills build a real .pptx, audit every image, and iterate. This one is for when the work has to happen in somebody else's Canva, and it ships the aftercare checklist for bringing the result home.
Amini · Manila, Philippines