{
  "schemaVersion": "1.0",
  "item": {
    "slug": "senior-data-scientist",
    "name": "Senior Data Scientist",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/alirezarezvani/senior-data-scientist",
    "canonicalUrl": "https://clawhub.ai/alirezarezvani/senior-data-scientist",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/senior-data-scientist",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=senior-data-scientist",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/experiment_design_frameworks.md",
      "references/feature_engineering_patterns.md",
      "references/statistical_methods_advanced.md",
      "scripts/experiment_designer.py",
      "scripts/feature_engineering_pipeline.py"
    ],
    "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/senior-data-scientist"
    },
    "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/senior-data-scientist",
    "agentPageUrl": "https://openagent3.xyz/skills/senior-data-scientist/agent",
    "manifestUrl": "https://openagent3.xyz/skills/senior-data-scientist/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/senior-data-scientist/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": "Senior Data Scientist",
        "body": "World-class senior data scientist skill for production-grade AI/ML/Data systems."
      },
      {
        "title": "1. Design an A/B Test",
        "body": "import numpy as np\nfrom scipy import stats\n\ndef calculate_sample_size(baseline_rate, mde, alpha=0.05, power=0.8):\n    \"\"\"\n    Calculate required sample size per variant.\n    baseline_rate: current conversion rate (e.g. 0.10)\n    mde: minimum detectable effect (relative, e.g. 0.05 = 5% lift)\n    \"\"\"\n    p1 = baseline_rate\n    p2 = baseline_rate * (1 + mde)\n    effect_size = abs(p2 - p1) / np.sqrt((p1 * (1 - p1) + p2 * (1 - p2)) / 2)\n    z_alpha = stats.norm.ppf(1 - alpha / 2)\n    z_beta = stats.norm.ppf(power)\n    n = ((z_alpha + z_beta) / effect_size) ** 2\n    return int(np.ceil(n))\n\ndef analyze_experiment(control, treatment, alpha=0.05):\n    \"\"\"\n    Run two-proportion z-test and return structured results.\n    control/treatment: dicts with 'conversions' and 'visitors'.\n    \"\"\"\n    p_c = control[\"conversions\"] / control[\"visitors\"]\n    p_t = treatment[\"conversions\"] / treatment[\"visitors\"]\n    pooled = (control[\"conversions\"] + treatment[\"conversions\"]) / (control[\"visitors\"] + treatment[\"visitors\"])\n    se = np.sqrt(pooled * (1 - pooled) * (1 / control[\"visitors\"] + 1 / treatment[\"visitors\"]))\n    z = (p_t - p_c) / se\n    p_value = 2 * (1 - stats.norm.cdf(abs(z)))\n    ci_low = (p_t - p_c) - stats.norm.ppf(1 - alpha / 2) * se\n    ci_high = (p_t - p_c) + stats.norm.ppf(1 - alpha / 2) * se\n    return {\n        \"lift\": (p_t - p_c) / p_c,\n        \"p_value\": p_value,\n        \"significant\": p_value < alpha,\n        \"ci_95\": (ci_low, ci_high),\n    }\n\n# --- Experiment checklist ---\n# 1. Define ONE primary metric and pre-register secondary metrics.\n# 2. Calculate sample size BEFORE starting: calculate_sample_size(0.10, 0.05)\n# 3. Randomise at the user (not session) level to avoid leakage.\n# 4. Run for at least 1 full business cycle (typically 2 weeks).\n# 5. Check for sample ratio mismatch: abs(n_control - n_treatment) / expected < 0.01\n# 6. Analyze with analyze_experiment() and report lift + CI, not just p-value.\n# 7. Apply Bonferroni correction if testing multiple metrics: alpha / n_metrics"
      },
      {
        "title": "2. Build a Feature Engineering Pipeline",
        "body": "import pandas as pd\nimport numpy as np\nfrom sklearn.pipeline import Pipeline\nfrom sklearn.preprocessing import StandardScaler, OneHotEncoder\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.compose import ColumnTransformer\n\ndef build_feature_pipeline(numeric_cols, categorical_cols, date_cols=None):\n    \"\"\"\n    Returns a fitted-ready ColumnTransformer for structured tabular data.\n    \"\"\"\n    numeric_pipeline = Pipeline([\n        (\"impute\", SimpleImputer(strategy=\"median\")),\n        (\"scale\",  StandardScaler()),\n    ])\n    categorical_pipeline = Pipeline([\n        (\"impute\", SimpleImputer(strategy=\"most_frequent\")),\n        (\"encode\", OneHotEncoder(handle_unknown=\"ignore\", sparse_output=False)),\n    ])\n    transformers = [\n        (\"num\", numeric_pipeline, numeric_cols),\n        (\"cat\", categorical_pipeline, categorical_cols),\n    ]\n    return ColumnTransformer(transformers, remainder=\"drop\")\n\ndef add_time_features(df, date_col):\n    \"\"\"Extract cyclical and lag features from a datetime column.\"\"\"\n    df = df.copy()\n    df[date_col] = pd.to_datetime(df[date_col])\n    df[\"dow_sin\"] = np.sin(2 * np.pi * df[date_col].dt.dayofweek / 7)\n    df[\"dow_cos\"] = np.cos(2 * np.pi * df[date_col].dt.dayofweek / 7)\n    df[\"month_sin\"] = np.sin(2 * np.pi * df[date_col].dt.month / 12)\n    df[\"month_cos\"] = np.cos(2 * np.pi * df[date_col].dt.month / 12)\n    df[\"is_weekend\"] = (df[date_col].dt.dayofweek >= 5).astype(int)\n    return df\n\n# --- Feature engineering checklist ---\n# 1. Never fit transformers on the full dataset — fit on train, transform test.\n# 2. Log-transform right-skewed numeric features before scaling.\n# 3. For high-cardinality categoricals (>50 levels), use target encoding or embeddings.\n# 4. Generate lag/rolling features BEFORE the train/test split to avoid leakage.\n# 5. Document each feature's business meaning alongside its code."
      },
      {
        "title": "3. Train, Evaluate, and Select a Prediction Model",
        "body": "from sklearn.model_selection import StratifiedKFold, cross_validate\nfrom sklearn.metrics import make_scorer, roc_auc_score, average_precision_score\nimport xgboost as xgb\nimport mlflow\n\nSCORERS = {\n    \"roc_auc\":  make_scorer(roc_auc_score, needs_proba=True),\n    \"avg_prec\": make_scorer(average_precision_score, needs_proba=True),\n}\n\ndef evaluate_model(model, X, y, cv=5):\n    \"\"\"\n    Cross-validate and return mean ± std for each scorer.\n    Use StratifiedKFold for classification to preserve class balance.\n    \"\"\"\n    cv_results = cross_validate(\n        model, X, y,\n        cv=StratifiedKFold(n_splits=cv, shuffle=True, random_state=42),\n        scoring=SCORERS,\n        return_train_score=True,\n    )\n    summary = {}\n    for metric in SCORERS:\n        test_scores = cv_results[f\"test_{metric}\"]\n        summary[metric] = {\"mean\": test_scores.mean(), \"std\": test_scores.std()}\n        # Flag overfitting: large gap between train and test score\n        train_mean = cv_results[f\"train_{metric}\"].mean()\n        summary[metric][\"overfit_gap\"] = train_mean - test_scores.mean()\n    return summary\n\ndef train_and_log(model, X_train, y_train, X_test, y_test, run_name):\n    \"\"\"Train model and log all artefacts to MLflow.\"\"\"\n    with mlflow.start_run(run_name=run_name):\n        model.fit(X_train, y_train)\n        proba = model.predict_proba(X_test)[:, 1]\n        metrics = {\n            \"roc_auc\":  roc_auc_score(y_test, proba),\n            \"avg_prec\": average_precision_score(y_test, proba),\n        }\n        mlflow.log_params(model.get_params())\n        mlflow.log_metrics(metrics)\n        mlflow.sklearn.log_model(model, \"model\")\n        return metrics\n\n# --- Model evaluation checklist ---\n# 1. Always report AUC-PR alongside AUC-ROC for imbalanced datasets.\n# 2. Check overfit_gap > 0.05 as a warning sign of overfitting.\n# 3. Calibrate probabilities (Platt scaling / isotonic) before production use.\n# 4. Compute SHAP values to validate feature importance makes business sense.\n# 5. Run a baseline (e.g. DummyClassifier) and verify the model beats it.\n# 6. Log every run to MLflow — never rely on notebook output for comparison."
      },
      {
        "title": "4. Causal Inference: Difference-in-Differences",
        "body": "import statsmodels.formula.api as smf\n\ndef diff_in_diff(df, outcome, treatment_col, post_col, controls=None):\n    \"\"\"\n    Estimate ATT via OLS DiD with optional covariates.\n    df must have: outcome, treatment_col (0/1), post_col (0/1).\n    Returns the interaction coefficient (treatment × post) and its p-value.\n    \"\"\"\n    covariates = \" + \".join(controls) if controls else \"\"\n    formula = (\n        f\"{outcome} ~ {treatment_col} * {post_col}\"\n        + (f\" + {covariates}\" if covariates else \"\")\n    )\n    result = smf.ols(formula, data=df).fit(cov_type=\"HC3\")\n    interaction = f\"{treatment_col}:{post_col}\"\n    return {\n        \"att\":     result.params[interaction],\n        \"p_value\": result.pvalues[interaction],\n        \"ci_95\":   result.conf_int().loc[interaction].tolist(),\n        \"summary\": result.summary(),\n    }\n\n# --- Causal inference checklist ---\n# 1. Validate parallel trends in pre-period before trusting DiD estimates.\n# 2. Use HC3 robust standard errors to handle heteroskedasticity.\n# 3. For panel data, cluster SEs at the unit level (add groups= param to fit).\n# 4. Consider propensity score matching if groups differ at baseline.\n# 5. Report the ATT with confidence interval, not just statistical significance."
      },
      {
        "title": "Reference Documentation",
        "body": "Statistical Methods: references/statistical_methods_advanced.md\nExperiment Design Frameworks: references/experiment_design_frameworks.md\nFeature Engineering Patterns: references/feature_engineering_patterns.md"
      },
      {
        "title": "Common Commands",
        "body": "# Testing & linting\npython -m pytest tests/ -v --cov=src/\npython -m black src/ && python -m pylint src/\n\n# Training & evaluation\npython scripts/train.py --config prod.yaml\npython scripts/evaluate.py --model best.pth\n\n# Deployment\ndocker build -t service:v1 .\nkubectl apply -f k8s/\nhelm upgrade service ./charts/\n\n# Monitoring & health\nkubectl logs -f deployment/service\npython scripts/health_check.py"
      }
    ],
    "body": "Senior Data Scientist\n\nWorld-class senior data scientist skill for production-grade AI/ML/Data systems.\n\nCore Workflows\n1. Design an A/B Test\nimport numpy as np\nfrom scipy import stats\n\ndef calculate_sample_size(baseline_rate, mde, alpha=0.05, power=0.8):\n    \"\"\"\n    Calculate required sample size per variant.\n    baseline_rate: current conversion rate (e.g. 0.10)\n    mde: minimum detectable effect (relative, e.g. 0.05 = 5% lift)\n    \"\"\"\n    p1 = baseline_rate\n    p2 = baseline_rate * (1 + mde)\n    effect_size = abs(p2 - p1) / np.sqrt((p1 * (1 - p1) + p2 * (1 - p2)) / 2)\n    z_alpha = stats.norm.ppf(1 - alpha / 2)\n    z_beta = stats.norm.ppf(power)\n    n = ((z_alpha + z_beta) / effect_size) ** 2\n    return int(np.ceil(n))\n\ndef analyze_experiment(control, treatment, alpha=0.05):\n    \"\"\"\n    Run two-proportion z-test and return structured results.\n    control/treatment: dicts with 'conversions' and 'visitors'.\n    \"\"\"\n    p_c = control[\"conversions\"] / control[\"visitors\"]\n    p_t = treatment[\"conversions\"] / treatment[\"visitors\"]\n    pooled = (control[\"conversions\"] + treatment[\"conversions\"]) / (control[\"visitors\"] + treatment[\"visitors\"])\n    se = np.sqrt(pooled * (1 - pooled) * (1 / control[\"visitors\"] + 1 / treatment[\"visitors\"]))\n    z = (p_t - p_c) / se\n    p_value = 2 * (1 - stats.norm.cdf(abs(z)))\n    ci_low = (p_t - p_c) - stats.norm.ppf(1 - alpha / 2) * se\n    ci_high = (p_t - p_c) + stats.norm.ppf(1 - alpha / 2) * se\n    return {\n        \"lift\": (p_t - p_c) / p_c,\n        \"p_value\": p_value,\n        \"significant\": p_value < alpha,\n        \"ci_95\": (ci_low, ci_high),\n    }\n\n# --- Experiment checklist ---\n# 1. Define ONE primary metric and pre-register secondary metrics.\n# 2. Calculate sample size BEFORE starting: calculate_sample_size(0.10, 0.05)\n# 3. Randomise at the user (not session) level to avoid leakage.\n# 4. Run for at least 1 full business cycle (typically 2 weeks).\n# 5. Check for sample ratio mismatch: abs(n_control - n_treatment) / expected < 0.01\n# 6. Analyze with analyze_experiment() and report lift + CI, not just p-value.\n# 7. Apply Bonferroni correction if testing multiple metrics: alpha / n_metrics\n\n2. Build a Feature Engineering Pipeline\nimport pandas as pd\nimport numpy as np\nfrom sklearn.pipeline import Pipeline\nfrom sklearn.preprocessing import StandardScaler, OneHotEncoder\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.compose import ColumnTransformer\n\ndef build_feature_pipeline(numeric_cols, categorical_cols, date_cols=None):\n    \"\"\"\n    Returns a fitted-ready ColumnTransformer for structured tabular data.\n    \"\"\"\n    numeric_pipeline = Pipeline([\n        (\"impute\", SimpleImputer(strategy=\"median\")),\n        (\"scale\",  StandardScaler()),\n    ])\n    categorical_pipeline = Pipeline([\n        (\"impute\", SimpleImputer(strategy=\"most_frequent\")),\n        (\"encode\", OneHotEncoder(handle_unknown=\"ignore\", sparse_output=False)),\n    ])\n    transformers = [\n        (\"num\", numeric_pipeline, numeric_cols),\n        (\"cat\", categorical_pipeline, categorical_cols),\n    ]\n    return ColumnTransformer(transformers, remainder=\"drop\")\n\ndef add_time_features(df, date_col):\n    \"\"\"Extract cyclical and lag features from a datetime column.\"\"\"\n    df = df.copy()\n    df[date_col] = pd.to_datetime(df[date_col])\n    df[\"dow_sin\"] = np.sin(2 * np.pi * df[date_col].dt.dayofweek / 7)\n    df[\"dow_cos\"] = np.cos(2 * np.pi * df[date_col].dt.dayofweek / 7)\n    df[\"month_sin\"] = np.sin(2 * np.pi * df[date_col].dt.month / 12)\n    df[\"month_cos\"] = np.cos(2 * np.pi * df[date_col].dt.month / 12)\n    df[\"is_weekend\"] = (df[date_col].dt.dayofweek >= 5).astype(int)\n    return df\n\n# --- Feature engineering checklist ---\n# 1. Never fit transformers on the full dataset — fit on train, transform test.\n# 2. Log-transform right-skewed numeric features before scaling.\n# 3. For high-cardinality categoricals (>50 levels), use target encoding or embeddings.\n# 4. Generate lag/rolling features BEFORE the train/test split to avoid leakage.\n# 5. Document each feature's business meaning alongside its code.\n\n3. Train, Evaluate, and Select a Prediction Model\nfrom sklearn.model_selection import StratifiedKFold, cross_validate\nfrom sklearn.metrics import make_scorer, roc_auc_score, average_precision_score\nimport xgboost as xgb\nimport mlflow\n\nSCORERS = {\n    \"roc_auc\":  make_scorer(roc_auc_score, needs_proba=True),\n    \"avg_prec\": make_scorer(average_precision_score, needs_proba=True),\n}\n\ndef evaluate_model(model, X, y, cv=5):\n    \"\"\"\n    Cross-validate and return mean ± std for each scorer.\n    Use StratifiedKFold for classification to preserve class balance.\n    \"\"\"\n    cv_results = cross_validate(\n        model, X, y,\n        cv=StratifiedKFold(n_splits=cv, shuffle=True, random_state=42),\n        scoring=SCORERS,\n        return_train_score=True,\n    )\n    summary = {}\n    for metric in SCORERS:\n        test_scores = cv_results[f\"test_{metric}\"]\n        summary[metric] = {\"mean\": test_scores.mean(), \"std\": test_scores.std()}\n        # Flag overfitting: large gap between train and test score\n        train_mean = cv_results[f\"train_{metric}\"].mean()\n        summary[metric][\"overfit_gap\"] = train_mean - test_scores.mean()\n    return summary\n\ndef train_and_log(model, X_train, y_train, X_test, y_test, run_name):\n    \"\"\"Train model and log all artefacts to MLflow.\"\"\"\n    with mlflow.start_run(run_name=run_name):\n        model.fit(X_train, y_train)\n        proba = model.predict_proba(X_test)[:, 1]\n        metrics = {\n            \"roc_auc\":  roc_auc_score(y_test, proba),\n            \"avg_prec\": average_precision_score(y_test, proba),\n        }\n        mlflow.log_params(model.get_params())\n        mlflow.log_metrics(metrics)\n        mlflow.sklearn.log_model(model, \"model\")\n        return metrics\n\n# --- Model evaluation checklist ---\n# 1. Always report AUC-PR alongside AUC-ROC for imbalanced datasets.\n# 2. Check overfit_gap > 0.05 as a warning sign of overfitting.\n# 3. Calibrate probabilities (Platt scaling / isotonic) before production use.\n# 4. Compute SHAP values to validate feature importance makes business sense.\n# 5. Run a baseline (e.g. DummyClassifier) and verify the model beats it.\n# 6. Log every run to MLflow — never rely on notebook output for comparison.\n\n4. Causal Inference: Difference-in-Differences\nimport statsmodels.formula.api as smf\n\ndef diff_in_diff(df, outcome, treatment_col, post_col, controls=None):\n    \"\"\"\n    Estimate ATT via OLS DiD with optional covariates.\n    df must have: outcome, treatment_col (0/1), post_col (0/1).\n    Returns the interaction coefficient (treatment × post) and its p-value.\n    \"\"\"\n    covariates = \" + \".join(controls) if controls else \"\"\n    formula = (\n        f\"{outcome} ~ {treatment_col} * {post_col}\"\n        + (f\" + {covariates}\" if covariates else \"\")\n    )\n    result = smf.ols(formula, data=df).fit(cov_type=\"HC3\")\n    interaction = f\"{treatment_col}:{post_col}\"\n    return {\n        \"att\":     result.params[interaction],\n        \"p_value\": result.pvalues[interaction],\n        \"ci_95\":   result.conf_int().loc[interaction].tolist(),\n        \"summary\": result.summary(),\n    }\n\n# --- Causal inference checklist ---\n# 1. Validate parallel trends in pre-period before trusting DiD estimates.\n# 2. Use HC3 robust standard errors to handle heteroskedasticity.\n# 3. For panel data, cluster SEs at the unit level (add groups= param to fit).\n# 4. Consider propensity score matching if groups differ at baseline.\n# 5. Report the ATT with confidence interval, not just statistical significance.\n\nReference Documentation\nStatistical Methods: references/statistical_methods_advanced.md\nExperiment Design Frameworks: references/experiment_design_frameworks.md\nFeature Engineering Patterns: references/feature_engineering_patterns.md\nCommon Commands\n# Testing & linting\npython -m pytest tests/ -v --cov=src/\npython -m black src/ && python -m pylint src/\n\n# Training & evaluation\npython scripts/train.py --config prod.yaml\npython scripts/evaluate.py --model best.pth\n\n# Deployment\ndocker build -t service:v1 .\nkubectl apply -f k8s/\nhelm upgrade service ./charts/\n\n# Monitoring & health\nkubectl logs -f deployment/service\npython scripts/health_check.py"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/alirezarezvani/senior-data-scientist",
    "publisherUrl": "https://clawhub.ai/alirezarezvani/senior-data-scientist",
    "owner": "alirezarezvani",
    "version": "2.1.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/senior-data-scientist",
    "downloadUrl": "https://openagent3.xyz/downloads/senior-data-scientist",
    "agentUrl": "https://openagent3.xyz/skills/senior-data-scientist/agent",
    "manifestUrl": "https://openagent3.xyz/skills/senior-data-scientist/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/senior-data-scientist/agent.md"
  }
}