Privacy Llm logo

Privacy Llm

Organization
apache
privacy-llm

Decide which LLMs this project's skills may send private foundation content to, then prove it. Detects the stack in use, writes <project-config>/privacy-llm.md, and runs the approved-model gate and the PII redactor end to end so the result is demonstrated rather than declared.

Overview

Publisherapache
Repositorymagpie
Skill nameprivacy-llm
Stars
132
Forks
120
Bundled files
Instructions only
LicenseApache-2.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by apache on GitHub. Read the source before you install it.

Installation

Install the Privacy Llm AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/apache/magpie/tree/main/plugins/magpie-setup/skills/privacy-llm
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/apache/magpie.git /tmp/magpie
mkdir -p .claude/skills
cp -r /tmp/magpie/plugins/magpie-setup/skills/privacy-llm .claude/skills/privacy-llm
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Privacy Llm in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Privacy Llm on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Privacy Llm is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

setup-privacy-llm

Decide which LLMs this project's skills may send private foundation content to, record that decision where the skills look for it, and prove it holds.

Two mechanisms, and this skill configures one of them:

  1. The approved-LLM gate — applies to <private-list> mail and any other private foundation list. A skill refuses to fetch unless every LLM in the active stack is approved. This is what the skill configures, by picking a variant.
  2. PII redaction — applies to <security-list> mail. Third parties the reporter names are replaced with hash-prefixed identifiers before any LLM sees them. It runs under every variant and needs no per-variant configuration; this skill only verifies it works.

The recipes are docs/setup/privacy-llm.md; the contract behind them is tools/privacy-llm/tool.md. This skill walks the recipe rather than restating it — read the variant you land on before writing anything.

[!IMPORTANT] This is a project decision, not a personal preference. What goes in the committed copy says what the project permits for everyone's sessions. Configure locally for yourself freely; see Step 5 before promoting anything to the committed half.


Step 1 — Does it already resolve?

Resolve privacy-llm.md through the lookup chain, per file, local first:

  1. privacy-llm.md in the personal layer — yours, never committed: .apache-magpie-local/ when the project adopted Magpie (the main checkout's, from a linked worktree that has none), else <git-common-dir>/apache-magpie/;
  2. .apache-magpie-overrides/privacy-llm.md — committed, the project's.

Both present → say so and name which one wins here (the local one does), because a local file silently shadowing the project's answer is exactly the case an operator needs told. Offer to show the difference, then go to Step 4 and verify rather than rewrite.

Only one present → read it, report the stack it declares, and go to Step 4. Do not rewrite a working configuration because this skill happened to be invoked.

Neither → continue to Step 2. This is the first run.

Step 2 — Detect the stack, do not ask for it

Ask the user nothing you can determine. Establish what is actually in the stack:

  • The agent itself — which harness is running this skill (Claude Code, Codex, Antigravity, …). Always in the stack.
  • Local inference — is an Ollama, llama.cpp or vLLM endpoint reachable and configured for this project? Check the adapter configuration and the environment, not a guess.
  • Third-party endpoints — anything in the project's existing configuration naming a model endpoint the framework does not ship.
  • Whether this project has private lists at all. A project with no <private-list> still wants the file, because the redactor and the gate both read it — but the variant is the simple one and the interview is one question shorter.

Report what you found as a list before proposing anything. A detection the user can see is a detection they can correct.

Step 3 — Pick the variant and write it

Map what Step 2 found onto a variant in docs/setup/privacy-llm.md:

What the stack isVariant
The agent and nothing else1 — agent only (the default)
A local Ollama model beside it2 — local inference (Ollama)
A local vLLM endpoint beside it3 — local inference (vLLM)
An Apache-hosted endpoint4 — Apache-hosted endpoint
AWS Bedrock5 — Bedrock
The Anthropic API directly6 — direct API (opt-in)

Propose the variant your detection implies, say what it means in one sentence — this permits the private list to be read by X and nothing else — and let the user correct it.

Then write privacy-llm.md from that variant's block, substituting the project's real list addresses, into the personal layer — the personal_dir that python3 -m setup_preflight.layers prints (<git-common-dir>/apache-magpie/ on a project that has not adopted Magpie, so nothing lands in its working tree). Local, always, on this step. Writing the personal copy needs nobody's permission, is invisible to every other clone, and is undone by deleting a directory. Write .apache-magpie-overrides/privacy-llm.md instead only when the project has adopted Magpie and the user says the answer should bind every contributor — and then stage it, never commit.

Two things this step may not do: invent an endpoint — if the detection is ambiguous, ask rather than assume — and widen the stack to make the gate pass. The gate failing is information.

Step 4 — Prove it, do not declare it

Run all three. A privacy configuration nobody has exercised is a comment.

bash
# 1. The gate: is every LLM in the active stack approved?
uv run --project <framework>/tools/privacy-llm/checker \
  privacy-llm-check --reads-private-list

# 2. The redactor, end to end. "Other Researcher" is a third party
#    the reporter named — never the reporter themselves.
echo "I worked with Other Researcher (other@example.com) on this" | \
  uv run --project <framework>/tools/privacy-llm/redactor \
  pii-redact --field name:"Other Researcher" \
             --field email:"other@example.com"

# 3. The resulting local map.
uv run --project <framework>/tools/privacy-llm/redactor pii-list

Expected: exit 0 from the gate; the two values in step 2 replaced by N-… and E-… identifiers; step 3 listing them.

A non-zero gate is the finding, not a failure of this skill. Report which member of the stack is unapproved and what the options are — drop it from the stack, or take the opt-in recipe for it — and stop. Do not edit the file until the user picks.

Step 5 — Say that adopting exists, then stop

Everything so far is local and yours. If the project should commit this answer so every contributor's session is bound by it, that is adopt, which promotes the personal layer into the committed .apache-magpie-overrides/ and stages it for review.

Say that in one line and name the command. Do not run it, do not offer to run it, and do not repeat it on later invocations. Deciding what the project permits its agents to do with private foundation mail is a maintainer decision taken with the other maintainers — and unlike the rest of this skill, it is the one part that is not undone by deleting a directory.

Step 6 — Re-run after an upgrade

What counts as default-approved can narrow between framework versions. After /magpie-setup:setup upgrade, re-run Step 4: if an entry that used to pass is now opt-in, the gate surfaces it and the user takes the matching variant's opt-in recipe.

Say this once, at the end of a first run. It is the reason this skill is worth invoking a second time.


Status — provisional pending ASF Legal

The registry this skill checks against is provisional: it reflects the framework maintainers' working position in the absence of a ratified ASF Legal Affairs policy for AI-assisted handling of foundation private data. Say so when a user asks whether a variant is "allowed" — the honest answer is that the framework enforces a list nobody has yet ratified, and docs/setup/privacy-llm.md carries the full caveat.

Frequently asked questions

What does the Privacy Llm AI skill do?

Decide which LLMs this project's skills may send private foundation content to, then prove it. Detects the stack in use, writes <project-config>/privacy-llm.md, and runs the approved-model gate and the PII redactor end to end so the result is demonstrated rather than declared.

Why use Privacy Llm on TypingMind?

Because you install it once and use it with any model. Privacy Llm is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Privacy Llm in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/apache/magpie/tree/main/plugins/magpie-setup/skills/privacy-llm. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Privacy Llm?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Privacy Llm?

As many as you like. As long as a model supports skills, you can use Privacy Llm with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Privacy Llm AI skill free?

Yes. It is published on GitHub by apache under the Apache-2.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇