โ† library
skill๐Ÿ” Auth & securityv4 ยท published 2026-10-20 ยท updated 2026-11-03

Build my redactor

Builds a one-file redaction tool that runs only in your browser. It swaps emails, phone numbers, serial numbers, asset tags, addresses and names you list for placeholders before you paste anything into AI. It adds a pre-prompt that tells the AI to keep the placeholders, and a restore button that puts the real values back in the answer. Use when someone wants to use AI with customer or company data without that data leaving their device.

By Uplift Duo

Run it as a prompt

Paste this into any AI agent, or fetch it: curl -s https://uplift.page/api/v1/prompts/build-my-redactor/raw

prompt.md
# Build my redactor

Build me a small tool that runs only on my device. I paste text in, it swaps anything sensitive for placeholders, and I paste the safe version into AI. When the AI answers, the tool puts the real values back. Nothing I type into it goes anywhere.

## Before you start

Ask me one question, then stop and wait: "Besides emails, phone numbers and serial numbers, what must never leave your device? For example customer names, site addresses, asset tags or prices. Or say 'use the defaults'."

Then turn my answer into rules. Specific names and words (a customer, a site, a product) go into the "always hide" box, already filled in. Kinds of things become pattern rules with their own placeholder: prices or dollar amounts โ†’ `<PRICE_1>`, dates โ†’ `<DATE_1>`, PO or order numbers โ†’ `<PO_1>`. If I say "numbers" or "all numbers", hide every remaining number with 3 or more digits, counting commas and decimal points inside it as part of the number ($4,500 and 1,250.75 are one number each) โ†’ `<NUMBER_1>`, checked after the other rules so a phone number still reads as a phone number. If I say "use the defaults", add no rules beyond the list in step 2. Tell me in one line which rules you added.

## Steps

1. **Build one HTML file** with everything inline: plain HTML, CSS and JavaScript. No libraries, no fonts or scripts from the internet, and no network requests of any kind (no fetch, no forms that submit, no images from links). It must work with wifi off. Don't save anything to the browser's storage. Keep the code plain: one short function per rule, no clever one-liners. Before you hand it over, read the script through once for unmatched brackets or quotes, and check that every regular expression is valid JavaScript (a `?` or `*` straight after `\b` is not), because one typo stops every button. If this app can run code, check the script with it (for example `node --check`).
2. **It finds and replaces**, in this order:
   - email addresses โ†’ `<EMAIL_1>`
   - phone numbers: 7 or more digits split into groups, such as (503) 555-0142, 503.555.0199, 1-800-555-0123 or +44 20 7946 0958 โ†’ `<PHONE_1>`
   - serial numbers: the value after "S/N", "SN", "Serial", "Serial No." or "Service Tag", and any 8 to 20 character run of letters, digits and dashes that itself mixes letters and digits, in any case (CN0F2KJR7421, ab12-cd34-ef56). Check the run, not the rest of the line: "Latitude", "Portland" and "management" are words, not serials โ†’ `<SERIAL_1>`
   - asset tags: the value after "Asset tag" or "Asset #", and codes like AT-004417 (2 to 5 letters, a dash, digits) โ†’ `<TAG_1>`
   - IP addresses (10.20.30.40) and MAC addresses (00:1A:2B:3C:4D:5E) โ†’ `<IP_1>`, `<MAC_1>`
   - US street addresses: a number, up to five words, then a street word such as St, Ave, Rd, Blvd, Dr, Way, Ln, Ct, Pl or Terrace โ†’ `<ADDRESS_1>`. The number starts the address only if it stands alone: in "10/28/2026 from 4821 Harbor View Dr" the address is "4821 Harbor View Dr"
   - every word or phrase on my "always hide" list (a box where I type one per line, matched without regard to case) โ†’ `<NAME_1>`
   - any rules you added from my answer, last
   Where a rule has a label (S/N, Serial, Service Tag, Asset tag, PO), replace only the value and keep the label and its punctuation exactly: "S/N <SERIAL_1>", "Serial: <SERIAL_3>". Match a label only as a whole word, and only when the value after it contains a digit, so ordinary words stay as they are: "Serial numbers are on the boxes", "tag along", "order the pallets", "asset management" and "Portland" must not change. The same value always gets the same placeholder, and later rules skip text that is already a placeholder. Restoring the safe text must give back the original exactly.
3. **The screen**, in this order: a box to paste into; the "always hide" box; a **Redact** button; the safe text with a count of what was replaced by type; a **Copy with pre-prompt** button; a box to paste the AI's answer into with a **Restore** button, and the restored answer in its own box below; a **Clear everything** button. Title the page "Local Redactor". Add a **Load sample** button that fills the first box with exactly this made-up email, so I can try it at once:

   ```
   Subject: Pickup for Brightline Credit Union, PO 4417820

   Hi team, please collect 40 laptops on 10/28/2026 from 4821 Harbor View Dr, Suite 200, Portland, OR 97217.
   Contact: Dana Whitfield, dana.whitfield@brightline-example.com, cell (503) 555-0142.
   Quote: $4,500 for the lot. Asset tag AT-004417. Made in China.
   Units: Dell Latitude 5420 S/N 7XK2M93, Service Tag 4HJ8KQ2, Serial: CN0F2KJR7421, SN PF3ZK9QA, 9G7HTQ2LMN84.
   Thanks, Brightline Credit Union IT
   ```

   Check your rules against it before you hand the file over: after Redact, the five serials, the email, the phone, the street address and the asset tag must all be placeholders, and, with the "always hide" box empty, "Dell Latitude", "40 laptops", "Portland" and "Dana Whitfield" must still read normally. At the very top, put a line that reads "Not running: open this file in a browser such as Chrome, Safari or Edge. Previews and text editors don't run the buttons." The script hides that line as soon as it loads, so anyone who can still see it knows the tool isn't running.
1. **The pre-prompt.** "Copy with pre-prompt" copies this line above the safe text: "Some details below are replaced with placeholders like <SERIAL_1> or <NAME_2>. Keep every placeholder exactly as written in your answer. Don't guess what they stand for or invent values for them." If the browser blocks copying, select the text and say "Press Ctrl+C (Cmd+C on a Mac) to copy".
2. **The key stays on screen only.** Show a small table of placeholder to real value, under a "Show key" toggle, hidden by default. Put values in it as plain text, never as HTML. It disappears when the page closes.
3. **Hand it over.** Give me the file as a download if this app can make one; otherwise show the code. Then tell me how to open it, using only the lines that fit my device and this app:
   - If this app has a preview where buttons work (a canvas, artifact or preview pane), use it.
   - On a computer: save it as `redactor.html` and open it in Chrome, Safari or Edge (right-click, Open With). If you copy the code into a file yourself, use a plain-text editor; on a Mac, in TextEdit choose Format, then Make Plain Text, before you save. A Finder preview (the space bar) won't run the buttons.
   - On an iPhone or iPad: a file saved in the Files app opens as a preview, and previews don't run buttons. Use this app's preview, or open the file on a computer.
   - On Android: open the saved file with Chrome.
   Then say, word for word: "If you can see the 'Not running' line, it's being shown as a preview, not run. If it still shows in Chrome, Safari or Edge, the code has a mistake: come back and tell me 'It says Not running in Chrome' and I'll fix it. Test it: turn on airplane mode and redact the sample. If it still works, nothing is leaving your device."
4. **End with a reminder** that the tool catches patterns, not judgment. Say plainly which things it can miss (names it doesn't know, serials in odd formats), and suggest running the Make it pass prompt next to test it with tricky examples.

## Branding

Style it in my company's colors if I've shared a brand guide. Otherwise use the default look (Uplift Duo): page `#FAF9F6`, text `#1A1A1A`, buttons `#E85D04` with white text, white boxes with a 1px `#E0DDD5` border. System fonts only, so it works offline. Never make up a palette, and don't put a company name on the page.

## Rules

- No network requests, external files or storage. If something I ask for would need the internet, say so and leave it out.
- Don't claim it catches everything. A person checks the safe text before pasting it anywhere.
- Keep it to one file I can email to a coworker.

Install it as a skill

Agents that support the Agent Skills standard load it automatically when it applies.

download
curl -fsSL https://uplift.page/p/build-my-redactor/SKILL.md --create-dirs -o .agents/skills/build-my-redactor/SKILL.md
or from any MCP client
MCP server: https://uplift.page/mcp
Tool: pull_skill  {"slug": "build-my-redactor"}

The full skill

Build me a small tool that runs only on my device. I paste text in, it swaps anything sensitive for placeholders, and I paste the safe version into AI. When the AI answers, the tool puts the real values back. Nothing I type into it goes anywhere.

Before you start

Ask me one question, then stop and wait: "Besides emails, phone numbers and serial numbers, what must never leave your device? For example customer names, site addresses, asset tags or prices. Or say 'use the defaults'."

Then turn my answer into rules. Specific names and words (a customer, a site, a product) go into the "always hide" box, already filled in. Kinds of things become pattern rules with their own placeholder: prices or dollar amounts โ†’ <PRICE_1>, dates โ†’ <DATE_1>, PO or order numbers โ†’ <PO_1>. If I say "numbers" or "all numbers", hide every remaining number with 3 or more digits, counting commas and decimal points inside it as part of the number ($4,500 and 1,250.75 are one number each) โ†’ <NUMBER_1>, checked after the other rules so a phone number still reads as a phone number. If I say "use the defaults", add no rules beyond the list in step 2. Tell me in one line which rules you added.

Steps

  1. Build one HTML file with everything inline: plain HTML, CSS and JavaScript. No libraries, no fonts or scripts from the internet, and no network requests of any kind (no fetch, no forms that submit, no images from links). It must work with wifi off. Don't save anything to the browser's storage. Keep the code plain: one short function per rule, no clever one-liners. Before you hand it over, read the script through once for unmatched brackets or quotes, and check that every regular expression is valid JavaScript (a ? or * straight after \b is not), because one typo stops every button. If this app can run code, check the script with it (for example node --check).

  2. It finds and replaces, in this order:

    • email addresses โ†’ <EMAIL_1>
    • phone numbers: 7 or more digits split into groups, such as (503) 555-0142, 503.555.0199, 1-800-555-0123 or +44 20 7946 0958 โ†’ <PHONE_1>
    • serial numbers: the value after "S/N", "SN", "Serial", "Serial No." or "Service Tag", and any 8 to 20 character run of letters, digits and dashes that itself mixes letters and digits, in any case (CN0F2KJR7421, ab12-cd34-ef56). Check the run, not the rest of the line: "Latitude", "Portland" and "management" are words, not serials โ†’ <SERIAL_1>
    • asset tags: the value after "Asset tag" or "Asset #", and codes like AT-004417 (2 to 5 letters, a dash, digits) โ†’ <TAG_1>
    • IP addresses (10.20.30.40) and MAC addresses (00:1A:2B:3C:4D:5E) โ†’ <IP_1>, <MAC_1>
    • US street addresses: a number, up to five words, then a street word such as St, Ave, Rd, Blvd, Dr, Way, Ln, Ct, Pl or Terrace โ†’ <ADDRESS_1>. The number starts the address only if it stands alone: in "10/28/2026 from 4821 Harbor View Dr" the address is "4821 Harbor View Dr"
    • every word or phrase on my "always hide" list (a box where I type one per line, matched without regard to case) โ†’ <NAME_1>
    • any rules you added from my answer, last Where a rule has a label (S/N, Serial, Service Tag, Asset tag, PO), replace only the value and keep the label and its punctuation exactly: "S/N ", "Serial: ". Match a label only as a whole word, and only when the value after it contains a digit, so ordinary words stay as they are: "Serial numbers are on the boxes", "tag along", "order the pallets", "asset management" and "Portland" must not change. The same value always gets the same placeholder, and later rules skip text that is already a placeholder. Restoring the safe text must give back the original exactly.
  3. The screen, in this order: a box to paste into; the "always hide" box; a Redact button; the safe text with a count of what was replaced by type; a Copy with pre-prompt button; a box to paste the AI's answer into with a Restore button, and the restored answer in its own box below; a Clear everything button. Title the page "Local Redactor". Add a Load sample button that fills the first box with exactly this made-up email, so I can try it at once:

    Subject: Pickup for Brightline Credit Union, PO 4417820
    
    Hi team, please collect 40 laptops on 10/28/2026 from 4821 Harbor View Dr, Suite 200, Portland, OR 97217.
    Contact: Dana Whitfield, dana.whitfield@brightline-example.com, cell (503) 555-0142.
    Quote: $4,500 for the lot. Asset tag AT-004417. Made in China.
    Units: Dell Latitude 5420 S/N 7XK2M93, Service Tag 4HJ8KQ2, Serial: CN0F2KJR7421, SN PF3ZK9QA, 9G7HTQ2LMN84.
    Thanks, Brightline Credit Union IT
    

    Check your rules against it before you hand the file over: after Redact, the five serials, the email, the phone, the street address and the asset tag must all be placeholders, and, with the "always hide" box empty, "Dell Latitude", "40 laptops", "Portland" and "Dana Whitfield" must still read normally. At the very top, put a line that reads "Not running: open this file in a browser such as Chrome, Safari or Edge. Previews and text editors don't run the buttons." The script hides that line as soon as it loads, so anyone who can still see it knows the tool isn't running.

  4. The pre-prompt. "Copy with pre-prompt" copies this line above the safe text: "Some details below are replaced with placeholders like or . Keep every placeholder exactly as written in your answer. Don't guess what they stand for or invent values for them." If the browser blocks copying, select the text and say "Press Ctrl+C (Cmd+C on a Mac) to copy".

  5. The key stays on screen only. Show a small table of placeholder to real value, under a "Show key" toggle, hidden by default. Put values in it as plain text, never as HTML. It disappears when the page closes.

  6. Hand it over. Give me the file as a download if this app can make one; otherwise show the code. Then tell me how to open it, using only the lines that fit my device and this app:

    • If this app has a preview where buttons work (a canvas, artifact or preview pane), use it.
    • On a computer: save it as redactor.html and open it in Chrome, Safari or Edge (right-click, Open With). If you copy the code into a file yourself, use a plain-text editor; on a Mac, in TextEdit choose Format, then Make Plain Text, before you save. A Finder preview (the space bar) won't run the buttons.
    • On an iPhone or iPad: a file saved in the Files app opens as a preview, and previews don't run buttons. Use this app's preview, or open the file on a computer.
    • On Android: open the saved file with Chrome. Then say, word for word: "If you can see the 'Not running' line, it's being shown as a preview, not run. If it still shows in Chrome, Safari or Edge, the code has a mistake: come back and tell me 'It says Not running in Chrome' and I'll fix it. Test it: turn on airplane mode and redact the sample. If it still works, nothing is leaving your device."
  7. End with a reminder that the tool catches patterns, not judgment. Say plainly which things it can miss (names it doesn't know, serials in odd formats), and suggest running the Make it pass prompt next to test it with tricky examples.

Branding

Style it in my company's colors if I've shared a brand guide. Otherwise use the default look (Uplift Duo): page #FAF9F6, text #1A1A1A, buttons #E85D04 with white text, white boxes with a 1px #E0DDD5 border. System fonts only, so it works offline. Never make up a palette, and don't put a company name on the page.

Rules

  • No network requests, external files or storage. If something I ask for would need the internet, say so and leave it out.
  • Don't claim it catches everything. A person checks the safe text before pasting it anywhere.
  • Keep it to one file I can email to a coworker.

Served from the uplift.page library and refreshed within 5 minutes of every update.