{
  "schemaVersion": "1.0",
  "item": {
    "slug": "redacta",
    "name": "Redacta",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/nickjlamb/redacta",
    "canonicalUrl": "https://clawhub.ai/nickjlamb/redacta",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/redacta",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=redacta",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/redacta"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/redacta",
    "agentPageUrl": "https://openagent3.xyz/skills/redacta/agent",
    "manifestUrl": "https://openagent3.xyz/skills/redacta/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/redacta/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Redacta",
        "body": "Redacta pseudonymises medical documents before AI processing. It detects patient identifiers and replaces them with labelled tokens, preserving clinical meaning while protecting privacy."
      },
      {
        "title": "How It Works",
        "body": "When a user shares medical text, scan it for patient identifiers and replace them with pseudonymised tokens. The output should be clinically readable but contain no real patient data."
      },
      {
        "title": "Structured Identifiers (regex-based)",
        "body": "Apply these pattern rules automatically:\n\nNHS Numbers (UK)\n\nFormat: 3-3-4 digits (e.g. 943 476 5919) or 10 consecutive digits\nReplace with: [NHS_NUMBER]\nValidation: check digit using Modulus 11 algorithm when possible\n\nDates of Birth / Dates\n\nFormats: DD/MM/YYYY, DD-MM-YYYY, DD.MM.YYYY, YYYY-MM-DD, \"3rd February 1985\", \"Feb 3, 1985\"\nContext: dates near keywords like \"DOB\", \"born\", \"date of birth\", \"age\", \"d.o.b\"\nReplace with: [DATE_OF_BIRTH] (when contextually a DOB) or [DATE] (other dates)\nPreserve clinical dates when clearly not patient-identifying (e.g. \"appointment on 15 March\")\n\nUK Postcodes\n\nFormat: A9 9AA, A99 9AA, A9A 9AA, AA9 9AA, AA99 9AA, AA9A 9AA\nReplace with: [POSTCODE]\n\nPhone Numbers\n\nUK formats: 07xxx, 01xxx, 02xxx, +44\nUS formats: (xxx) xxx-xxxx, xxx-xxx-xxxx, +1\nReplace with: [PHONE_NUMBER]\n\nEmail Addresses\n\nStandard email pattern\nReplace with: [EMAIL]\n\nHospital / MRN Numbers\n\nContext: numbers near \"hospital number\", \"MRN\", \"patient ID\", \"unit number\", \"case number\"\nReplace with: [HOSPITAL_NUMBER]\n\nUK National Insurance Numbers\n\nFormat: 2 letters + 6 digits + 1 letter (e.g. AB123456C)\nReplace with: [NI_NUMBER]"
      },
      {
        "title": "Contextual Identifiers (agent reasoning)",
        "body": "Use your understanding of clinical documents to detect:\n\nPatient Names\n\nLook for names in: salutations (\"Dear Mrs Jones\"), headers (\"Patient: John Smith\"), references in body text\nDistinguish patient names from clinician names — do NOT redact doctor/nurse/consultant names unless explicitly asked\nReplace with: [PATIENT_NAME]\nIf multiple patients mentioned, use: [PATIENT_NAME_1], [PATIENT_NAME_2]\n\nPatient Addresses\n\nFull or partial addresses (house number + street, or referenced near \"address\", \"lives at\", \"resides\")\nReplace with: [ADDRESS]\nPostcodes are handled separately above\n\nAges\n\nSpecific ages that could identify when combined with other data: \"82-year-old\", \"aged 47\"\nReplace with: [AGE]\nContext matters: \"children aged 5-12\" (general) vs \"a 73-year-old woman\" (specific patient)"
      },
      {
        "title": "Output Format",
        "body": "Return two sections:"
      },
      {
        "title": "1. Pseudonymised Document",
        "body": "The full document with all identifiers replaced by tokens. Preserve all formatting, paragraph breaks, and clinical content."
      },
      {
        "title": "2. Redaction Report",
        "body": "A summary of what was found and replaced:\n\nRedaction Report\n================\nItems pseudonymised: 7\n\n- [NHS_NUMBER] × 1 (line 3)\n- [PATIENT_NAME] × 2 (lines 1, 5)\n- [DATE_OF_BIRTH] × 1 (line 2)\n- [POSTCODE] × 1 (line 8)\n- [PHONE_NUMBER] × 1 (line 9)\n- [AGE] × 1 (line 4)\n\nClinical content preserved: ✓\nClinician names preserved: Dr. Sarah Chen, Mr. James Wright"
      },
      {
        "title": "Rules",
        "body": "Never output the original patient identifiers in your response — only the pseudonymised version\nPreserve all clinical content — medications, diagnoses, procedures, test results, clinical observations\nPreserve clinician names by default — only redact if the user explicitly asks\nPreserve hospital/practice names by default — these are institutional, not patient data\nWhen uncertain, err on the side of redacting — false positives are safer than false negatives\nDates: appointment dates, procedure dates, and follow-up dates should be preserved unless they could identify the patient (e.g. a specific date of birth)\nConsistency: the same identifier should get the same token throughout the document (e.g. every instance of the patient's name becomes [PATIENT_NAME])"
      },
      {
        "title": "Example",
        "body": "Input:\n\nDear Mrs Patricia Hartley,\n\nDOB: 14/03/1952 (age 73)\nNHS Number: 943 476 5919\nHospital Number: RXH-2847561\n\nI am writing to inform you of the results of your recent investigations.\nMrs Hartley attended the cardiology outpatient clinic on 10 February 2026\nunder the care of Dr Sarah Chen.\n\nAddress: 14 Oakfield Road, Headingley, Leeds LS6 3PJ\nTel: 0113 278 4532\n\nOutput:\n\nDear [PATIENT_NAME],\n\nDOB: [DATE_OF_BIRTH] (age [AGE])\nNHS Number: [NHS_NUMBER]\nHospital Number: [HOSPITAL_NUMBER]\n\nI am writing to inform you of the results of your recent investigations.\n[PATIENT_NAME] attended the cardiology outpatient clinic on 10 February 2026\nunder the care of Dr Sarah Chen.\n\nAddress: [ADDRESS], [POSTCODE]\nTel: [PHONE_NUMBER]"
      },
      {
        "title": "What This Skill Does NOT Do",
        "body": "Store or transmit patient data\nGuarantee 100% detection (always review output)\nReplace formal data protection processes\nProvide legal compliance certification\nProcess images or PDFs (text input only in v1)"
      },
      {
        "title": "Privacy Note",
        "body": "This skill processes text locally within your AI agent session. No patient data is sent to external services. However, the text is processed by the underlying language model — ensure your model provider's data handling meets your organisation's requirements.\n\nBuilt by PharmaTools.AI — applied AI for pharma and healthcare."
      }
    ],
    "body": "Redacta\n\nRedacta pseudonymises medical documents before AI processing. It detects patient identifiers and replaces them with labelled tokens, preserving clinical meaning while protecting privacy.\n\nHow It Works\n\nWhen a user shares medical text, scan it for patient identifiers and replace them with pseudonymised tokens. The output should be clinically readable but contain no real patient data.\n\nWhat Gets Detected\nStructured Identifiers (regex-based)\n\nApply these pattern rules automatically:\n\nNHS Numbers (UK)\n\nFormat: 3-3-4 digits (e.g. 943 476 5919) or 10 consecutive digits\nReplace with: [NHS_NUMBER]\nValidation: check digit using Modulus 11 algorithm when possible\n\nDates of Birth / Dates\n\nFormats: DD/MM/YYYY, DD-MM-YYYY, DD.MM.YYYY, YYYY-MM-DD, \"3rd February 1985\", \"Feb 3, 1985\"\nContext: dates near keywords like \"DOB\", \"born\", \"date of birth\", \"age\", \"d.o.b\"\nReplace with: [DATE_OF_BIRTH] (when contextually a DOB) or [DATE] (other dates)\nPreserve clinical dates when clearly not patient-identifying (e.g. \"appointment on 15 March\")\n\nUK Postcodes\n\nFormat: A9 9AA, A99 9AA, A9A 9AA, AA9 9AA, AA99 9AA, AA9A 9AA\nReplace with: [POSTCODE]\n\nPhone Numbers\n\nUK formats: 07xxx, 01xxx, 02xxx, +44\nUS formats: (xxx) xxx-xxxx, xxx-xxx-xxxx, +1\nReplace with: [PHONE_NUMBER]\n\nEmail Addresses\n\nStandard email pattern\nReplace with: [EMAIL]\n\nHospital / MRN Numbers\n\nContext: numbers near \"hospital number\", \"MRN\", \"patient ID\", \"unit number\", \"case number\"\nReplace with: [HOSPITAL_NUMBER]\n\nUK National Insurance Numbers\n\nFormat: 2 letters + 6 digits + 1 letter (e.g. AB123456C)\nReplace with: [NI_NUMBER]\nContextual Identifiers (agent reasoning)\n\nUse your understanding of clinical documents to detect:\n\nPatient Names\n\nLook for names in: salutations (\"Dear Mrs Jones\"), headers (\"Patient: John Smith\"), references in body text\nDistinguish patient names from clinician names — do NOT redact doctor/nurse/consultant names unless explicitly asked\nReplace with: [PATIENT_NAME]\nIf multiple patients mentioned, use: [PATIENT_NAME_1], [PATIENT_NAME_2]\n\nPatient Addresses\n\nFull or partial addresses (house number + street, or referenced near \"address\", \"lives at\", \"resides\")\nReplace with: [ADDRESS]\nPostcodes are handled separately above\n\nAges\n\nSpecific ages that could identify when combined with other data: \"82-year-old\", \"aged 47\"\nReplace with: [AGE]\nContext matters: \"children aged 5-12\" (general) vs \"a 73-year-old woman\" (specific patient)\nOutput Format\n\nReturn two sections:\n\n1. Pseudonymised Document\n\nThe full document with all identifiers replaced by tokens. Preserve all formatting, paragraph breaks, and clinical content.\n\n2. Redaction Report\n\nA summary of what was found and replaced:\n\nRedaction Report\n================\nItems pseudonymised: 7\n\n- [NHS_NUMBER] × 1 (line 3)\n- [PATIENT_NAME] × 2 (lines 1, 5)\n- [DATE_OF_BIRTH] × 1 (line 2)\n- [POSTCODE] × 1 (line 8)\n- [PHONE_NUMBER] × 1 (line 9)\n- [AGE] × 1 (line 4)\n\nClinical content preserved: ✓\nClinician names preserved: Dr. Sarah Chen, Mr. James Wright\n\nRules\nNever output the original patient identifiers in your response — only the pseudonymised version\nPreserve all clinical content — medications, diagnoses, procedures, test results, clinical observations\nPreserve clinician names by default — only redact if the user explicitly asks\nPreserve hospital/practice names by default — these are institutional, not patient data\nWhen uncertain, err on the side of redacting — false positives are safer than false negatives\nDates: appointment dates, procedure dates, and follow-up dates should be preserved unless they could identify the patient (e.g. a specific date of birth)\nConsistency: the same identifier should get the same token throughout the document (e.g. every instance of the patient's name becomes [PATIENT_NAME])\nExample\n\nInput:\n\nDear Mrs Patricia Hartley,\n\nDOB: 14/03/1952 (age 73)\nNHS Number: 943 476 5919\nHospital Number: RXH-2847561\n\nI am writing to inform you of the results of your recent investigations.\nMrs Hartley attended the cardiology outpatient clinic on 10 February 2026\nunder the care of Dr Sarah Chen.\n\nAddress: 14 Oakfield Road, Headingley, Leeds LS6 3PJ\nTel: 0113 278 4532\n\n\nOutput:\n\nDear [PATIENT_NAME],\n\nDOB: [DATE_OF_BIRTH] (age [AGE])\nNHS Number: [NHS_NUMBER]\nHospital Number: [HOSPITAL_NUMBER]\n\nI am writing to inform you of the results of your recent investigations.\n[PATIENT_NAME] attended the cardiology outpatient clinic on 10 February 2026\nunder the care of Dr Sarah Chen.\n\nAddress: [ADDRESS], [POSTCODE]\nTel: [PHONE_NUMBER]\n\nWhat This Skill Does NOT Do\nStore or transmit patient data\nGuarantee 100% detection (always review output)\nReplace formal data protection processes\nProvide legal compliance certification\nProcess images or PDFs (text input only in v1)\nPrivacy Note\n\nThis skill processes text locally within your AI agent session. No patient data is sent to external services. However, the text is processed by the underlying language model — ensure your model provider's data handling meets your organisation's requirements.\n\nBuilt by PharmaTools.AI — applied AI for pharma and healthcare."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/nickjlamb/redacta",
    "publisherUrl": "https://clawhub.ai/nickjlamb/redacta",
    "owner": "nickjlamb",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/redacta",
    "downloadUrl": "https://openagent3.xyz/downloads/redacta",
    "agentUrl": "https://openagent3.xyz/skills/redacta/agent",
    "manifestUrl": "https://openagent3.xyz/skills/redacta/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/redacta/agent.md"
  }
}