{
  "schemaVersion": "1.0",
  "item": {
    "slug": "phenoskill",
    "name": "Phenosnap Phenotype Extractor",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/kaichop/phenoskill",
    "canonicalUrl": "https://clawhub.ai/kaichop/phenoskill",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/phenoskill",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=phenoskill",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "CHANGELOG.md",
      "README.md",
      "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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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/phenoskill"
    },
    "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/phenoskill",
    "agentPageUrl": "https://openagent3.xyz/skills/phenoskill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/phenoskill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/phenoskill/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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "When to use",
        "body": "Use this skill when the user provides their own:\n\nclinical phenotypes / symptoms / diagnoses (free text, bullet lists, clinical note-like text), and/or\ndrugs/medications (names, dosages, frequencies).\n\nExamples that should trigger:\n\n“Symptoms: ataxia, seizures, developmental delay. Meds: levetiracetam 500 mg BID.”\n“I’m taking metformin 500mg daily and have fatigue, polyuria, blurry vision.”"
      },
      {
        "title": "When NOT to use",
        "body": "Do not use this skill when:\n\nThe user asks general questions (e.g., “What is HPO?”, “What is a phenotype?”, “What is GLP-1?”).\nThe user provides text that is not personal clinical information (news articles, academic paragraphs, code, etc.).\nThe user asks you to interpret someone else’s private clinical record (PHI) without clear permission."
      },
      {
        "title": "Safety & privacy",
        "body": "Treat user input as potentially sensitive clinical information.\nDo not upload user text or extracted results anywhere (this skill is local-only).\nBefore writing any input to disk, redact obvious identifiers:\n\nemails, phone numbers, street addresses\nMRN-like long numeric identifiers (e.g., 8+ digits)\nnames when clearly presented as “Name: …”\n\n\nIf the message appears to include highly identifying PHI (e.g., name + DOB + address, or name + MRN), pause and ask for confirmation to proceed, recommending the user remove identifiers first."
      },
      {
        "title": "Requirements / setup",
        "body": "Python: python3 available on PATH.\nNetwork access (only for initial PhenoSnap download if missing).\nHPO OBO file:\n\nDefault expected path: {baseDir}/resources/hp.obo\nOverride path via environment variable: HPO_OBO_PATH\nThis skill does not auto-download hp.obo. You must supply it.\n\nRecommended (best practice):\n\nUse a virtual environment (venv/conda) before running this skill, because it may install Python packages via pip."
      },
      {
        "title": "Inputs & outputs",
        "body": "Input text file (redacted):\n\n{baseDir}/artifacts/phenosnap_inputs/input_<YYYYMMDD_HHMMSS>.txt\n\n\nOutput JSON file (timestamped):\n\n{baseDir}/artifacts/phenosnap_outputs/phenotypes_<YYYYMMDD_HHMMSS>.json\n\n\nThird-party download cache:\n\n{baseDir}/third_party/phenosnap_main.zip\n{baseDir}/third_party/get-pip.py"
      },
      {
        "title": "Detection heuristic (activation check)",
        "body": "Trigger if the user message contains any of:\n\nphenotype cues: symptom(s), phenotype(s), Dx, diagnosis, PMH, Hx, history of, or a symptom-like list\nmedication cues: meds, medications, taking, prescribed, plus patterns like:\n\ndosages: \\b\\d+(\\.\\d+)?\\s?(mg|mcg|g|ml|units)\\b\nfrequencies: qd, q.d., bid, b.i.d., tid, t.i.d., qhs, qAM, qPM, daily, weekly\n\nDo not trigger for purely informational questions without user-provided phenotype/medication content."
      },
      {
        "title": "0) Create required directories",
        "body": "Create if missing:\n\n{baseDir}/PhenoSnap/\n{baseDir}/artifacts/phenosnap_inputs/\n{baseDir}/artifacts/phenosnap_outputs/\n{baseDir}/resources/\n{baseDir}/third_party/"
      },
      {
        "title": "1) Confirm / redact sensitive identifiers",
        "body": "Scan the user message for identifiers (email/phone/address/MRN/name fields).\nIf strongly identifying PHI is present (name + DOB/address/MRN):\n\nAsk the user to confirm proceeding and recommend removing identifiers.\n\n\nProduce a redacted version of the user text:\n\nReplace emails with [REDACTED_EMAIL]\nReplace phone numbers with [REDACTED_PHONE]\nReplace long numeric IDs with [REDACTED_ID]\nReplace address-like patterns with [REDACTED_ADDRESS]\nReplace explicit “Name: …” fields with Name: [REDACTED_NAME]"
      },
      {
        "title": "2) Ensure PhenoSnap exists locally",
        "body": "Target location: {baseDir}/PhenoSnap/"
      },
      {
        "title": "2A) If {baseDir}/PhenoSnap/ exists and contains extract_phenotypes.py",
        "body": "Proceed to dependency self-test."
      },
      {
        "title": "2B) If {baseDir}/PhenoSnap/ does NOT exist (or missing extract_phenotypes.py)",
        "body": "Prefer git; fallback to zip.\n\nIf git is available\n\nRun:\n\ngit clone https://github.com/WGLab/PhenoSnap.git \"{baseDir}/PhenoSnap\"\n\nIf git is NOT available\n\nDownload zip:\n\nURL: https://github.com/WGLab/PhenoSnap/archive/refs/heads/main.zip\nDestination: {baseDir}/third_party/phenosnap_main.zip\n\nDownload method (pick first available):\n\nIf curl exists:\n\ncurl -L \"https://github.com/WGLab/PhenoSnap/archive/refs/heads/main.zip\" -o \"{baseDir}/third_party/phenosnap_main.zip\"\n\n\nElse on Windows PowerShell:\n\nInvoke-WebRequest -Uri \"https://github.com/WGLab/PhenoSnap/archive/refs/heads/main.zip\" -OutFile \"{baseDir}/third_party/phenosnap_main.zip\"\n\nUnzip (choose by OS/tools):\n\nWindows PowerShell:\n\nExpand-Archive -Path \"{baseDir}/third_party/phenosnap_main.zip\" -DestinationPath \"{baseDir}/third_party/phenosnap_unzip\" -Force\n\n\nmacOS/Linux with unzip:\n\nunzip -o \"{baseDir}/third_party/phenosnap_main.zip\" -d \"{baseDir}/third_party/phenosnap_unzip\"\n\nIf neither unzip nor Expand-Archive is available, use Python:\n\npython3 -c \"import zipfile; z=zipfile.ZipFile(r'{baseDir}/third_party/phenosnap_main.zip'); z.extractall(r'{baseDir}/third_party/phenosnap_unzip')\"\n\nThen rename/move the extracted folder to {baseDir}/PhenoSnap/:\n\nThe extracted folder is typically {baseDir}/third_party/phenosnap_unzip/PhenoSnap-main\nMove/rename to {baseDir}/PhenoSnap/\n\nFinal check:\n\nVerify {baseDir}/PhenoSnap/extract_phenotypes.py exists.\nIf not found, stop and report the directory listing of {baseDir}/PhenoSnap/ and {baseDir}/third_party/phenosnap_unzip/."
      },
      {
        "title": "3) Dependency self-test and auto-install",
        "body": "Run from inside {baseDir}/PhenoSnap/."
      },
      {
        "title": "3A) Smoke test importability",
        "body": "Run:\n\npython3 -c \"import importlib.util; spec=importlib.util.spec_from_file_location('extract_phenotypes','extract_phenotypes.py'); m=importlib.util.module_from_spec(spec); spec.loader.exec_module(m); print('ok')\"\n\nIf it prints ok, proceed."
      },
      {
        "title": "3B) If smoke test fails with missing module (ModuleNotFoundError / ImportError)",
        "body": "Step 1: Ensure pip exists for python3\n\nCheck:\n\npython3 -m pip --version\n\nIf that fails, try:\n\npython3 -m ensurepip --upgrade\n\nCheck again:\n\npython3 -m pip --version\n\nIf still failing, bootstrap pip via get-pip.py:\n\nDownload https://bootstrap.pypa.io/get-pip.py to {baseDir}/third_party/get-pip.py\n\nwith curl:\n\ncurl -L \"https://bootstrap.pypa.io/get-pip.py\" -o \"{baseDir}/third_party/get-pip.py\"\n\n\nor PowerShell:\n\nInvoke-WebRequest -Uri \"https://bootstrap.pypa.io/get-pip.py\" -OutFile \"{baseDir}/third_party/get-pip.py\"\n\n\n\n\nInstall:\n\npython3 \"{baseDir}/third_party/get-pip.py\"\n\n\nVerify:\n\npython3 -m pip --version\n\nIf pip still cannot be used, stop and report the error output.\n\nStep 2: Install PhenoSnap dependencies\n\nFrom {baseDir}/PhenoSnap/, run:\n\npython3 -m pip install -r requirements.txt\n\nStep 3: Re-run smoke test once\n\nRe-run:\n\npython3 -c \"import importlib.util; spec=importlib.util.spec_from_file_location('extract_phenotypes','extract_phenotypes.py'); m=importlib.util.module_from_spec(spec); spec.loader.exec_module(m); print('ok')\"\n\nIf still failing, stop and return:\n\nthe missing module name (from error)\nthe command output\nrecommended fix (use a venv/conda env; verify python3/pip; rerun pip install)"
      },
      {
        "title": "4) Prepare HPO OBO path",
        "body": "Resolve HPO OBO path in this order:\n\nIf env var HPO_OBO_PATH is set and file exists, use that.\nElse use {baseDir}/resources/hp.obo if it exists.\n\nIf the resolved file does not exist:\n\nStop and tell the user to place hp.obo at {baseDir}/resources/hp.obo or set HPO_OBO_PATH to its full path."
      },
      {
        "title": "5) Write input file (redacted)",
        "body": "Timestamp format: YYYYMMDD_HHMMSS (local time).\nWrite redacted user text to:\n\n{baseDir}/artifacts/phenosnap_inputs/input_<TS>.txt"
      },
      {
        "title": "6) Run extraction",
        "body": "From {baseDir}/PhenoSnap/, run:\n\npython3 extract_phenotypes.py --input-file \"{baseDir}/artifacts/phenosnap_inputs/input_<TS>.txt\" --hpo-obo \"<HPO_OBO_PATH>\" --output \"{baseDir}/artifacts/phenosnap_outputs/phenotypes_<TS>.json\" --format json\n\nValidate:\n\nOutput file exists\nOutput file is non-empty\n\nIf validation fails:\n\nReturn stderr/stdout\nProvide troubleshooting steps (missing hp.obo, permission issues, dependency issues)"
      },
      {
        "title": "7) Respond to user",
        "body": "Return a concise confirmation:\n\nDetected content: “phenotypes” and/or “medications”\nInput file path (redacted)\nOutput file path (timestamped JSON)\nNote: no data uploaded; local-only\nAny warnings (e.g., missing hp.obo, PHI redaction/confirmation)"
      },
      {
        "title": "Troubleshooting",
        "body": "PhenoSnap folder exists but script missing: confirm {baseDir}/PhenoSnap/extract_phenotypes.py exists.\nNo git: zip fallback should run; ensure curl/PowerShell is available for download.\nUnzip fails: use Python zipfile fallback.\npip missing: ensurepip then get-pip.py steps above; consider installing Python with “pip” included.\nPermission errors installing packages: use a virtual environment:\n\npython3 -m venv .venv then activate and rerun skill.\n\n\nhp.obo missing: place file at {baseDir}/resources/hp.obo or set HPO_OBO_PATH."
      },
      {
        "title": "Example 1 (phenotypes + meds)",
        "body": "User:\n\n“Symptoms: developmental delay, seizures, ataxia. Meds: valproate 250 mg BID.”\n\nAction:\n\nWrite redacted input → run PhenoSnap → output phenotypes_<TS>.json"
      },
      {
        "title": "Example 2 (meds only)",
        "body": "User:\n\n“Current meds: metformin 500mg daily, atorvastatin 20 mg qhs.”\n\nAction:\n\nExtract medication entities/phenotype-related terms supported by PhenoSnap → output JSON"
      },
      {
        "title": "Example 3 (should NOT trigger)",
        "body": "User:\n\n“What is the Human Phenotype Ontology and how is it used?”\n\nAction:\n\nDo not run extraction; answer informationally outside this skill."
      }
    ],
    "body": "When to use\n\nUse this skill when the user provides their own:\n\nclinical phenotypes / symptoms / diagnoses (free text, bullet lists, clinical note-like text), and/or\ndrugs/medications (names, dosages, frequencies).\n\nExamples that should trigger:\n\n“Symptoms: ataxia, seizures, developmental delay. Meds: levetiracetam 500 mg BID.”\n“I’m taking metformin 500mg daily and have fatigue, polyuria, blurry vision.”\nWhen NOT to use\n\nDo not use this skill when:\n\nThe user asks general questions (e.g., “What is HPO?”, “What is a phenotype?”, “What is GLP-1?”).\nThe user provides text that is not personal clinical information (news articles, academic paragraphs, code, etc.).\nThe user asks you to interpret someone else’s private clinical record (PHI) without clear permission.\nSafety & privacy\nTreat user input as potentially sensitive clinical information.\nDo not upload user text or extracted results anywhere (this skill is local-only).\nBefore writing any input to disk, redact obvious identifiers:\nemails, phone numbers, street addresses\nMRN-like long numeric identifiers (e.g., 8+ digits)\nnames when clearly presented as “Name: …”\nIf the message appears to include highly identifying PHI (e.g., name + DOB + address, or name + MRN), pause and ask for confirmation to proceed, recommending the user remove identifiers first.\nRequirements / setup\nPython: python3 available on PATH.\nNetwork access (only for initial PhenoSnap download if missing).\nHPO OBO file:\nDefault expected path: {baseDir}/resources/hp.obo\nOverride path via environment variable: HPO_OBO_PATH\nThis skill does not auto-download hp.obo. You must supply it.\n\nRecommended (best practice):\n\nUse a virtual environment (venv/conda) before running this skill, because it may install Python packages via pip.\nInputs & outputs\nInput text file (redacted):\n{baseDir}/artifacts/phenosnap_inputs/input_<YYYYMMDD_HHMMSS>.txt\nOutput JSON file (timestamped):\n{baseDir}/artifacts/phenosnap_outputs/phenotypes_<YYYYMMDD_HHMMSS>.json\nThird-party download cache:\n{baseDir}/third_party/phenosnap_main.zip\n{baseDir}/third_party/get-pip.py\nDetection heuristic (activation check)\n\nTrigger if the user message contains any of:\n\nphenotype cues: symptom(s), phenotype(s), Dx, diagnosis, PMH, Hx, history of, or a symptom-like list\nmedication cues: meds, medications, taking, prescribed, plus patterns like:\ndosages: \\b\\d+(\\.\\d+)?\\s?(mg|mcg|g|ml|units)\\b\nfrequencies: qd, q.d., bid, b.i.d., tid, t.i.d., qhs, qAM, qPM, daily, weekly\n\nDo not trigger for purely informational questions without user-provided phenotype/medication content.\n\nProcedure\n0) Create required directories\n\nCreate if missing:\n\n{baseDir}/PhenoSnap/\n{baseDir}/artifacts/phenosnap_inputs/\n{baseDir}/artifacts/phenosnap_outputs/\n{baseDir}/resources/\n{baseDir}/third_party/\n1) Confirm / redact sensitive identifiers\nScan the user message for identifiers (email/phone/address/MRN/name fields).\nIf strongly identifying PHI is present (name + DOB/address/MRN):\nAsk the user to confirm proceeding and recommend removing identifiers.\nProduce a redacted version of the user text:\nReplace emails with [REDACTED_EMAIL]\nReplace phone numbers with [REDACTED_PHONE]\nReplace long numeric IDs with [REDACTED_ID]\nReplace address-like patterns with [REDACTED_ADDRESS]\nReplace explicit “Name: …” fields with Name: [REDACTED_NAME]\n2) Ensure PhenoSnap exists locally\n\nTarget location: {baseDir}/PhenoSnap/\n\n2A) If {baseDir}/PhenoSnap/ exists and contains extract_phenotypes.py\n\nProceed to dependency self-test.\n\n2B) If {baseDir}/PhenoSnap/ does NOT exist (or missing extract_phenotypes.py)\n\nPrefer git; fallback to zip.\n\nIf git is available\n\nRun:\n\ngit clone https://github.com/WGLab/PhenoSnap.git \"{baseDir}/PhenoSnap\"\nIf git is NOT available\n\nDownload zip:\n\nURL: https://github.com/WGLab/PhenoSnap/archive/refs/heads/main.zip\nDestination: {baseDir}/third_party/phenosnap_main.zip\n\nDownload method (pick first available):\n\nIf curl exists:\ncurl -L \"https://github.com/WGLab/PhenoSnap/archive/refs/heads/main.zip\" -o \"{baseDir}/third_party/phenosnap_main.zip\"\nElse on Windows PowerShell:\nInvoke-WebRequest -Uri \"https://github.com/WGLab/PhenoSnap/archive/refs/heads/main.zip\" -OutFile \"{baseDir}/third_party/phenosnap_main.zip\"\n\nUnzip (choose by OS/tools):\n\nWindows PowerShell:\nExpand-Archive -Path \"{baseDir}/third_party/phenosnap_main.zip\" -DestinationPath \"{baseDir}/third_party/phenosnap_unzip\" -Force\nmacOS/Linux with unzip:\nunzip -o \"{baseDir}/third_party/phenosnap_main.zip\" -d \"{baseDir}/third_party/phenosnap_unzip\"\n\nIf neither unzip nor Expand-Archive is available, use Python:\n\npython3 -c \"import zipfile; z=zipfile.ZipFile(r'{baseDir}/third_party/phenosnap_main.zip'); z.extractall(r'{baseDir}/third_party/phenosnap_unzip')\"\n\nThen rename/move the extracted folder to {baseDir}/PhenoSnap/:\n\nThe extracted folder is typically {baseDir}/third_party/phenosnap_unzip/PhenoSnap-main\nMove/rename to {baseDir}/PhenoSnap/\n\nFinal check:\n\nVerify {baseDir}/PhenoSnap/extract_phenotypes.py exists.\nIf not found, stop and report the directory listing of {baseDir}/PhenoSnap/ and {baseDir}/third_party/phenosnap_unzip/.\n3) Dependency self-test and auto-install\n\nRun from inside {baseDir}/PhenoSnap/.\n\n3A) Smoke test importability\n\nRun:\n\npython3 -c \"import importlib.util; spec=importlib.util.spec_from_file_location('extract_phenotypes','extract_phenotypes.py'); m=importlib.util.module_from_spec(spec); spec.loader.exec_module(m); print('ok')\"\n\nIf it prints ok, proceed.\n\n3B) If smoke test fails with missing module (ModuleNotFoundError / ImportError)\nStep 1: Ensure pip exists for python3\n\nCheck:\n\npython3 -m pip --version\n\nIf that fails, try:\n\npython3 -m ensurepip --upgrade\n\nCheck again:\n\npython3 -m pip --version\n\nIf still failing, bootstrap pip via get-pip.py:\n\nDownload https://bootstrap.pypa.io/get-pip.py to {baseDir}/third_party/get-pip.py\nwith curl:\ncurl -L \"https://bootstrap.pypa.io/get-pip.py\" -o \"{baseDir}/third_party/get-pip.py\"\nor PowerShell:\nInvoke-WebRequest -Uri \"https://bootstrap.pypa.io/get-pip.py\" -OutFile \"{baseDir}/third_party/get-pip.py\"\nInstall:\npython3 \"{baseDir}/third_party/get-pip.py\"\nVerify:\npython3 -m pip --version\n\nIf pip still cannot be used, stop and report the error output.\n\nStep 2: Install PhenoSnap dependencies\n\nFrom {baseDir}/PhenoSnap/, run:\n\npython3 -m pip install -r requirements.txt\nStep 3: Re-run smoke test once\n\nRe-run:\n\npython3 -c \"import importlib.util; spec=importlib.util.spec_from_file_location('extract_phenotypes','extract_phenotypes.py'); m=importlib.util.module_from_spec(spec); spec.loader.exec_module(m); print('ok')\"\n\nIf still failing, stop and return:\n\nthe missing module name (from error)\nthe command output\nrecommended fix (use a venv/conda env; verify python3/pip; rerun pip install)\n4) Prepare HPO OBO path\n\nResolve HPO OBO path in this order:\n\nIf env var HPO_OBO_PATH is set and file exists, use that.\nElse use {baseDir}/resources/hp.obo if it exists.\n\nIf the resolved file does not exist:\n\nStop and tell the user to place hp.obo at {baseDir}/resources/hp.obo or set HPO_OBO_PATH to its full path.\n5) Write input file (redacted)\nTimestamp format: YYYYMMDD_HHMMSS (local time).\nWrite redacted user text to:\n{baseDir}/artifacts/phenosnap_inputs/input_<TS>.txt\n6) Run extraction\n\nFrom {baseDir}/PhenoSnap/, run:\n\npython3 extract_phenotypes.py --input-file \"{baseDir}/artifacts/phenosnap_inputs/input_<TS>.txt\" --hpo-obo \"<HPO_OBO_PATH>\" --output \"{baseDir}/artifacts/phenosnap_outputs/phenotypes_<TS>.json\" --format json\n\nValidate:\n\nOutput file exists\nOutput file is non-empty\n\nIf validation fails:\n\nReturn stderr/stdout\nProvide troubleshooting steps (missing hp.obo, permission issues, dependency issues)\n7) Respond to user\n\nReturn a concise confirmation:\n\nDetected content: “phenotypes” and/or “medications”\nInput file path (redacted)\nOutput file path (timestamped JSON)\nNote: no data uploaded; local-only\nAny warnings (e.g., missing hp.obo, PHI redaction/confirmation)\nTroubleshooting\nPhenoSnap folder exists but script missing: confirm {baseDir}/PhenoSnap/extract_phenotypes.py exists.\nNo git: zip fallback should run; ensure curl/PowerShell is available for download.\nUnzip fails: use Python zipfile fallback.\npip missing: ensurepip then get-pip.py steps above; consider installing Python with “pip” included.\nPermission errors installing packages: use a virtual environment:\npython3 -m venv .venv then activate and rerun skill.\nhp.obo missing: place file at {baseDir}/resources/hp.obo or set HPO_OBO_PATH.\nExamples\nExample 1 (phenotypes + meds)\n\nUser:\n\n“Symptoms: developmental delay, seizures, ataxia. Meds: valproate 250 mg BID.”\n\nAction:\n\nWrite redacted input → run PhenoSnap → output phenotypes_<TS>.json\nExample 2 (meds only)\n\nUser:\n\n“Current meds: metformin 500mg daily, atorvastatin 20 mg qhs.”\n\nAction:\n\nExtract medication entities/phenotype-related terms supported by PhenoSnap → output JSON\nExample 3 (should NOT trigger)\n\nUser:\n\n“What is the Human Phenotype Ontology and how is it used?”\n\nAction:\n\nDo not run extraction; answer informationally outside this skill."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/kaichop/phenoskill",
    "publisherUrl": "https://clawhub.ai/kaichop/phenoskill",
    "owner": "kaichop",
    "version": "0.1.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/phenoskill",
    "downloadUrl": "https://openagent3.xyz/downloads/phenoskill",
    "agentUrl": "https://openagent3.xyz/skills/phenoskill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/phenoskill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/phenoskill/agent.md"
  }
}