{"owner":"langchain-ai","repo":"deepagents","hasSkills":true,"totalSkillsCount":46,"totalTokensCount":20762,"categories":["anthropic-skill","root-instruction"],"hasMcp":false,"mcpConfig":null,"found":["examples/deploy-gtm-agent/skills/competitor-analysis/SKILL.md","examples/deploy-content-writer/skills/social-media/SKILL.md","examples/nvidia_deep_agent/skills/cudf-analytics/SKILL.md","examples/nvidia_deep_agent/skills/cuml-machine-learning/SKILL.md","examples/nvidia_deep_agent/skills/data-visualization/SKILL.md","examples/deploy-coding-agent/skills/planning/SKILL.md","examples/deploy-content-writer/skills/blog-post/SKILL.md","examples/deploy-coding-agent/skills/coding-prefs/SKILL.md","examples/content-builder-agent/skills/social-media/SKILL.md","examples/nvidia_deep_agent/skills/gpu-document-processing/SKILL.md","examples/content-builder-agent/skills/blog-post/SKILL.md","examples/deploy-coding-agent/skills/code-review/SKILL.md","examples/repl_swarm/skills/swarm/SKILL.md","examples/text-to-sql-agent/skills/schema-exploration/SKILL.md","examples/text-to-sql-agent/skills/query-writing/SKILL.md","libs/code/deepagents_code/built_in_skills/remember/SKILL.md","libs/code/deepagents_code/built_in_skills/skill-creator/SKILL.md","libs/code/examples/skills/web-research/SKILL.md","libs/code/examples/skills/skill-creator/SKILL.md","libs/code/examples/skills/langgraph-docs/SKILL.md","libs/code/examples/skills/arxiv-search/SKILL.md","libs/cli/examples/skills/web-research/SKILL.md","libs/cli/examples/skills/skill-creator/SKILL.md","libs/cli/examples/skills/langgraph-docs/SKILL.md","libs/cli/examples/skills/arxiv-search/SKILL.md","examples/deploy-gtm-agent/subagents/market-researcher/skills/analyze-market/SKILL.md","libs/cli/examples/deploy-content-writer/skills/social-media/SKILL.md","libs/cli/examples/deploy-content-writer/skills/blog-post/SKILL.md","libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/SKILL.md","libs/cli/tests/unit_tests/deploy/fixtures/projects/subagent_with_local_skills/subagents/researcher/skills/note/SKILL.md","AGENTS.md","libs/evals/AGENTS.md","libs/evals/CONTRIBUTING.md","libs/evals/EVAL_CATALOG.md","libs/evals/MODEL_GROUPS.md","libs/evals/README.md","libs/evals/deepagents_evals/categories.json","libs/evals/tests/evals/README.md","libs/evals/tests/evals/fixtures/summarization_seed_messages.json","libs/evals/tests/evals/data/benchmark_samples/bfcl_v3_final.json","libs/evals/tests/evals/data/benchmark_samples/frames_final.json","libs/evals/tests/evals/data/benchmark_samples/nexus_final.json","libs/evals/tests/evals/tau2_airline/data/db.json","libs/evals/tests/evals/tau2_airline/data/policy.md","libs/evals/tests/evals/tau2_airline/data/tasks.json","libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/examples.md"],"skills":{"examples/deploy-gtm-agent/skills/competitor-analysis/SKILL.md":"---\nname: competitor-analysis\ndescription: >-\n  Analyze competitors in a given market segment.\n  Trigger on: competitive landscape, competitor analysis,\n  market comparison, competitive positioning.\n---\n\n# Competitor Analysis\n\nWhen asked to analyze competitors:\n\n1. Identify the top 3-5 competitors in the target segment\n2. For each competitor, assess:\n   - Product positioning and key differentiators\n   - Pricing model and tiers\n   - Target audience and market share estimates\n   - Strengths and weaknesses\n3. Create a comparison matrix\n4. Identify gaps and opportunities for differentiation\n","examples/deploy-content-writer/skills/social-media/SKILL.md":"---\nname: social-media\ndescription: Create social media content including Twitter/X threads, LinkedIn posts, and short-form updates.\n---\n\n# Social Media Content Skill\n\n## Formats\n\n### Twitter/X Thread\n- Hook tweet: compelling question or bold statement (< 280 chars)\n- 3-7 follow-up tweets expanding on the topic\n- Final tweet with CTA or key takeaway\n- Use line breaks for readability\n\n### LinkedIn Post\n- Opening hook (first 2 lines visible before \"see more\")\n- 3-5 short paragraphs with key insights\n- End with a question to drive engagement\n- 1,300 character target length\n\n### Short-form Update\n- Single paragraph announcement or insight\n- Link to longer content if available\n- Under 280 characters for cross-platform use\n\n## Guidelines\n\n- Write in first person for LinkedIn, third person for company accounts\n- Include 2-3 relevant hashtags (not more)\n- Adapt tone: LinkedIn is more professional, Twitter is more conversational\n- Every post should provide standalone value — don't just tease\n- Use concrete numbers and results over vague claims\n\n## Output\n\nSave content to `social/<platform>/<slug>.md` (e.g., `social/twitter/ai-agents-thread.md`).\n","examples/nvidia_deep_agent/skills/cudf-analytics/SKILL.md":"---\nname: cudf-analytics\ndescription: Use for GPU-accelerated data analysis on datasets, CSVs, or tabular data using NVIDIA cuDF. Triggers when tasks involve groupby aggregations, statistical summaries, anomaly detection, or large-scale data profiling.\n---\n\n# cuDF Analytics Skill\n\nGPU-accelerated data analysis using NVIDIA RAPIDS cuDF. cuDF provides a pandas-like API that runs on NVIDIA GPUs, enabling massive speedups on large datasets.\n\n## When to Use This Skill\n\nUse this skill when:\n- Analyzing CSV files, datasets, or tabular data\n- Computing statistical summaries (mean, median, std, quartiles)\n- Performing groupby aggregations\n- Detecting anomalies or outliers in data\n- Profiling datasets with millions of rows\n- Computing correlation matrices\n\n## Initialization (REQUIRED)\n\nAlways start every script with this boilerplate. It tests actual GPU operations, not just import.\n\n```python\nimport pandas as pd\n\ntry:\n    import cudf\n    # Smoke-test: verify GPU compute AND host transfer both work\n    _test = cudf.Series([1, 2, 3])\n    assert _test.sum() == 6\n    assert _test.to_pandas().tolist() == [1, 2, 3]\n    GPU = True\nexcept Exception as e:\n    print(f\"[GPU] cudf unavailable, falling back to pandas: {e}\")\n    GPU = False\n\ndef read_csv(path):\n    return cudf.read_csv(path) if GPU else pd.read_csv(path)\n\ndef to_pd(df):\n    \"\"\"Convert cuDF DataFrame/Series to pandas. Use this instead of .to_pandas() directly.\"\"\"\n    if not GPU:\n        return df\n    try:\n        return df.to_pandas()\n    except Exception as e:\n        print(f\"[GPU] .to_pandas() failed, using Arrow fallback: {e}\")\n        return df.to_arrow().to_pandas()\n```\n\n## Quick Reference\n\ncuDF mirrors the pandas API. Common operations:\n\n### Read Data\n```python\ndf = read_csv(\"data.csv\")\n```\n\n### Statistical Summary\n```python\n# Use to_pd() when you need pandas output\nsummary = to_pd(df[[\"value\", \"score\"]].describe())\n\n# Scalar values work directly with float()\nmean_val = float(df[\"value\"].mean())\nq1 = float(df[\"value\"].quantile(0.25))\n\n# Correlation\ncorr = float(df[\"value\"].corr(df[\"score\"]))\n```\n\n### Groupby Aggregation\n```python\nresult = df.groupby(\"category\").agg({\n    \"revenue\": [\"sum\", \"mean\", \"count\"],\n    \"quantity\": [\"sum\", \"mean\"],\n})\nresult_pd = to_pd(result)\n```\n\n### Anomaly Detection (IQR Method)\n```python\ncol = \"value\"\nQ1 = float(df[col].quantile(0.25))\nQ3 = float(df[col].quantile(0.75))\nIQR = Q3 - Q1\nlower = Q1 - 1.5 * IQR\nupper = Q3 + 1.5 * IQR\noutliers = to_pd(df[(df[col] < lower) | (df[col] > upper)])\n```\n\n### Anomaly Detection (Z-Score Method)\n```python\nmean = float(df[col].mean())\nstd = float(df[col].std())\ndf[\"z_score\"] = (df[col] - mean) / std\nanomalies = to_pd(df[df[\"z_score\"].abs() > 3])\n```\n\n### Filtering and Selection\n```python\n# Filter rows\nfiltered = df[df[\"status\"] == \"active\"]\n\n# Select columns\nsubset = df[[\"name\", \"revenue\", \"date\"]]\n\n# Sort\nsorted_df = df.sort_values(\"revenue\", ascending=False)\n\n# Convert to pandas for final output / iteration\nresult_pd = to_pd(sorted_df)\n```\n\n## Data Type Requirements\n\ncuDF requires explicit type specification for optimal performance:\n- Use `float32` or `float64` for numeric data\n- Use `int32` or `int64` for integer data\n- String columns use cuDF's string dtype automatically\n\n## Output Guidelines\n\nWhen reporting analysis results:\n- Include dataset dimensions (rows x columns)\n- Show key statistics in formatted tables\n- Highlight notable patterns, trends, or anomalies\n- Provide both summary statistics and specific examples\n- Note any data quality issues (missing values, outliers)\n","examples/nvidia_deep_agent/skills/cuml-machine-learning/SKILL.md":"---\nname: cuml-machine-learning\ndescription: Use for GPU-accelerated machine learning on tabular data using NVIDIA cuML. Triggers when tasks involve classification, regression, clustering, dimensionality reduction, or model training on datasets.\n---\n\n# cuML Machine Learning Skill\n\nGPU-accelerated machine learning using NVIDIA RAPIDS cuML. cuML provides a scikit-learn-compatible API that runs on NVIDIA GPUs, enabling massive speedups on large datasets.\n\n## When to Use This Skill\n\nUse this skill when:\n- Training classification models (predict categories, detect fraud, classify text)\n- Training regression models (forecast values, predict prices, estimate quantities)\n- Clustering data (segment customers, group documents, find patterns)\n- Dimensionality reduction (visualize high-dimensional data, compress features)\n- Preprocessing and feature engineering on large datasets\n- Any ML task on datasets with 10K+ rows where GPU acceleration helps\n\n## Initialization (REQUIRED)\n\nAlways start every script with this boilerplate. It tests actual GPU ML operations.\n\n```python\nimport pandas as pd\nimport numpy as np\n\ntry:\n    import cudf\n    import cuml\n    # Smoke-test: verify GPU ML works end-to-end\n    _test_data = cudf.DataFrame({'a': [1.0, 2.0, 3.0, 4.0], 'b': [5.0, 6.0, 7.0, 8.0]})\n    _km = cuml.cluster.KMeans(n_clusters=2, n_init=1, random_state=42)\n    _km.fit(_test_data)\n    assert len(_km.labels_) == 4\n    GPU = True\nexcept Exception as e:\n    print(f\"[GPU] cuml unavailable, falling back to scikit-learn: {e}\")\n    GPU = False\n\ndef read_csv(path):\n    return cudf.read_csv(path) if GPU else pd.read_csv(path)\n\ndef to_pd(df):\n    \"\"\"Convert cuML/cuDF output to pandas. Use this instead of .to_pandas() directly.\"\"\"\n    if not GPU:\n        return df\n    try:\n        return df.to_pandas()\n    except Exception as e:\n        print(f\"[GPU] .to_pandas() failed, using Arrow fallback: {e}\")\n        return df.to_arrow().to_pandas()\n```\n\n## Import Patterns\n\n```python\n# GPU mode\nif GPU:\n    from cuml.cluster import KMeans, DBSCAN, HDBSCAN\n    from cuml.ensemble import RandomForestClassifier, RandomForestRegressor\n    from cuml.linear_model import LinearRegression, Ridge, Lasso, LogisticRegression\n    from cuml.neighbors import KNeighborsClassifier, KNeighborsRegressor\n    from cuml.svm import SVC, SVR\n    from cuml.decomposition import PCA, TruncatedSVD\n    from cuml.manifold import UMAP, TSNE\n    from cuml.preprocessing import StandardScaler, MinMaxScaler, LabelEncoder\n    from cuml.model_selection import train_test_split\n    from cuml.metrics import accuracy_score, r2_score, mean_squared_error\n# CPU fallback\nelse:\n    from sklearn.cluster import KMeans, DBSCAN, HDBSCAN\n    from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor\n    from sklearn.linear_model import LinearRegression, Ridge, Lasso, LogisticRegression\n    from sklearn.neighbors import KNeighborsClassifier, KNeighborsRegressor\n    from sklearn.svm import SVC, SVR\n    from sklearn.decomposition import PCA, TruncatedSVD\n    from sklearn.manifold import TSNE\n    from sklearn.preprocessing import StandardScaler, MinMaxScaler, LabelEncoder\n    from sklearn.model_selection import train_test_split\n    from sklearn.metrics import accuracy_score, r2_score, mean_squared_error\n    # UMAP not in sklearn — skip or pip install umap-learn\n```\n\n## Quick Reference\n\n### Train/Test Split (Start Here)\n\n```python\nX = df[[\"feature1\", \"feature2\", \"feature3\"]].astype(\"float32\")\ny = df[\"target\"]\n\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n```\n\n### Classification\n\n```python\nmodel = RandomForestClassifier(n_estimators=100, max_depth=10, random_state=42)\nmodel.fit(X_train, y_train)\n\npredictions = model.predict(X_test)\naccuracy = float(accuracy_score(to_pd(y_test), to_pd(predictions)))\nprint(f\"Accuracy: {accuracy:.4f}\")\n\n# Feature importances (tree models only)\nimportances = to_pd(model.feature_importances_)\nfor name, imp in zip(feature_names, importances):\n    print(f\"  {name}: {imp:.4f}\")\n```\n\n### Regression\n\n```python\nmodel = Ridge(alpha=1.0)\nmodel.fit(X_train, y_train)\n\npredictions = model.predict(X_test)\nr2 = float(r2_score(to_pd(y_test), to_pd(predictions)))\nmse = float(mean_squared_error(to_pd(y_test), to_pd(predictions)))\nprint(f\"R² Score: {r2:.4f}\")\nprint(f\"MSE: {mse:.4f}\")\n\n# Coefficients\ncoeffs = to_pd(model.coef_)\nprint(f\"Intercept: {float(model.intercept_):.4f}\")\n```\n\n### Clustering (KMeans)\n\n```python\nX = df[[\"feature1\", \"feature2\"]].astype(\"float32\")\n\nmodel = KMeans(n_clusters=4, n_init=10, random_state=42)\nmodel.fit(X)\n\nlabels = to_pd(model.labels_)\ncentroids = to_pd(model.cluster_centers_)\ninertia = float(model.inertia_)\n\nprint(f\"Inertia: {inertia:.2f}\")\nprint(f\"Cluster sizes: {labels.value_counts().sort_index().to_dict()}\")\nprint(f\"Centroids:\\n{centroids}\")\n```\n\n### Dimensionality Reduction (PCA)\n\n```python\nscaler = StandardScaler()\nX_scaled = scaler.fit_transform(X.astype(\"float32\"))\n\npca = PCA(n_components=3)\nX_reduced = pca.fit_transform(X_scaled)\n\nvariance_ratio = to_pd(pca.explained_variance_ratio_)\nprint(f\"Explained variance: {[f'{v:.4f}' for v in variance_ratio]}\")\nprint(f\"Total explained: {float(sum(variance_ratio)):.4f}\")\n```\n\n### Dimensionality Reduction (UMAP — GPU only)\n\n```python\nif GPU:\n    reducer = UMAP(n_components=2, n_neighbors=15, min_dist=0.1, random_state=42)\n    embedding = to_pd(reducer.fit_transform(X_scaled))\n    print(f\"UMAP embedding shape: {embedding.shape}\")\n```\n\n### Preprocessing\n\n```python\n# Scale numeric features\nscaler = StandardScaler()\nX_scaled = scaler.fit_transform(X.astype(\"float32\"))\n\n# Encode categorical columns\nle = LabelEncoder()\ndf[\"category_encoded\"] = le.fit_transform(df[\"category\"])\n```\n\n## Data Type Requirements\n\n- cuML requires **float32 or float64** for features. Always cast: `X.astype(\"float32\")`\n- Integer targets (classification labels) work directly\n- Categorical columns must be encoded first (LabelEncoder or OneHotEncoder)\n- cuML does NOT support sparse matrices — always use dense data\n\n## Gotchas\n\n| Issue | Fix |\n|-------|-----|\n| `TypeError: sparse input` | Convert to dense: `X.toarray()` or don't use sparse |\n| PCA `solver='randomized'` fails | Use `solver='full'` or omit (cuML auto-selects) |\n| UMAP not available on CPU | Skip UMAP in CPU mode or `pip install umap-learn` |\n| Float64 slower than float32 | Cast to float32: `X.astype(\"float32\")` |\n| Large dataset OOM | Reduce features or sample data before fitting |\n\n## Output Guidelines\n\nWhen reporting ML results:\n- Include dataset shape (rows × features) and target distribution\n- Show train/test split sizes\n- Report key metrics in a formatted table (accuracy, R², MSE, etc.)\n- For classification: show per-class metrics if multi-class\n- For clustering: show cluster sizes and centroid summaries\n- For dimensionality reduction: show explained variance ratios\n- List feature importances ranked by magnitude\n- Note any data quality issues (class imbalance, missing values, outliers)\n","examples/nvidia_deep_agent/skills/data-visualization/SKILL.md":"---\nname: data-visualization\ndescription: Use for creating publication-quality charts and multi-panel analysis summaries. Triggers when tasks involve visualizing data, plotting results, creating charts, or producing visual reports from analysis output.\n---\n\n# Data Visualization Skill\n\nCreate publication-quality analytical charts using matplotlib and seaborn in a headless GPU sandbox. Charts are saved as PNG files to `/workspace/` for retrieval.\n\n## When to Use This Skill\n\nUse this skill when:\n- Visualizing results from cuDF analysis or cuML models\n- Creating charts (bar, line, scatter, heatmap, histogram, box plot)\n- Building multi-panel analysis summaries\n- The user asks for visual output, plots, graphs, or charts\n- Presenting statistical findings with figures\n\n## Initialization (REQUIRED)\n\nMUST call `matplotlib.use('Agg')` BEFORE importing pyplot. This enables headless rendering.\n\n```python\nimport matplotlib\nmatplotlib.use('Agg')  # Headless backend — MUST be before pyplot import\nimport matplotlib.pyplot as plt\nimport numpy as np\n\n# Publication-quality defaults\nplt.rcParams.update({\n    'figure.dpi': 100,\n    'savefig.dpi': 300,\n    'font.size': 11,\n    'axes.labelsize': 12,\n    'axes.titlesize': 14,\n    'xtick.labelsize': 10,\n    'ytick.labelsize': 10,\n    'legend.fontsize': 10,\n    'figure.constrained_layout.use': True,\n})\n\n# Colorblind-safe palette (Okabe-Ito)\nCOLORS = ['#0173B2', '#DE8F05', '#029E73', '#D55E00', '#CC78BC',\n          '#CA9161', '#FBAFE4', '#949494', '#ECE133', '#56B4E9']\n```\n\n## Saving Charts\n\nAlways save to `/workspace/` with these settings:\n\n```python\nplt.savefig('/workspace/chart_name.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n- `dpi=300` for print quality\n- `bbox_inches='tight'` removes excess whitespace\n- `facecolor='white'` ensures white background\n- Always call `plt.close()` after saving to free memory\n\n## Displaying Charts (REQUIRED)\n\nAfter saving any chart, you MUST call `read_file` on it to display it inline in the conversation:\n\n```\nread_file(\"/workspace/chart_name.png\")\n```\n\nUsers cannot see charts unless you do this. Every chart you save MUST be followed by a `read_file` call.\n\n## Quick Reference\n\n### Bar Chart (from groupby results)\n\n```python\n# After: result = to_pd(df.groupby(\"category\")[\"value\"].mean())\nfig, ax = plt.subplots(figsize=(8, 5))\n\nbars = ax.bar(result.index, result.values, color=COLORS[:len(result)],\n              edgecolor='black', linewidth=0.8)\n\nfor bar in bars:\n    height = bar.get_height()\n    ax.text(bar.get_x() + bar.get_width()/2., height,\n            f'{height:.1f}', ha='center', va='bottom', fontsize=9)\n\nax.set_ylabel('Mean Value', fontweight='bold')\nax.set_xlabel('Category', fontweight='bold')\nax.set_title('Average Value by Category', fontweight='bold')\nax.grid(axis='y', alpha=0.3, linestyle='--')\nax.set_axisbelow(True)\n\nplt.savefig('/workspace/bar_chart.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Line Chart (trends over time)\n\n```python\nfig, ax = plt.subplots(figsize=(10, 5))\n\nfor i, col in enumerate(columns_to_plot):\n    ax.plot(df[\"date\"], df[col], label=col, color=COLORS[i], linewidth=2,\n            marker='o', markersize=3, markevery=max(1, len(df)//20))\n\nax.set_ylabel('Values', fontweight='bold')\nax.set_xlabel('Date', fontweight='bold')\nax.set_title('Trends Over Time', fontweight='bold')\nax.legend(frameon=True, shadow=False)\nax.grid(True, alpha=0.3, linestyle='--')\nax.set_axisbelow(True)\nplt.xticks(rotation=45, ha='right')\n\nplt.savefig('/workspace/line_chart.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Scatter Plot — Continuous Color (correlations)\n\n```python\nfig, ax = plt.subplots(figsize=(8, 6))\n\nscatter = ax.scatter(df[\"x\"], df[\"y\"], c=df[\"value\"], cmap='viridis',\n                     s=40, alpha=0.7, edgecolors='black', linewidth=0.3)\nplt.colorbar(scatter, ax=ax, label='Value')\n\n# Optional: trend line\nz = np.polyfit(df[\"x\"], df[\"y\"], 1)\nax.plot(df[\"x\"].sort_values(), np.poly1d(z)(df[\"x\"].sort_values()),\n        \"r--\", linewidth=2, label=f'y={z[0]:.2f}x+{z[1]:.2f}')\n\nax.set_xlabel('X', fontweight='bold')\nax.set_ylabel('Y', fontweight='bold')\nax.set_title('Correlation Analysis', fontweight='bold')\nax.legend()\nax.grid(True, alpha=0.3, linestyle='--')\n\nplt.savefig('/workspace/scatter_correlation.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Scatter Plot — Categorical Color (clusters)\n\n```python\nfig, ax = plt.subplots(figsize=(8, 6))\n\nfor i, label in enumerate(sorted(df[\"cluster\"].unique())):\n    mask = df[\"cluster\"] == label\n    ax.scatter(df.loc[mask, \"x\"], df.loc[mask, \"y\"],\n               c=COLORS[i], label=f'Cluster {label}', s=40, alpha=0.7)\n\nax.set_xlabel('X', fontweight='bold')\nax.set_ylabel('Y', fontweight='bold')\nax.set_title('Cluster Visualization', fontweight='bold')\nax.legend()\nax.grid(True, alpha=0.3, linestyle='--')\n\nplt.savefig('/workspace/scatter_clusters.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Heatmap (correlation matrix or confusion matrix)\n\n```python\nimport seaborn as sns\n\nfig, ax = plt.subplots(figsize=(8, 7))\n\n# corr_matrix = to_pd(df[numeric_cols].corr())\nsns.heatmap(corr_matrix, annot=True, fmt='.2f', cmap='RdBu_r', center=0,\n            square=True, linewidths=1, vmin=-1, vmax=1,\n            cbar_kws={'label': 'Correlation'}, ax=ax)\n\nax.set_title('Correlation Matrix', fontweight='bold')\n\nplt.savefig('/workspace/heatmap.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Histogram with KDE\n\n```python\nfig, ax = plt.subplots(figsize=(8, 5))\n\nax.hist(df[\"value\"], bins=30, color=COLORS[0], alpha=0.7,\n        edgecolor='black', linewidth=0.5, density=True, label='Distribution')\n\n# Add KDE curve\nfrom scipy.stats import gaussian_kde\nkde = gaussian_kde(df[\"value\"].dropna())\nx_range = np.linspace(df[\"value\"].min(), df[\"value\"].max(), 200)\nax.plot(x_range, kde(x_range), color=COLORS[1], linewidth=2, label='KDE')\n\nax.set_xlabel('Value', fontweight='bold')\nax.set_ylabel('Density', fontweight='bold')\nax.set_title('Value Distribution', fontweight='bold')\nax.legend()\nax.grid(axis='y', alpha=0.3, linestyle='--')\n\nplt.savefig('/workspace/histogram.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Box Plot (compare groups)\n\n```python\nfig, ax = plt.subplots(figsize=(8, 5))\n\ngroups = [df[df[\"group\"] == g][\"value\"].values for g in group_names]\nbp = ax.boxplot(groups, labels=group_names, patch_artist=True,\n                widths=0.6, showmeans=True,\n                meanprops=dict(marker='D', markerfacecolor='red', markersize=6))\n\nfor i, patch in enumerate(bp['boxes']):\n    patch.set_facecolor(COLORS[i % len(COLORS)])\n    patch.set_alpha(0.7)\n\nax.set_ylabel('Value', fontweight='bold')\nax.set_title('Distribution by Group', fontweight='bold')\nax.grid(axis='y', alpha=0.3, linestyle='--')\nax.set_axisbelow(True)\n\nplt.savefig('/workspace/boxplot.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Multi-Panel Analysis Summary\n\nUse this to create a single image with multiple charts — the most effective way to present a complete analysis.\n\n```python\nfig, axes = plt.subplots(2, 2, figsize=(14, 10))\n\n# Top-left: Distribution\naxes[0, 0].hist(df[\"value\"], bins=30, color=COLORS[0], alpha=0.7, edgecolor='black', linewidth=0.5)\naxes[0, 0].set_title('Value Distribution', fontweight='bold')\naxes[0, 0].set_xlabel('Value')\naxes[0, 0].grid(axis='y', alpha=0.3, linestyle='--')\n\n# Top-right: Scatter\naxes[0, 1].scatter(df[\"x\"], df[\"y\"], c=COLORS[0], s=30, alpha=0.5)\naxes[0, 1].set_title('X vs Y', fontweight='bold')\naxes[0, 1].set_xlabel('X')\naxes[0, 1].set_ylabel('Y')\naxes[0, 1].grid(True, alpha=0.3, linestyle='--')\n\n# Bottom-left: Bar chart\ngroup_means = df.groupby(\"category\")[\"value\"].mean()\naxes[1, 0].bar(group_means.index, group_means.values, color=COLORS[:len(group_means)])\naxes[1, 0].set_title('Mean by Category', fontweight='bold')\naxes[1, 0].set_xlabel('Category')\naxes[1, 0].grid(axis='y', alpha=0.3, linestyle='--')\n\n# Bottom-right: Box plot\naxes[1, 1].boxplot([df[df[\"category\"] == c][\"value\"].values for c in categories],\n                    labels=categories, patch_artist=True)\naxes[1, 1].set_title('Distribution by Category', fontweight='bold')\naxes[1, 1].grid(axis='y', alpha=0.3, linestyle='--')\n\nfig.suptitle('Analysis Summary', fontsize=16, fontweight='bold')\n\nplt.savefig('/workspace/analysis_summary.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Feature Importance Chart (from cuML model)\n\n```python\nfig, ax = plt.subplots(figsize=(8, max(4, len(feature_names) * 0.35)))\n\n# importances = to_pd(model.feature_importances_)\nsorted_idx = np.argsort(importances)\nax.barh(np.array(feature_names)[sorted_idx], importances[sorted_idx],\n        color=COLORS[0], edgecolor='black', linewidth=0.5)\n\nax.set_xlabel('Importance', fontweight='bold')\nax.set_title('Feature Importances', fontweight='bold')\nax.grid(axis='x', alpha=0.3, linestyle='--')\nax.set_axisbelow(True)\n\nplt.savefig('/workspace/feature_importance.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Confusion Matrix (from cuML classification)\n\n```python\nimport seaborn as sns\n\nfig, ax = plt.subplots(figsize=(7, 6))\n\n# cm = confusion_matrix(to_pd(y_test), to_pd(predictions))\nsns.heatmap(cm, annot=True, fmt='d', cmap='Blues', square=True,\n            xticklabels=class_names, yticklabels=class_names,\n            linewidths=1, cbar_kws={'label': 'Count'}, ax=ax)\n\nax.set_xlabel('Predicted', fontweight='bold')\nax.set_ylabel('Actual', fontweight='bold')\nax.set_title('Confusion Matrix', fontweight='bold')\n\nplt.savefig('/workspace/confusion_matrix.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n## Style Rules\n\n- Use `COLORS` palette (colorblind-safe) — never rely on color alone to distinguish elements\n- No pie charts (bar charts are always clearer)\n- No 3D plots (distort data perception)\n- Grid lines at `alpha=0.3, linestyle='--'` with `ax.set_axisbelow(True)`\n- Bold axis labels and titles (`fontweight='bold'`)\n- White background for all exports\n- 1-4 charts per analysis is typical; use multi-panel for more\n\n## Output Guidelines\n\n- Save all charts to `/workspace/` as PNG\n- Print file paths after saving so the agent can reference them\n- For multi-panel summaries, use `figsize=(14, 10)` for 2×2 layouts\n- Keep chart titles descriptive but concise\n- Include units in axis labels when applicable\n","examples/deploy-coding-agent/skills/planning/SKILL.md":"---\nname: planning\ndescription: Break down a coding task into a structured implementation plan with clear steps, file identification, and risk assessment.\n---\n\n# Planning Skill\n\nUse this skill when starting a new coding task to create a thorough implementation plan.\n\n## Steps\n\n### 1. Understand the Task\n- Read the issue/task description completely\n- Identify the expected outcome and acceptance criteria\n- Note any constraints or requirements mentioned\n\n### 2. Explore the Codebase\n- Find the repository root and read the project structure\n- Identify the tech stack (language, framework, test runner)\n- Read README, CONTRIBUTING, or similar docs if they exist\n- Find existing tests to understand testing patterns\n\n### 3. Identify Relevant Files\n- Use `grep` to find code related to the task\n- Read the most relevant files (entry points, related modules)\n- Identify which files need to be modified vs. created\n- Check for existing patterns you should follow\n\n### 4. Write the Plan\nUse `write_todos` to create a structured plan:\n\n```\nwrite_todos([\n    \"1. <specific change in specific file>\",\n    \"2. <next specific change>\",\n    \"3. Write tests for <feature>\",\n    \"4. Run test suite and fix failures\",\n    \"5. Review all changes\"\n])\n```\n\n### 5. Assess Risks\n- Are there breaking changes?\n- Are there edge cases to handle?\n- Does this affect other parts of the codebase?\n- Flag anything uncertain for review\n\n## Guidelines\n\n- Plans should have 3-10 concrete steps\n- Each step should be specific enough to execute without further planning\n- Include test writing and test running as explicit steps\n- End with a review/verification step\n","examples/deploy-content-writer/skills/blog-post/SKILL.md":"---\nname: blog-post\ndescription: Write structured long-form blog posts with research, SEO optimization, and cover image generation.\n---\n\n# Blog Post Writing Skill\n\n## Research First (Required)\n\nBefore writing any blog post, delegate research:\n1. Use the `task` tool with `subagent_type: \"researcher\"`\n2. Specify both the topic AND where to save findings\n\n## Blog Post Structure\n\nEvery blog post should follow this structure:\n\n### 1. Hook (Opening)\n- Start with a compelling question, statistic, or statement\n- Keep it to 2-3 sentences\n\n### 2. Context (The Problem)\n- Explain why this topic matters\n- Connect to the reader's experience\n\n### 3. Main Content (3-5 sections)\n- Each section covers one key point with an H2 header\n- Include code examples where helpful\n- Use bullet points for lists of 3+ items\n\n### 4. Practical Application\n- Show how to apply the concepts\n- Include step-by-step instructions or code snippets\n\n### 5. Conclusion & CTA\n- Summarize key takeaways (3 bullets max)\n- End with a clear call-to-action\n\n## Output\n\nSave the blog post to `blogs/<slug>/post.md`.\n\n## SEO Considerations\n\n- Include the main keyword in the title and first paragraph\n- Keep the title under 60 characters\n- Write a meta description (150-160 characters)\n","examples/deploy-coding-agent/skills/coding-prefs/SKILL.md":"---\nname: coding-prefs\ndescription: Read the user's coding preferences from /memory/coding-prefs.md before making non-trivial style decisions, and append new preferences when the user gives durable feedback.\n---\n\n# Coding Preferences Skill\n\nUse this skill to keep `/memory/coding-prefs.md` in sync with how this\nspecific user wants you to work. This file is **user-scoped**, so each user\nhas their own copy — anything you write here only affects future\nconversations with the same user.\n\n## When to Read\n\n- Before picking a code style, test framework, or commit message format\n- Before deciding whether to add comments, type hints, or docstrings\n- Before refactoring beyond what was asked\n\n## When to Write\n\nAppend a new entry whenever the user gives feedback that should apply to\nfuture work:\n\n- \"Don't add docstrings unless I ask\" → save it\n- \"I prefer pytest over unittest\" → save it\n- \"Stop summarizing what you did at the end\" → save it\n\nEach entry should be one line: the rule, then a brief reason if the user\ngave one.\n\n## How to Write\n\nRead the file first (it may not exist yet), then append. Don't overwrite —\npreferences accumulate over time. If a new preference contradicts an\nexisting one, replace the old line and note the change.\n","examples/content-builder-agent/skills/social-media/SKILL.md":"---\nname: social-media\ndescription: Drafts engaging social media posts, writes hooks, suggests hashtags, creates thread structures, and generates companion images. Use when the user asks to write a LinkedIn post, tweet, Twitter/X thread, social media caption, social post, or repurpose content for social platforms.\n---\n\n# Social Media Content Skill\n\n## Research First (Required)\n\n**Before writing any social media content, you MUST delegate research:**\n\n1. Use the `task` tool with `subagent_type: \"researcher\"`\n2. In the description, specify BOTH the topic AND where to save:\n\n```\ntask(\n    subagent_type=\"researcher\",\n    description=\"Research [TOPIC]. Save findings to research/[slug].md\"\n)\n```\n\nExample:\n```\ntask(\n    subagent_type=\"researcher\",\n    description=\"Research renewable energy trends in 2025. Save findings to research/renewable-energy.md\"\n)\n```\n\n3. After research completes, read the findings file before writing\n\n## Output Structure (Required)\n\n**Every social media post MUST have both content AND an image:**\n\n**LinkedIn posts:**\n```\nlinkedin/\n└── <slug>/\n    ├── post.md        # The post content\n    └── image.png      # REQUIRED: Generated visual\n```\n\n**Twitter/X threads:**\n```\ntweets/\n└── <slug>/\n    ├── thread.md      # The thread content\n    └── image.png      # REQUIRED: Generated visual\n```\n\nExample: A LinkedIn post about \"prompt engineering\" → `linkedin/prompt-engineering/`\n\n**You MUST complete both steps:**\n1. Write the content to the appropriate path\n2. Generate an image using `generate_image` and save alongside the post\n\n**A social media post is NOT complete without its image.**\n\n## Platform Guidelines\n\n### LinkedIn\n\n**Format:**\n- 1,300 character limit (show more after ~210 chars)\n- First line is crucial - make it hook\n- Use line breaks for readability\n- 3-5 hashtags at the end\n\n**Tone:**\n- Professional but personal\n- Share insights and learnings\n- Ask questions to drive engagement\n- Use \"I\" and share experiences\n\n**Structure:**\n```\n[Hook - 1 compelling line]\n\n[Empty line]\n\n[Context - why this matters]\n\n[Empty line]\n\n[Main insight - 2-3 short paragraphs]\n\n[Empty line]\n\n[Call to action or question]\n\n#hashtag1 #hashtag2 #hashtag3\n```\n\n### Twitter/X\n\n**Format:**\n- 280 character limit per tweet\n- Threads for longer content (use 1/🧵 format)\n- No more than 2 hashtags per tweet\n\n**Thread Structure:**\n```\n1/🧵 [Hook - the main insight]\n\n2/ [Supporting point 1]\n\n3/ [Supporting point 2]\n\n4/ [Example or evidence]\n\n5/ [Conclusion + CTA]\n```\n\n## Image Generation\n\nEvery social media post needs an eye-catching image. Use the `generate_social_image` tool:\n\n```\ngenerate_social_image(prompt=\"A detailed description...\", platform=\"linkedin\", slug=\"your-post-slug\")\n```\n\nThe tool saves the image to `<platform>/<slug>/image.png`.\n\n### Social Image Best Practices\n\nSocial images need to work at small sizes in crowded feeds:\n- **Bold, simple compositions** - one clear focal point\n- **High contrast** - stands out when scrolling\n- **No text in image** - too small to read, platforms add their own\n- **Square or 4:5 ratio** - works across platforms\n\n### Writing Effective Prompts\n\nInclude these elements:\n\n1. **Single focal point**: One clear subject, not a busy scene\n2. **Bold style**: Vibrant colors, strong shapes, high contrast\n3. **Simple background**: Solid color, gradient, or subtle texture\n4. **Mood/energy**: Match the post tone (inspiring, urgent, thoughtful)\n\n### Example Prompts\n\n**For an insight/tip post:**\n```\nSingle glowing lightbulb floating against a deep purple gradient background, lightbulb made of interconnected golden geometric lines, rays of soft light emanating outward. Minimal, striking, high contrast. Square composition.\n```\n\n**For announcements/news:**\n```\nAbstract rocket ship made of colorful geometric shapes launching upward with a trail of particles. Bright coral and teal color scheme against clean white background. Energetic, celebratory mood. Bold flat illustration style.\n```\n\n**For thought-provoking content:**\n```\nTwo overlapping translucent circles, one blue one orange, creating a glowing intersection in the center. Represents collaboration or intersection of ideas. Dark charcoal background, soft ethereal glow. Minimalist and contemplative.\n```\n\n## Content Types\n\n### Announcement Posts\n- Lead with the news\n- Explain the impact\n- Include link or next step\n\n### Insight Posts\n- Share one specific learning\n- Explain the context briefly\n- Make it actionable\n\n### Question Posts\n- Ask a genuine question\n- Provide your take first\n- Keep it focused on one topic\n\n## Quality Checklist\n\nBefore finishing:\n- [ ] Post saved to `linkedin/<slug>/post.md` or `tweets/<slug>/thread.md`\n- [ ] Image generated alongside the post\n- [ ] First line hooks attention\n- [ ] Content fits platform limits\n- [ ] Tone matches platform norms\n- [ ] Has clear CTA or question\n- [ ] Hashtags are relevant (not generic)\n","examples/nvidia_deep_agent/skills/gpu-document-processing/SKILL.md":"---\nname: gpu-document-processing\ndescription: Use when processing large PDFs, document collections, or bulk text extraction tasks that benefit from GPU-accelerated processing. Triggers when the user provides large documents or needs bulk document analysis.\n---\n\n# GPU Document Processing Skill\n\nProcess large documents and document collections using GPU-accelerated tools. This skill uses the sandbox-as-tool pattern: the agent runs on CPU for reasoning, and sends document processing work to a GPU-equipped environment.\n\n## When to Use This Skill\n\nUse this skill when:\n- Processing large PDF files (50+ pages)\n- Analyzing collections of documents (10+ files)\n- Extracting structured data from unstructured documents\n- Performing bulk text extraction and chunking\n- Generating embeddings for large document sets\n- The user uploads or references large documents for analysis\n\n## Architecture: Sandbox as Tool\n\nThis skill follows the **sandbox-as-tool pattern** for GPU execution:\n\n1. **Agent reasons on CPU** - planning, synthesis, report writing\n2. **Processing sent to GPU sandbox** - document parsing, embedding, extraction\n3. **Results returned to agent** - structured output for further analysis\n\nThis separation ensures:\n- API keys stay outside the sandbox (security)\n- Agent state persists independently of processing jobs\n- Processing can be parallelized across documents\n- Cost-efficient: GPU used only during processing, not during reasoning\n\n## Capabilities\n\n### PDF Text Extraction\nExtract text content from PDF documents with layout preservation:\n- Headers, paragraphs, lists, and tables detected separately\n- Page numbers and section boundaries preserved\n- Multi-column layout handling\n\n### Tabular Data Extraction\nExtract tables from documents into structured formats:\n- PDF tables to CSV/DataFrames using GPU-accelerated parsing\n- Automatic column type detection\n- Handles merged cells and multi-row headers\n\n### Document Chunking\nSplit large documents into meaningful chunks for analysis:\n- Semantic chunking (by topic/section boundaries)\n- Fixed-size chunking with overlap for embedding\n- Configurable chunk sizes (default: 512 tokens)\n\n### Embedding Generation\nGenerate vector embeddings for document chunks:\n- Uses NVIDIA NeMo Retriever NIM for GPU-accelerated embedding\n- Supports batch processing for large document sets\n- Compatible with standard vector stores (Milvus, ChromaDB)\n\n## Workflow\n\n1. **Receive document reference** from the orchestrator\n2. **Determine processing type** (extraction, analysis, embedding)\n3. **Send to GPU sandbox** for processing\n4. **Collect structured results** (text, tables, embeddings)\n5. **Write findings** to /shared/ for the orchestrator to synthesize\n\n## Processing Large Document Collections\n\nFor multiple documents:\n1. Process documents in parallel batches (3-5 concurrent)\n2. Extract key metadata first (title, date, author, page count)\n3. Generate per-document summaries\n4. Cross-reference findings across documents\n5. Write consolidated findings with per-document citations\n\n## Output Format\n\nWhen reporting document processing results:\n- Include document metadata (filename, pages, size)\n- Structure extracted content by section/chapter\n- Format tables as markdown tables\n- Include page references for all extracted content\n- Note any extraction quality issues (scanned images, corrupted pages)\n\n## Integration with NVIDIA NIM\n\nFor production deployments, GPU document processing can leverage:\n- **NVIDIA NeMo Retriever**: GPU-accelerated embedding and retrieval\n- **NVIDIA RAPIDS cuDF**: Tabular data processing from extracted tables\n- **NVIDIA Triton**: Scalable inference for document classification models\n\nSee NVIDIA's NIM documentation for self-hosted deployment options.\n","examples/content-builder-agent/skills/blog-post/SKILL.md":"---\nname: blog-post\ndescription: Writes and structures long-form blog posts, creates tutorial outlines, and optimizes content for SEO with cover image generation. Use when the user asks to write a blog post, article, how-to guide, tutorial, technical writeup, thought leadership piece, or long-form content.\n---\n\n# Blog Post Writing Skill\n\n## Research First (Required)\n\n**Before writing any blog post, you MUST delegate research:**\n\n1. Use the `task` tool with `subagent_type: \"researcher\"`\n2. In the description, specify BOTH the topic AND where to save:\n\n```\ntask(\n    subagent_type=\"researcher\",\n    description=\"Research [TOPIC]. Save findings to research/[slug].md\"\n)\n```\n\nExample:\n```\ntask(\n    subagent_type=\"researcher\",\n    description=\"Research the current state of AI agents in 2025. Save findings to research/ai-agents-2025.md\"\n)\n```\n\n3. After research completes, read the findings file before writing\n\n## Output Structure (Required)\n\n**Every blog post MUST have both a post AND a cover image:**\n\n```\nblogs/\n└── <slug>/\n    ├── post.md        # The blog post content\n    └── hero.png       # REQUIRED: Generated cover image\n```\n\nExample: A post about \"AI Agents in 2025\" → `blogs/ai-agents-2025/`\n\n**You MUST complete both steps:**\n1. Write the post to `blogs/<slug>/post.md`\n2. Generate a cover image using `generate_image` and save to `blogs/<slug>/hero.png`\n\n**A blog post is NOT complete without its cover image.**\n\n## Blog Post Structure\n\nEvery blog post should follow this structure:\n\n### 1. Hook (Opening)\n- Start with a compelling question, statistic, or statement\n- Make the reader want to continue\n- Keep it to 2-3 sentences\n\n### 2. Context (The Problem)\n- Explain why this topic matters\n- Describe the problem or opportunity\n- Connect to the reader's experience\n\n### 3. Main Content (The Solution)\n- Break into 3-5 main sections with H2 headers\n- Each section covers one key point\n- Include code examples, diagrams, or screenshots where helpful\n- Use bullet points for lists\n\n### 4. Practical Application\n- Show how to apply the concepts\n- Include step-by-step instructions if applicable\n- Provide code snippets or templates\n\n### 5. Conclusion & CTA\n- Summarize key takeaways (3 bullets max)\n- End with a clear call-to-action\n- Link to related resources\n\n## Cover Image Generation\n\nAfter writing the post, generate a cover image using the `generate_cover` tool:\n\n```\ngenerate_cover(prompt=\"A detailed description of the image...\", slug=\"your-blog-slug\")\n```\n\nThe tool saves the image to `blogs/<slug>/hero.png`.\n\n### Writing Effective Image Prompts\n\nStructure your prompt with these elements:\n\n1. **Subject**: What is the main focus? Be specific and concrete.\n2. **Style**: Art direction (minimalist, isometric, flat design, 3D render, watercolor, etc.)\n3. **Composition**: How elements are arranged (centered, rule of thirds, symmetrical)\n4. **Color palette**: Specific colors or mood (warm earth tones, cool blues and purples, high contrast)\n5. **Lighting/Atmosphere**: Soft diffused light, dramatic shadows, golden hour, neon glow\n6. **Technical details**: Aspect ratio considerations, negative space for text overlay\n\n### Example Prompts\n\n**For a technical blog post:**\n```\nIsometric 3D illustration of interconnected glowing cubes representing AI agents, each cube has subtle circuit patterns. Cubes connected by luminous data streams. Deep navy background (#0a192f) with electric blue (#64ffda) and soft purple (#c792ea) accents. Clean minimal style, lots of negative space at top for title. Professional tech aesthetic.\n```\n\n**For a tutorial/how-to:**\n```\nClean flat illustration of hands typing on a keyboard with abstract code symbols floating upward, transforming into lightbulbs and gears. Warm gradient background from soft coral to light peach. Friendly, approachable style. Centered composition with space for text overlay.\n```\n\n**For thought leadership:**\n```\nAbstract visualization of a human silhouette profile merging with geometric neural network patterns. Split composition - organic watercolor texture on left transitioning to clean vector lines on right. Muted sage green and warm terracotta color scheme. Contemplative, forward-thinking mood.\n```\n\n## SEO Considerations\n\n- Include the main keyword in the title and first paragraph\n- Use the keyword naturally 3-5 times throughout\n- Keep the title under 60 characters\n- Write a meta description (150-160 characters)\n\n## Quality Checklist\n\nBefore finishing:\n- [ ] Post saved to `blogs/<slug>/post.md`\n- [ ] Hero image generated at `blogs/<slug>/hero.png`\n- [ ] Hook grabs attention in first 2 sentences\n- [ ] Each section has a clear purpose\n- [ ] Conclusion summarizes key points\n- [ ] CTA tells reader what to do next\n","examples/deploy-coding-agent/skills/code-review/SKILL.md":"---\nname: code-review\ndescription: Perform a structured code review of changes, checking for correctness, style, tests, and potential issues.\n---\n\n# Code Review Skill\n\nUse this skill after implementing changes to validate your work before delivering.\n\n## Review Checklist\n\n### 1. Correctness\n- [ ] Changes solve the original issue/task\n- [ ] No unintended side effects on existing functionality\n- [ ] Edge cases are handled\n- [ ] Error handling is appropriate (not excessive)\n\n### 2. Code Quality\n- [ ] Code matches existing style and patterns\n- [ ] No unnecessary complexity or abstraction\n- [ ] Variable and function names are clear\n- [ ] No dead code, commented-out code, or TODOs left behind\n\n### 3. Tests\n- [ ] New functionality has test coverage\n- [ ] Existing tests still pass\n- [ ] Tests cover both happy path and error cases\n- [ ] Tests are not brittle (don't test implementation details)\n\n### 4. Safety\n- [ ] No hardcoded secrets or credentials\n- [ ] User input is validated at boundaries\n- [ ] No SQL injection, XSS, or command injection vectors\n- [ ] File operations use safe paths\n\n## Process\n\n1. Read each modified file end-to-end (not just the diff)\n2. Run the test suite: `execute(\"python -m pytest -v\")`\n3. Run linters if available: `execute(\"ruff check .\")`\n4. Run the bundled lint check: `execute(\"python /skills/code-review/lint_check.py .\")`\n5. Check against each item in the review checklist\n6. If any issues found, fix them and re-review\n7. When everything passes, the review is complete\n\n## Helper Scripts\n\n- **`/skills/code-review/lint_check.py`** — Scans Python files for missing\n  docstrings, long functions (>50 lines), and bare `except:` clauses. Run it\n  via `execute(\"python /skills/code-review/lint_check.py [path ...]\")`.\n","examples/repl_swarm/skills/swarm/SKILL.md":"# swarm\n\nPath: `examples/repl_swarm/skills/swarm/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/repl_swarm/skills/swarm/SKILL.md)","examples/text-to-sql-agent/skills/schema-exploration/SKILL.md":"# schema-exploration\n\nPath: `examples/text-to-sql-agent/skills/schema-exploration/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/text-to-sql-agent/skills/schema-exploration/SKILL.md)","examples/text-to-sql-agent/skills/query-writing/SKILL.md":"# query-writing\n\nPath: `examples/text-to-sql-agent/skills/query-writing/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/text-to-sql-agent/skills/query-writing/SKILL.md)","libs/code/deepagents_code/built_in_skills/remember/SKILL.md":"# remember\n\nPath: `libs/code/deepagents_code/built_in_skills/remember/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/deepagents_code/built_in_skills/remember/SKILL.md)","libs/code/deepagents_code/built_in_skills/skill-creator/SKILL.md":"# skill-creator\n\nPath: `libs/code/deepagents_code/built_in_skills/skill-creator/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/deepagents_code/built_in_skills/skill-creator/SKILL.md)","libs/code/examples/skills/web-research/SKILL.md":"# web-research\n\nPath: `libs/code/examples/skills/web-research/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/examples/skills/web-research/SKILL.md)","libs/code/examples/skills/skill-creator/SKILL.md":"# skill-creator\n\nPath: `libs/code/examples/skills/skill-creator/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/examples/skills/skill-creator/SKILL.md)","libs/code/examples/skills/langgraph-docs/SKILL.md":"# langgraph-docs\n\nPath: `libs/code/examples/skills/langgraph-docs/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/examples/skills/langgraph-docs/SKILL.md)","libs/code/examples/skills/arxiv-search/SKILL.md":"# arxiv-search\n\nPath: `libs/code/examples/skills/arxiv-search/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/examples/skills/arxiv-search/SKILL.md)","libs/cli/examples/skills/web-research/SKILL.md":"# web-research\n\nPath: `libs/cli/examples/skills/web-research/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/skills/web-research/SKILL.md)","libs/cli/examples/skills/skill-creator/SKILL.md":"# skill-creator\n\nPath: `libs/cli/examples/skills/skill-creator/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/skills/skill-creator/SKILL.md)","libs/cli/examples/skills/langgraph-docs/SKILL.md":"# langgraph-docs\n\nPath: `libs/cli/examples/skills/langgraph-docs/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/skills/langgraph-docs/SKILL.md)","libs/cli/examples/skills/arxiv-search/SKILL.md":"# arxiv-search\n\nPath: `libs/cli/examples/skills/arxiv-search/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/skills/arxiv-search/SKILL.md)","examples/deploy-gtm-agent/subagents/market-researcher/skills/analyze-market/SKILL.md":"# analyze-market\n\nPath: `examples/deploy-gtm-agent/subagents/market-researcher/skills/analyze-market/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/deploy-gtm-agent/subagents/market-researcher/skills/analyze-market/SKILL.md)","libs/cli/examples/deploy-content-writer/skills/social-media/SKILL.md":"# social-media\n\nPath: `libs/cli/examples/deploy-content-writer/skills/social-media/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/deploy-content-writer/skills/social-media/SKILL.md)","libs/cli/examples/deploy-content-writer/skills/blog-post/SKILL.md":"# blog-post\n\nPath: `libs/cli/examples/deploy-content-writer/skills/blog-post/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/deploy-content-writer/skills/blog-post/SKILL.md)","libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/SKILL.md":"# summarize\n\nPath: `libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/SKILL.md)","libs/cli/tests/unit_tests/deploy/fixtures/projects/subagent_with_local_skills/subagents/researcher/skills/note/SKILL.md":"# note\n\nPath: `libs/cli/tests/unit_tests/deploy/fixtures/projects/subagent_with_local_skills/subagents/researcher/skills/note/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/tests/unit_tests/deploy/fixtures/projects/subagent_with_local_skills/subagents/researcher/skills/note/SKILL.md)","AGENTS.md":"# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/AGENTS.md)","libs/evals/AGENTS.md":"# Evals Skill\n\nPath: `libs/evals/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/AGENTS.md)","libs/evals/CONTRIBUTING.md":"# Evals Skill\n\nPath: `libs/evals/CONTRIBUTING.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/CONTRIBUTING.md)","libs/evals/EVAL_CATALOG.md":"# Evals Skill\n\nPath: `libs/evals/EVAL_CATALOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/EVAL_CATALOG.md)","libs/evals/MODEL_GROUPS.md":"# Evals Skill\n\nPath: `libs/evals/MODEL_GROUPS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/MODEL_GROUPS.md)","libs/evals/README.md":"# Evals Skill\n\nPath: `libs/evals/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/README.md)","libs/evals/deepagents_evals/categories.json":"# Deepagents_evals Skill\n\nPath: `libs/evals/deepagents_evals/categories.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/deepagents_evals/categories.json)","libs/evals/tests/evals/README.md":"# Evals Skill\n\nPath: `libs/evals/tests/evals/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/README.md)","libs/evals/tests/evals/fixtures/summarization_seed_messages.json":"# Fixtures Skill\n\nPath: `libs/evals/tests/evals/fixtures/summarization_seed_messages.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/fixtures/summarization_seed_messages.json)","libs/evals/tests/evals/data/benchmark_samples/bfcl_v3_final.json":"# Benchmark_samples Skill\n\nPath: `libs/evals/tests/evals/data/benchmark_samples/bfcl_v3_final.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/data/benchmark_samples/bfcl_v3_final.json)","libs/evals/tests/evals/data/benchmark_samples/frames_final.json":"# Benchmark_samples Skill\n\nPath: `libs/evals/tests/evals/data/benchmark_samples/frames_final.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/data/benchmark_samples/frames_final.json)","libs/evals/tests/evals/data/benchmark_samples/nexus_final.json":"# Benchmark_samples Skill\n\nPath: `libs/evals/tests/evals/data/benchmark_samples/nexus_final.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/data/benchmark_samples/nexus_final.json)","libs/evals/tests/evals/tau2_airline/data/db.json":"# Data Skill\n\nPath: `libs/evals/tests/evals/tau2_airline/data/db.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/tau2_airline/data/db.json)","libs/evals/tests/evals/tau2_airline/data/policy.md":"# Data Skill\n\nPath: `libs/evals/tests/evals/tau2_airline/data/policy.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/tau2_airline/data/policy.md)","libs/evals/tests/evals/tau2_airline/data/tasks.json":"# Data Skill\n\nPath: `libs/evals/tests/evals/tau2_airline/data/tasks.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/tau2_airline/data/tasks.json)","libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/examples.md":"# Summarize Skill\n\nPath: `libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/examples.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/examples.md)"},"files":{"examples/deploy-gtm-agent/skills/competitor-analysis/SKILL.md":"---\nname: competitor-analysis\ndescription: >-\n  Analyze competitors in a given market segment.\n  Trigger on: competitive landscape, competitor analysis,\n  market comparison, competitive positioning.\n---\n\n# Competitor Analysis\n\nWhen asked to analyze competitors:\n\n1. Identify the top 3-5 competitors in the target segment\n2. For each competitor, assess:\n   - Product positioning and key differentiators\n   - Pricing model and tiers\n   - Target audience and market share estimates\n   - Strengths and weaknesses\n3. Create a comparison matrix\n4. Identify gaps and opportunities for differentiation\n","examples/deploy-content-writer/skills/social-media/SKILL.md":"---\nname: social-media\ndescription: Create social media content including Twitter/X threads, LinkedIn posts, and short-form updates.\n---\n\n# Social Media Content Skill\n\n## Formats\n\n### Twitter/X Thread\n- Hook tweet: compelling question or bold statement (< 280 chars)\n- 3-7 follow-up tweets expanding on the topic\n- Final tweet with CTA or key takeaway\n- Use line breaks for readability\n\n### LinkedIn Post\n- Opening hook (first 2 lines visible before \"see more\")\n- 3-5 short paragraphs with key insights\n- End with a question to drive engagement\n- 1,300 character target length\n\n### Short-form Update\n- Single paragraph announcement or insight\n- Link to longer content if available\n- Under 280 characters for cross-platform use\n\n## Guidelines\n\n- Write in first person for LinkedIn, third person for company accounts\n- Include 2-3 relevant hashtags (not more)\n- Adapt tone: LinkedIn is more professional, Twitter is more conversational\n- Every post should provide standalone value — don't just tease\n- Use concrete numbers and results over vague claims\n\n## Output\n\nSave content to `social/<platform>/<slug>.md` (e.g., `social/twitter/ai-agents-thread.md`).\n","examples/nvidia_deep_agent/skills/cudf-analytics/SKILL.md":"---\nname: cudf-analytics\ndescription: Use for GPU-accelerated data analysis on datasets, CSVs, or tabular data using NVIDIA cuDF. Triggers when tasks involve groupby aggregations, statistical summaries, anomaly detection, or large-scale data profiling.\n---\n\n# cuDF Analytics Skill\n\nGPU-accelerated data analysis using NVIDIA RAPIDS cuDF. cuDF provides a pandas-like API that runs on NVIDIA GPUs, enabling massive speedups on large datasets.\n\n## When to Use This Skill\n\nUse this skill when:\n- Analyzing CSV files, datasets, or tabular data\n- Computing statistical summaries (mean, median, std, quartiles)\n- Performing groupby aggregations\n- Detecting anomalies or outliers in data\n- Profiling datasets with millions of rows\n- Computing correlation matrices\n\n## Initialization (REQUIRED)\n\nAlways start every script with this boilerplate. It tests actual GPU operations, not just import.\n\n```python\nimport pandas as pd\n\ntry:\n    import cudf\n    # Smoke-test: verify GPU compute AND host transfer both work\n    _test = cudf.Series([1, 2, 3])\n    assert _test.sum() == 6\n    assert _test.to_pandas().tolist() == [1, 2, 3]\n    GPU = True\nexcept Exception as e:\n    print(f\"[GPU] cudf unavailable, falling back to pandas: {e}\")\n    GPU = False\n\ndef read_csv(path):\n    return cudf.read_csv(path) if GPU else pd.read_csv(path)\n\ndef to_pd(df):\n    \"\"\"Convert cuDF DataFrame/Series to pandas. Use this instead of .to_pandas() directly.\"\"\"\n    if not GPU:\n        return df\n    try:\n        return df.to_pandas()\n    except Exception as e:\n        print(f\"[GPU] .to_pandas() failed, using Arrow fallback: {e}\")\n        return df.to_arrow().to_pandas()\n```\n\n## Quick Reference\n\ncuDF mirrors the pandas API. Common operations:\n\n### Read Data\n```python\ndf = read_csv(\"data.csv\")\n```\n\n### Statistical Summary\n```python\n# Use to_pd() when you need pandas output\nsummary = to_pd(df[[\"value\", \"score\"]].describe())\n\n# Scalar values work directly with float()\nmean_val = float(df[\"value\"].mean())\nq1 = float(df[\"value\"].quantile(0.25))\n\n# Correlation\ncorr = float(df[\"value\"].corr(df[\"score\"]))\n```\n\n### Groupby Aggregation\n```python\nresult = df.groupby(\"category\").agg({\n    \"revenue\": [\"sum\", \"mean\", \"count\"],\n    \"quantity\": [\"sum\", \"mean\"],\n})\nresult_pd = to_pd(result)\n```\n\n### Anomaly Detection (IQR Method)\n```python\ncol = \"value\"\nQ1 = float(df[col].quantile(0.25))\nQ3 = float(df[col].quantile(0.75))\nIQR = Q3 - Q1\nlower = Q1 - 1.5 * IQR\nupper = Q3 + 1.5 * IQR\noutliers = to_pd(df[(df[col] < lower) | (df[col] > upper)])\n```\n\n### Anomaly Detection (Z-Score Method)\n```python\nmean = float(df[col].mean())\nstd = float(df[col].std())\ndf[\"z_score\"] = (df[col] - mean) / std\nanomalies = to_pd(df[df[\"z_score\"].abs() > 3])\n```\n\n### Filtering and Selection\n```python\n# Filter rows\nfiltered = df[df[\"status\"] == \"active\"]\n\n# Select columns\nsubset = df[[\"name\", \"revenue\", \"date\"]]\n\n# Sort\nsorted_df = df.sort_values(\"revenue\", ascending=False)\n\n# Convert to pandas for final output / iteration\nresult_pd = to_pd(sorted_df)\n```\n\n## Data Type Requirements\n\ncuDF requires explicit type specification for optimal performance:\n- Use `float32` or `float64` for numeric data\n- Use `int32` or `int64` for integer data\n- String columns use cuDF's string dtype automatically\n\n## Output Guidelines\n\nWhen reporting analysis results:\n- Include dataset dimensions (rows x columns)\n- Show key statistics in formatted tables\n- Highlight notable patterns, trends, or anomalies\n- Provide both summary statistics and specific examples\n- Note any data quality issues (missing values, outliers)\n","examples/nvidia_deep_agent/skills/cuml-machine-learning/SKILL.md":"---\nname: cuml-machine-learning\ndescription: Use for GPU-accelerated machine learning on tabular data using NVIDIA cuML. Triggers when tasks involve classification, regression, clustering, dimensionality reduction, or model training on datasets.\n---\n\n# cuML Machine Learning Skill\n\nGPU-accelerated machine learning using NVIDIA RAPIDS cuML. cuML provides a scikit-learn-compatible API that runs on NVIDIA GPUs, enabling massive speedups on large datasets.\n\n## When to Use This Skill\n\nUse this skill when:\n- Training classification models (predict categories, detect fraud, classify text)\n- Training regression models (forecast values, predict prices, estimate quantities)\n- Clustering data (segment customers, group documents, find patterns)\n- Dimensionality reduction (visualize high-dimensional data, compress features)\n- Preprocessing and feature engineering on large datasets\n- Any ML task on datasets with 10K+ rows where GPU acceleration helps\n\n## Initialization (REQUIRED)\n\nAlways start every script with this boilerplate. It tests actual GPU ML operations.\n\n```python\nimport pandas as pd\nimport numpy as np\n\ntry:\n    import cudf\n    import cuml\n    # Smoke-test: verify GPU ML works end-to-end\n    _test_data = cudf.DataFrame({'a': [1.0, 2.0, 3.0, 4.0], 'b': [5.0, 6.0, 7.0, 8.0]})\n    _km = cuml.cluster.KMeans(n_clusters=2, n_init=1, random_state=42)\n    _km.fit(_test_data)\n    assert len(_km.labels_) == 4\n    GPU = True\nexcept Exception as e:\n    print(f\"[GPU] cuml unavailable, falling back to scikit-learn: {e}\")\n    GPU = False\n\ndef read_csv(path):\n    return cudf.read_csv(path) if GPU else pd.read_csv(path)\n\ndef to_pd(df):\n    \"\"\"Convert cuML/cuDF output to pandas. Use this instead of .to_pandas() directly.\"\"\"\n    if not GPU:\n        return df\n    try:\n        return df.to_pandas()\n    except Exception as e:\n        print(f\"[GPU] .to_pandas() failed, using Arrow fallback: {e}\")\n        return df.to_arrow().to_pandas()\n```\n\n## Import Patterns\n\n```python\n# GPU mode\nif GPU:\n    from cuml.cluster import KMeans, DBSCAN, HDBSCAN\n    from cuml.ensemble import RandomForestClassifier, RandomForestRegressor\n    from cuml.linear_model import LinearRegression, Ridge, Lasso, LogisticRegression\n    from cuml.neighbors import KNeighborsClassifier, KNeighborsRegressor\n    from cuml.svm import SVC, SVR\n    from cuml.decomposition import PCA, TruncatedSVD\n    from cuml.manifold import UMAP, TSNE\n    from cuml.preprocessing import StandardScaler, MinMaxScaler, LabelEncoder\n    from cuml.model_selection import train_test_split\n    from cuml.metrics import accuracy_score, r2_score, mean_squared_error\n# CPU fallback\nelse:\n    from sklearn.cluster import KMeans, DBSCAN, HDBSCAN\n    from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor\n    from sklearn.linear_model import LinearRegression, Ridge, Lasso, LogisticRegression\n    from sklearn.neighbors import KNeighborsClassifier, KNeighborsRegressor\n    from sklearn.svm import SVC, SVR\n    from sklearn.decomposition import PCA, TruncatedSVD\n    from sklearn.manifold import TSNE\n    from sklearn.preprocessing import StandardScaler, MinMaxScaler, LabelEncoder\n    from sklearn.model_selection import train_test_split\n    from sklearn.metrics import accuracy_score, r2_score, mean_squared_error\n    # UMAP not in sklearn — skip or pip install umap-learn\n```\n\n## Quick Reference\n\n### Train/Test Split (Start Here)\n\n```python\nX = df[[\"feature1\", \"feature2\", \"feature3\"]].astype(\"float32\")\ny = df[\"target\"]\n\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n```\n\n### Classification\n\n```python\nmodel = RandomForestClassifier(n_estimators=100, max_depth=10, random_state=42)\nmodel.fit(X_train, y_train)\n\npredictions = model.predict(X_test)\naccuracy = float(accuracy_score(to_pd(y_test), to_pd(predictions)))\nprint(f\"Accuracy: {accuracy:.4f}\")\n\n# Feature importances (tree models only)\nimportances = to_pd(model.feature_importances_)\nfor name, imp in zip(feature_names, importances):\n    print(f\"  {name}: {imp:.4f}\")\n```\n\n### Regression\n\n```python\nmodel = Ridge(alpha=1.0)\nmodel.fit(X_train, y_train)\n\npredictions = model.predict(X_test)\nr2 = float(r2_score(to_pd(y_test), to_pd(predictions)))\nmse = float(mean_squared_error(to_pd(y_test), to_pd(predictions)))\nprint(f\"R² Score: {r2:.4f}\")\nprint(f\"MSE: {mse:.4f}\")\n\n# Coefficients\ncoeffs = to_pd(model.coef_)\nprint(f\"Intercept: {float(model.intercept_):.4f}\")\n```\n\n### Clustering (KMeans)\n\n```python\nX = df[[\"feature1\", \"feature2\"]].astype(\"float32\")\n\nmodel = KMeans(n_clusters=4, n_init=10, random_state=42)\nmodel.fit(X)\n\nlabels = to_pd(model.labels_)\ncentroids = to_pd(model.cluster_centers_)\ninertia = float(model.inertia_)\n\nprint(f\"Inertia: {inertia:.2f}\")\nprint(f\"Cluster sizes: {labels.value_counts().sort_index().to_dict()}\")\nprint(f\"Centroids:\\n{centroids}\")\n```\n\n### Dimensionality Reduction (PCA)\n\n```python\nscaler = StandardScaler()\nX_scaled = scaler.fit_transform(X.astype(\"float32\"))\n\npca = PCA(n_components=3)\nX_reduced = pca.fit_transform(X_scaled)\n\nvariance_ratio = to_pd(pca.explained_variance_ratio_)\nprint(f\"Explained variance: {[f'{v:.4f}' for v in variance_ratio]}\")\nprint(f\"Total explained: {float(sum(variance_ratio)):.4f}\")\n```\n\n### Dimensionality Reduction (UMAP — GPU only)\n\n```python\nif GPU:\n    reducer = UMAP(n_components=2, n_neighbors=15, min_dist=0.1, random_state=42)\n    embedding = to_pd(reducer.fit_transform(X_scaled))\n    print(f\"UMAP embedding shape: {embedding.shape}\")\n```\n\n### Preprocessing\n\n```python\n# Scale numeric features\nscaler = StandardScaler()\nX_scaled = scaler.fit_transform(X.astype(\"float32\"))\n\n# Encode categorical columns\nle = LabelEncoder()\ndf[\"category_encoded\"] = le.fit_transform(df[\"category\"])\n```\n\n## Data Type Requirements\n\n- cuML requires **float32 or float64** for features. Always cast: `X.astype(\"float32\")`\n- Integer targets (classification labels) work directly\n- Categorical columns must be encoded first (LabelEncoder or OneHotEncoder)\n- cuML does NOT support sparse matrices — always use dense data\n\n## Gotchas\n\n| Issue | Fix |\n|-------|-----|\n| `TypeError: sparse input` | Convert to dense: `X.toarray()` or don't use sparse |\n| PCA `solver='randomized'` fails | Use `solver='full'` or omit (cuML auto-selects) |\n| UMAP not available on CPU | Skip UMAP in CPU mode or `pip install umap-learn` |\n| Float64 slower than float32 | Cast to float32: `X.astype(\"float32\")` |\n| Large dataset OOM | Reduce features or sample data before fitting |\n\n## Output Guidelines\n\nWhen reporting ML results:\n- Include dataset shape (rows × features) and target distribution\n- Show train/test split sizes\n- Report key metrics in a formatted table (accuracy, R², MSE, etc.)\n- For classification: show per-class metrics if multi-class\n- For clustering: show cluster sizes and centroid summaries\n- For dimensionality reduction: show explained variance ratios\n- List feature importances ranked by magnitude\n- Note any data quality issues (class imbalance, missing values, outliers)\n","examples/nvidia_deep_agent/skills/data-visualization/SKILL.md":"---\nname: data-visualization\ndescription: Use for creating publication-quality charts and multi-panel analysis summaries. Triggers when tasks involve visualizing data, plotting results, creating charts, or producing visual reports from analysis output.\n---\n\n# Data Visualization Skill\n\nCreate publication-quality analytical charts using matplotlib and seaborn in a headless GPU sandbox. Charts are saved as PNG files to `/workspace/` for retrieval.\n\n## When to Use This Skill\n\nUse this skill when:\n- Visualizing results from cuDF analysis or cuML models\n- Creating charts (bar, line, scatter, heatmap, histogram, box plot)\n- Building multi-panel analysis summaries\n- The user asks for visual output, plots, graphs, or charts\n- Presenting statistical findings with figures\n\n## Initialization (REQUIRED)\n\nMUST call `matplotlib.use('Agg')` BEFORE importing pyplot. This enables headless rendering.\n\n```python\nimport matplotlib\nmatplotlib.use('Agg')  # Headless backend — MUST be before pyplot import\nimport matplotlib.pyplot as plt\nimport numpy as np\n\n# Publication-quality defaults\nplt.rcParams.update({\n    'figure.dpi': 100,\n    'savefig.dpi': 300,\n    'font.size': 11,\n    'axes.labelsize': 12,\n    'axes.titlesize': 14,\n    'xtick.labelsize': 10,\n    'ytick.labelsize': 10,\n    'legend.fontsize': 10,\n    'figure.constrained_layout.use': True,\n})\n\n# Colorblind-safe palette (Okabe-Ito)\nCOLORS = ['#0173B2', '#DE8F05', '#029E73', '#D55E00', '#CC78BC',\n          '#CA9161', '#FBAFE4', '#949494', '#ECE133', '#56B4E9']\n```\n\n## Saving Charts\n\nAlways save to `/workspace/` with these settings:\n\n```python\nplt.savefig('/workspace/chart_name.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n- `dpi=300` for print quality\n- `bbox_inches='tight'` removes excess whitespace\n- `facecolor='white'` ensures white background\n- Always call `plt.close()` after saving to free memory\n\n## Displaying Charts (REQUIRED)\n\nAfter saving any chart, you MUST call `read_file` on it to display it inline in the conversation:\n\n```\nread_file(\"/workspace/chart_name.png\")\n```\n\nUsers cannot see charts unless you do this. Every chart you save MUST be followed by a `read_file` call.\n\n## Quick Reference\n\n### Bar Chart (from groupby results)\n\n```python\n# After: result = to_pd(df.groupby(\"category\")[\"value\"].mean())\nfig, ax = plt.subplots(figsize=(8, 5))\n\nbars = ax.bar(result.index, result.values, color=COLORS[:len(result)],\n              edgecolor='black', linewidth=0.8)\n\nfor bar in bars:\n    height = bar.get_height()\n    ax.text(bar.get_x() + bar.get_width()/2., height,\n            f'{height:.1f}', ha='center', va='bottom', fontsize=9)\n\nax.set_ylabel('Mean Value', fontweight='bold')\nax.set_xlabel('Category', fontweight='bold')\nax.set_title('Average Value by Category', fontweight='bold')\nax.grid(axis='y', alpha=0.3, linestyle='--')\nax.set_axisbelow(True)\n\nplt.savefig('/workspace/bar_chart.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Line Chart (trends over time)\n\n```python\nfig, ax = plt.subplots(figsize=(10, 5))\n\nfor i, col in enumerate(columns_to_plot):\n    ax.plot(df[\"date\"], df[col], label=col, color=COLORS[i], linewidth=2,\n            marker='o', markersize=3, markevery=max(1, len(df)//20))\n\nax.set_ylabel('Values', fontweight='bold')\nax.set_xlabel('Date', fontweight='bold')\nax.set_title('Trends Over Time', fontweight='bold')\nax.legend(frameon=True, shadow=False)\nax.grid(True, alpha=0.3, linestyle='--')\nax.set_axisbelow(True)\nplt.xticks(rotation=45, ha='right')\n\nplt.savefig('/workspace/line_chart.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Scatter Plot — Continuous Color (correlations)\n\n```python\nfig, ax = plt.subplots(figsize=(8, 6))\n\nscatter = ax.scatter(df[\"x\"], df[\"y\"], c=df[\"value\"], cmap='viridis',\n                     s=40, alpha=0.7, edgecolors='black', linewidth=0.3)\nplt.colorbar(scatter, ax=ax, label='Value')\n\n# Optional: trend line\nz = np.polyfit(df[\"x\"], df[\"y\"], 1)\nax.plot(df[\"x\"].sort_values(), np.poly1d(z)(df[\"x\"].sort_values()),\n        \"r--\", linewidth=2, label=f'y={z[0]:.2f}x+{z[1]:.2f}')\n\nax.set_xlabel('X', fontweight='bold')\nax.set_ylabel('Y', fontweight='bold')\nax.set_title('Correlation Analysis', fontweight='bold')\nax.legend()\nax.grid(True, alpha=0.3, linestyle='--')\n\nplt.savefig('/workspace/scatter_correlation.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Scatter Plot — Categorical Color (clusters)\n\n```python\nfig, ax = plt.subplots(figsize=(8, 6))\n\nfor i, label in enumerate(sorted(df[\"cluster\"].unique())):\n    mask = df[\"cluster\"] == label\n    ax.scatter(df.loc[mask, \"x\"], df.loc[mask, \"y\"],\n               c=COLORS[i], label=f'Cluster {label}', s=40, alpha=0.7)\n\nax.set_xlabel('X', fontweight='bold')\nax.set_ylabel('Y', fontweight='bold')\nax.set_title('Cluster Visualization', fontweight='bold')\nax.legend()\nax.grid(True, alpha=0.3, linestyle='--')\n\nplt.savefig('/workspace/scatter_clusters.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Heatmap (correlation matrix or confusion matrix)\n\n```python\nimport seaborn as sns\n\nfig, ax = plt.subplots(figsize=(8, 7))\n\n# corr_matrix = to_pd(df[numeric_cols].corr())\nsns.heatmap(corr_matrix, annot=True, fmt='.2f', cmap='RdBu_r', center=0,\n            square=True, linewidths=1, vmin=-1, vmax=1,\n            cbar_kws={'label': 'Correlation'}, ax=ax)\n\nax.set_title('Correlation Matrix', fontweight='bold')\n\nplt.savefig('/workspace/heatmap.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Histogram with KDE\n\n```python\nfig, ax = plt.subplots(figsize=(8, 5))\n\nax.hist(df[\"value\"], bins=30, color=COLORS[0], alpha=0.7,\n        edgecolor='black', linewidth=0.5, density=True, label='Distribution')\n\n# Add KDE curve\nfrom scipy.stats import gaussian_kde\nkde = gaussian_kde(df[\"value\"].dropna())\nx_range = np.linspace(df[\"value\"].min(), df[\"value\"].max(), 200)\nax.plot(x_range, kde(x_range), color=COLORS[1], linewidth=2, label='KDE')\n\nax.set_xlabel('Value', fontweight='bold')\nax.set_ylabel('Density', fontweight='bold')\nax.set_title('Value Distribution', fontweight='bold')\nax.legend()\nax.grid(axis='y', alpha=0.3, linestyle='--')\n\nplt.savefig('/workspace/histogram.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Box Plot (compare groups)\n\n```python\nfig, ax = plt.subplots(figsize=(8, 5))\n\ngroups = [df[df[\"group\"] == g][\"value\"].values for g in group_names]\nbp = ax.boxplot(groups, labels=group_names, patch_artist=True,\n                widths=0.6, showmeans=True,\n                meanprops=dict(marker='D', markerfacecolor='red', markersize=6))\n\nfor i, patch in enumerate(bp['boxes']):\n    patch.set_facecolor(COLORS[i % len(COLORS)])\n    patch.set_alpha(0.7)\n\nax.set_ylabel('Value', fontweight='bold')\nax.set_title('Distribution by Group', fontweight='bold')\nax.grid(axis='y', alpha=0.3, linestyle='--')\nax.set_axisbelow(True)\n\nplt.savefig('/workspace/boxplot.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Multi-Panel Analysis Summary\n\nUse this to create a single image with multiple charts — the most effective way to present a complete analysis.\n\n```python\nfig, axes = plt.subplots(2, 2, figsize=(14, 10))\n\n# Top-left: Distribution\naxes[0, 0].hist(df[\"value\"], bins=30, color=COLORS[0], alpha=0.7, edgecolor='black', linewidth=0.5)\naxes[0, 0].set_title('Value Distribution', fontweight='bold')\naxes[0, 0].set_xlabel('Value')\naxes[0, 0].grid(axis='y', alpha=0.3, linestyle='--')\n\n# Top-right: Scatter\naxes[0, 1].scatter(df[\"x\"], df[\"y\"], c=COLORS[0], s=30, alpha=0.5)\naxes[0, 1].set_title('X vs Y', fontweight='bold')\naxes[0, 1].set_xlabel('X')\naxes[0, 1].set_ylabel('Y')\naxes[0, 1].grid(True, alpha=0.3, linestyle='--')\n\n# Bottom-left: Bar chart\ngroup_means = df.groupby(\"category\")[\"value\"].mean()\naxes[1, 0].bar(group_means.index, group_means.values, color=COLORS[:len(group_means)])\naxes[1, 0].set_title('Mean by Category', fontweight='bold')\naxes[1, 0].set_xlabel('Category')\naxes[1, 0].grid(axis='y', alpha=0.3, linestyle='--')\n\n# Bottom-right: Box plot\naxes[1, 1].boxplot([df[df[\"category\"] == c][\"value\"].values for c in categories],\n                    labels=categories, patch_artist=True)\naxes[1, 1].set_title('Distribution by Category', fontweight='bold')\naxes[1, 1].grid(axis='y', alpha=0.3, linestyle='--')\n\nfig.suptitle('Analysis Summary', fontsize=16, fontweight='bold')\n\nplt.savefig('/workspace/analysis_summary.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Feature Importance Chart (from cuML model)\n\n```python\nfig, ax = plt.subplots(figsize=(8, max(4, len(feature_names) * 0.35)))\n\n# importances = to_pd(model.feature_importances_)\nsorted_idx = np.argsort(importances)\nax.barh(np.array(feature_names)[sorted_idx], importances[sorted_idx],\n        color=COLORS[0], edgecolor='black', linewidth=0.5)\n\nax.set_xlabel('Importance', fontweight='bold')\nax.set_title('Feature Importances', fontweight='bold')\nax.grid(axis='x', alpha=0.3, linestyle='--')\nax.set_axisbelow(True)\n\nplt.savefig('/workspace/feature_importance.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Confusion Matrix (from cuML classification)\n\n```python\nimport seaborn as sns\n\nfig, ax = plt.subplots(figsize=(7, 6))\n\n# cm = confusion_matrix(to_pd(y_test), to_pd(predictions))\nsns.heatmap(cm, annot=True, fmt='d', cmap='Blues', square=True,\n            xticklabels=class_names, yticklabels=class_names,\n            linewidths=1, cbar_kws={'label': 'Count'}, ax=ax)\n\nax.set_xlabel('Predicted', fontweight='bold')\nax.set_ylabel('Actual', fontweight='bold')\nax.set_title('Confusion Matrix', fontweight='bold')\n\nplt.savefig('/workspace/confusion_matrix.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n## Style Rules\n\n- Use `COLORS` palette (colorblind-safe) — never rely on color alone to distinguish elements\n- No pie charts (bar charts are always clearer)\n- No 3D plots (distort data perception)\n- Grid lines at `alpha=0.3, linestyle='--'` with `ax.set_axisbelow(True)`\n- Bold axis labels and titles (`fontweight='bold'`)\n- White background for all exports\n- 1-4 charts per analysis is typical; use multi-panel for more\n\n## Output Guidelines\n\n- Save all charts to `/workspace/` as PNG\n- Print file paths after saving so the agent can reference them\n- For multi-panel summaries, use `figsize=(14, 10)` for 2×2 layouts\n- Keep chart titles descriptive but concise\n- Include units in axis labels when applicable\n","examples/deploy-coding-agent/skills/planning/SKILL.md":"---\nname: planning\ndescription: Break down a coding task into a structured implementation plan with clear steps, file identification, and risk assessment.\n---\n\n# Planning Skill\n\nUse this skill when starting a new coding task to create a thorough implementation plan.\n\n## Steps\n\n### 1. Understand the Task\n- Read the issue/task description completely\n- Identify the expected outcome and acceptance criteria\n- Note any constraints or requirements mentioned\n\n### 2. Explore the Codebase\n- Find the repository root and read the project structure\n- Identify the tech stack (language, framework, test runner)\n- Read README, CONTRIBUTING, or similar docs if they exist\n- Find existing tests to understand testing patterns\n\n### 3. Identify Relevant Files\n- Use `grep` to find code related to the task\n- Read the most relevant files (entry points, related modules)\n- Identify which files need to be modified vs. created\n- Check for existing patterns you should follow\n\n### 4. Write the Plan\nUse `write_todos` to create a structured plan:\n\n```\nwrite_todos([\n    \"1. <specific change in specific file>\",\n    \"2. <next specific change>\",\n    \"3. Write tests for <feature>\",\n    \"4. Run test suite and fix failures\",\n    \"5. Review all changes\"\n])\n```\n\n### 5. Assess Risks\n- Are there breaking changes?\n- Are there edge cases to handle?\n- Does this affect other parts of the codebase?\n- Flag anything uncertain for review\n\n## Guidelines\n\n- Plans should have 3-10 concrete steps\n- Each step should be specific enough to execute without further planning\n- Include test writing and test running as explicit steps\n- End with a review/verification step\n","examples/deploy-content-writer/skills/blog-post/SKILL.md":"---\nname: blog-post\ndescription: Write structured long-form blog posts with research, SEO optimization, and cover image generation.\n---\n\n# Blog Post Writing Skill\n\n## Research First (Required)\n\nBefore writing any blog post, delegate research:\n1. Use the `task` tool with `subagent_type: \"researcher\"`\n2. Specify both the topic AND where to save findings\n\n## Blog Post Structure\n\nEvery blog post should follow this structure:\n\n### 1. Hook (Opening)\n- Start with a compelling question, statistic, or statement\n- Keep it to 2-3 sentences\n\n### 2. Context (The Problem)\n- Explain why this topic matters\n- Connect to the reader's experience\n\n### 3. Main Content (3-5 sections)\n- Each section covers one key point with an H2 header\n- Include code examples where helpful\n- Use bullet points for lists of 3+ items\n\n### 4. Practical Application\n- Show how to apply the concepts\n- Include step-by-step instructions or code snippets\n\n### 5. Conclusion & CTA\n- Summarize key takeaways (3 bullets max)\n- End with a clear call-to-action\n\n## Output\n\nSave the blog post to `blogs/<slug>/post.md`.\n\n## SEO Considerations\n\n- Include the main keyword in the title and first paragraph\n- Keep the title under 60 characters\n- Write a meta description (150-160 characters)\n","examples/deploy-coding-agent/skills/coding-prefs/SKILL.md":"---\nname: coding-prefs\ndescription: Read the user's coding preferences from /memory/coding-prefs.md before making non-trivial style decisions, and append new preferences when the user gives durable feedback.\n---\n\n# Coding Preferences Skill\n\nUse this skill to keep `/memory/coding-prefs.md` in sync with how this\nspecific user wants you to work. This file is **user-scoped**, so each user\nhas their own copy — anything you write here only affects future\nconversations with the same user.\n\n## When to Read\n\n- Before picking a code style, test framework, or commit message format\n- Before deciding whether to add comments, type hints, or docstrings\n- Before refactoring beyond what was asked\n\n## When to Write\n\nAppend a new entry whenever the user gives feedback that should apply to\nfuture work:\n\n- \"Don't add docstrings unless I ask\" → save it\n- \"I prefer pytest over unittest\" → save it\n- \"Stop summarizing what you did at the end\" → save it\n\nEach entry should be one line: the rule, then a brief reason if the user\ngave one.\n\n## How to Write\n\nRead the file first (it may not exist yet), then append. Don't overwrite —\npreferences accumulate over time. If a new preference contradicts an\nexisting one, replace the old line and note the change.\n","examples/content-builder-agent/skills/social-media/SKILL.md":"---\nname: social-media\ndescription: Drafts engaging social media posts, writes hooks, suggests hashtags, creates thread structures, and generates companion images. Use when the user asks to write a LinkedIn post, tweet, Twitter/X thread, social media caption, social post, or repurpose content for social platforms.\n---\n\n# Social Media Content Skill\n\n## Research First (Required)\n\n**Before writing any social media content, you MUST delegate research:**\n\n1. Use the `task` tool with `subagent_type: \"researcher\"`\n2. In the description, specify BOTH the topic AND where to save:\n\n```\ntask(\n    subagent_type=\"researcher\",\n    description=\"Research [TOPIC]. Save findings to research/[slug].md\"\n)\n```\n\nExample:\n```\ntask(\n    subagent_type=\"researcher\",\n    description=\"Research renewable energy trends in 2025. Save findings to research/renewable-energy.md\"\n)\n```\n\n3. After research completes, read the findings file before writing\n\n## Output Structure (Required)\n\n**Every social media post MUST have both content AND an image:**\n\n**LinkedIn posts:**\n```\nlinkedin/\n└── <slug>/\n    ├── post.md        # The post content\n    └── image.png      # REQUIRED: Generated visual\n```\n\n**Twitter/X threads:**\n```\ntweets/\n└── <slug>/\n    ├── thread.md      # The thread content\n    └── image.png      # REQUIRED: Generated visual\n```\n\nExample: A LinkedIn post about \"prompt engineering\" → `linkedin/prompt-engineering/`\n\n**You MUST complete both steps:**\n1. Write the content to the appropriate path\n2. Generate an image using `generate_image` and save alongside the post\n\n**A social media post is NOT complete without its image.**\n\n## Platform Guidelines\n\n### LinkedIn\n\n**Format:**\n- 1,300 character limit (show more after ~210 chars)\n- First line is crucial - make it hook\n- Use line breaks for readability\n- 3-5 hashtags at the end\n\n**Tone:**\n- Professional but personal\n- Share insights and learnings\n- Ask questions to drive engagement\n- Use \"I\" and share experiences\n\n**Structure:**\n```\n[Hook - 1 compelling line]\n\n[Empty line]\n\n[Context - why this matters]\n\n[Empty line]\n\n[Main insight - 2-3 short paragraphs]\n\n[Empty line]\n\n[Call to action or question]\n\n#hashtag1 #hashtag2 #hashtag3\n```\n\n### Twitter/X\n\n**Format:**\n- 280 character limit per tweet\n- Threads for longer content (use 1/🧵 format)\n- No more than 2 hashtags per tweet\n\n**Thread Structure:**\n```\n1/🧵 [Hook - the main insight]\n\n2/ [Supporting point 1]\n\n3/ [Supporting point 2]\n\n4/ [Example or evidence]\n\n5/ [Conclusion + CTA]\n```\n\n## Image Generation\n\nEvery social media post needs an eye-catching image. Use the `generate_social_image` tool:\n\n```\ngenerate_social_image(prompt=\"A detailed description...\", platform=\"linkedin\", slug=\"your-post-slug\")\n```\n\nThe tool saves the image to `<platform>/<slug>/image.png`.\n\n### Social Image Best Practices\n\nSocial images need to work at small sizes in crowded feeds:\n- **Bold, simple compositions** - one clear focal point\n- **High contrast** - stands out when scrolling\n- **No text in image** - too small to read, platforms add their own\n- **Square or 4:5 ratio** - works across platforms\n\n### Writing Effective Prompts\n\nInclude these elements:\n\n1. **Single focal point**: One clear subject, not a busy scene\n2. **Bold style**: Vibrant colors, strong shapes, high contrast\n3. **Simple background**: Solid color, gradient, or subtle texture\n4. **Mood/energy**: Match the post tone (inspiring, urgent, thoughtful)\n\n### Example Prompts\n\n**For an insight/tip post:**\n```\nSingle glowing lightbulb floating against a deep purple gradient background, lightbulb made of interconnected golden geometric lines, rays of soft light emanating outward. Minimal, striking, high contrast. Square composition.\n```\n\n**For announcements/news:**\n```\nAbstract rocket ship made of colorful geometric shapes launching upward with a trail of particles. Bright coral and teal color scheme against clean white background. Energetic, celebratory mood. Bold flat illustration style.\n```\n\n**For thought-provoking content:**\n```\nTwo overlapping translucent circles, one blue one orange, creating a glowing intersection in the center. Represents collaboration or intersection of ideas. Dark charcoal background, soft ethereal glow. Minimalist and contemplative.\n```\n\n## Content Types\n\n### Announcement Posts\n- Lead with the news\n- Explain the impact\n- Include link or next step\n\n### Insight Posts\n- Share one specific learning\n- Explain the context briefly\n- Make it actionable\n\n### Question Posts\n- Ask a genuine question\n- Provide your take first\n- Keep it focused on one topic\n\n## Quality Checklist\n\nBefore finishing:\n- [ ] Post saved to `linkedin/<slug>/post.md` or `tweets/<slug>/thread.md`\n- [ ] Image generated alongside the post\n- [ ] First line hooks attention\n- [ ] Content fits platform limits\n- [ ] Tone matches platform norms\n- [ ] Has clear CTA or question\n- [ ] Hashtags are relevant (not generic)\n","examples/nvidia_deep_agent/skills/gpu-document-processing/SKILL.md":"---\nname: gpu-document-processing\ndescription: Use when processing large PDFs, document collections, or bulk text extraction tasks that benefit from GPU-accelerated processing. Triggers when the user provides large documents or needs bulk document analysis.\n---\n\n# GPU Document Processing Skill\n\nProcess large documents and document collections using GPU-accelerated tools. This skill uses the sandbox-as-tool pattern: the agent runs on CPU for reasoning, and sends document processing work to a GPU-equipped environment.\n\n## When to Use This Skill\n\nUse this skill when:\n- Processing large PDF files (50+ pages)\n- Analyzing collections of documents (10+ files)\n- Extracting structured data from unstructured documents\n- Performing bulk text extraction and chunking\n- Generating embeddings for large document sets\n- The user uploads or references large documents for analysis\n\n## Architecture: Sandbox as Tool\n\nThis skill follows the **sandbox-as-tool pattern** for GPU execution:\n\n1. **Agent reasons on CPU** - planning, synthesis, report writing\n2. **Processing sent to GPU sandbox** - document parsing, embedding, extraction\n3. **Results returned to agent** - structured output for further analysis\n\nThis separation ensures:\n- API keys stay outside the sandbox (security)\n- Agent state persists independently of processing jobs\n- Processing can be parallelized across documents\n- Cost-efficient: GPU used only during processing, not during reasoning\n\n## Capabilities\n\n### PDF Text Extraction\nExtract text content from PDF documents with layout preservation:\n- Headers, paragraphs, lists, and tables detected separately\n- Page numbers and section boundaries preserved\n- Multi-column layout handling\n\n### Tabular Data Extraction\nExtract tables from documents into structured formats:\n- PDF tables to CSV/DataFrames using GPU-accelerated parsing\n- Automatic column type detection\n- Handles merged cells and multi-row headers\n\n### Document Chunking\nSplit large documents into meaningful chunks for analysis:\n- Semantic chunking (by topic/section boundaries)\n- Fixed-size chunking with overlap for embedding\n- Configurable chunk sizes (default: 512 tokens)\n\n### Embedding Generation\nGenerate vector embeddings for document chunks:\n- Uses NVIDIA NeMo Retriever NIM for GPU-accelerated embedding\n- Supports batch processing for large document sets\n- Compatible with standard vector stores (Milvus, ChromaDB)\n\n## Workflow\n\n1. **Receive document reference** from the orchestrator\n2. **Determine processing type** (extraction, analysis, embedding)\n3. **Send to GPU sandbox** for processing\n4. **Collect structured results** (text, tables, embeddings)\n5. **Write findings** to /shared/ for the orchestrator to synthesize\n\n## Processing Large Document Collections\n\nFor multiple documents:\n1. Process documents in parallel batches (3-5 concurrent)\n2. Extract key metadata first (title, date, author, page count)\n3. Generate per-document summaries\n4. Cross-reference findings across documents\n5. Write consolidated findings with per-document citations\n\n## Output Format\n\nWhen reporting document processing results:\n- Include document metadata (filename, pages, size)\n- Structure extracted content by section/chapter\n- Format tables as markdown tables\n- Include page references for all extracted content\n- Note any extraction quality issues (scanned images, corrupted pages)\n\n## Integration with NVIDIA NIM\n\nFor production deployments, GPU document processing can leverage:\n- **NVIDIA NeMo Retriever**: GPU-accelerated embedding and retrieval\n- **NVIDIA RAPIDS cuDF**: Tabular data processing from extracted tables\n- **NVIDIA Triton**: Scalable inference for document classification models\n\nSee NVIDIA's NIM documentation for self-hosted deployment options.\n","examples/content-builder-agent/skills/blog-post/SKILL.md":"---\nname: blog-post\ndescription: Writes and structures long-form blog posts, creates tutorial outlines, and optimizes content for SEO with cover image generation. Use when the user asks to write a blog post, article, how-to guide, tutorial, technical writeup, thought leadership piece, or long-form content.\n---\n\n# Blog Post Writing Skill\n\n## Research First (Required)\n\n**Before writing any blog post, you MUST delegate research:**\n\n1. Use the `task` tool with `subagent_type: \"researcher\"`\n2. In the description, specify BOTH the topic AND where to save:\n\n```\ntask(\n    subagent_type=\"researcher\",\n    description=\"Research [TOPIC]. Save findings to research/[slug].md\"\n)\n```\n\nExample:\n```\ntask(\n    subagent_type=\"researcher\",\n    description=\"Research the current state of AI agents in 2025. Save findings to research/ai-agents-2025.md\"\n)\n```\n\n3. After research completes, read the findings file before writing\n\n## Output Structure (Required)\n\n**Every blog post MUST have both a post AND a cover image:**\n\n```\nblogs/\n└── <slug>/\n    ├── post.md        # The blog post content\n    └── hero.png       # REQUIRED: Generated cover image\n```\n\nExample: A post about \"AI Agents in 2025\" → `blogs/ai-agents-2025/`\n\n**You MUST complete both steps:**\n1. Write the post to `blogs/<slug>/post.md`\n2. Generate a cover image using `generate_image` and save to `blogs/<slug>/hero.png`\n\n**A blog post is NOT complete without its cover image.**\n\n## Blog Post Structure\n\nEvery blog post should follow this structure:\n\n### 1. Hook (Opening)\n- Start with a compelling question, statistic, or statement\n- Make the reader want to continue\n- Keep it to 2-3 sentences\n\n### 2. Context (The Problem)\n- Explain why this topic matters\n- Describe the problem or opportunity\n- Connect to the reader's experience\n\n### 3. Main Content (The Solution)\n- Break into 3-5 main sections with H2 headers\n- Each section covers one key point\n- Include code examples, diagrams, or screenshots where helpful\n- Use bullet points for lists\n\n### 4. Practical Application\n- Show how to apply the concepts\n- Include step-by-step instructions if applicable\n- Provide code snippets or templates\n\n### 5. Conclusion & CTA\n- Summarize key takeaways (3 bullets max)\n- End with a clear call-to-action\n- Link to related resources\n\n## Cover Image Generation\n\nAfter writing the post, generate a cover image using the `generate_cover` tool:\n\n```\ngenerate_cover(prompt=\"A detailed description of the image...\", slug=\"your-blog-slug\")\n```\n\nThe tool saves the image to `blogs/<slug>/hero.png`.\n\n### Writing Effective Image Prompts\n\nStructure your prompt with these elements:\n\n1. **Subject**: What is the main focus? Be specific and concrete.\n2. **Style**: Art direction (minimalist, isometric, flat design, 3D render, watercolor, etc.)\n3. **Composition**: How elements are arranged (centered, rule of thirds, symmetrical)\n4. **Color palette**: Specific colors or mood (warm earth tones, cool blues and purples, high contrast)\n5. **Lighting/Atmosphere**: Soft diffused light, dramatic shadows, golden hour, neon glow\n6. **Technical details**: Aspect ratio considerations, negative space for text overlay\n\n### Example Prompts\n\n**For a technical blog post:**\n```\nIsometric 3D illustration of interconnected glowing cubes representing AI agents, each cube has subtle circuit patterns. Cubes connected by luminous data streams. Deep navy background (#0a192f) with electric blue (#64ffda) and soft purple (#c792ea) accents. Clean minimal style, lots of negative space at top for title. Professional tech aesthetic.\n```\n\n**For a tutorial/how-to:**\n```\nClean flat illustration of hands typing on a keyboard with abstract code symbols floating upward, transforming into lightbulbs and gears. Warm gradient background from soft coral to light peach. Friendly, approachable style. Centered composition with space for text overlay.\n```\n\n**For thought leadership:**\n```\nAbstract visualization of a human silhouette profile merging with geometric neural network patterns. Split composition - organic watercolor texture on left transitioning to clean vector lines on right. Muted sage green and warm terracotta color scheme. Contemplative, forward-thinking mood.\n```\n\n## SEO Considerations\n\n- Include the main keyword in the title and first paragraph\n- Use the keyword naturally 3-5 times throughout\n- Keep the title under 60 characters\n- Write a meta description (150-160 characters)\n\n## Quality Checklist\n\nBefore finishing:\n- [ ] Post saved to `blogs/<slug>/post.md`\n- [ ] Hero image generated at `blogs/<slug>/hero.png`\n- [ ] Hook grabs attention in first 2 sentences\n- [ ] Each section has a clear purpose\n- [ ] Conclusion summarizes key points\n- [ ] CTA tells reader what to do next\n","examples/deploy-coding-agent/skills/code-review/SKILL.md":"---\nname: code-review\ndescription: Perform a structured code review of changes, checking for correctness, style, tests, and potential issues.\n---\n\n# Code Review Skill\n\nUse this skill after implementing changes to validate your work before delivering.\n\n## Review Checklist\n\n### 1. Correctness\n- [ ] Changes solve the original issue/task\n- [ ] No unintended side effects on existing functionality\n- [ ] Edge cases are handled\n- [ ] Error handling is appropriate (not excessive)\n\n### 2. Code Quality\n- [ ] Code matches existing style and patterns\n- [ ] No unnecessary complexity or abstraction\n- [ ] Variable and function names are clear\n- [ ] No dead code, commented-out code, or TODOs left behind\n\n### 3. Tests\n- [ ] New functionality has test coverage\n- [ ] Existing tests still pass\n- [ ] Tests cover both happy path and error cases\n- [ ] Tests are not brittle (don't test implementation details)\n\n### 4. Safety\n- [ ] No hardcoded secrets or credentials\n- [ ] User input is validated at boundaries\n- [ ] No SQL injection, XSS, or command injection vectors\n- [ ] File operations use safe paths\n\n## Process\n\n1. Read each modified file end-to-end (not just the diff)\n2. Run the test suite: `execute(\"python -m pytest -v\")`\n3. Run linters if available: `execute(\"ruff check .\")`\n4. Run the bundled lint check: `execute(\"python /skills/code-review/lint_check.py .\")`\n5. Check against each item in the review checklist\n6. If any issues found, fix them and re-review\n7. When everything passes, the review is complete\n\n## Helper Scripts\n\n- **`/skills/code-review/lint_check.py`** — Scans Python files for missing\n  docstrings, long functions (>50 lines), and bare `except:` clauses. Run it\n  via `execute(\"python /skills/code-review/lint_check.py [path ...]\")`.\n","examples/repl_swarm/skills/swarm/SKILL.md":"# swarm\n\nPath: `examples/repl_swarm/skills/swarm/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/repl_swarm/skills/swarm/SKILL.md)","examples/text-to-sql-agent/skills/schema-exploration/SKILL.md":"# schema-exploration\n\nPath: `examples/text-to-sql-agent/skills/schema-exploration/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/text-to-sql-agent/skills/schema-exploration/SKILL.md)","examples/text-to-sql-agent/skills/query-writing/SKILL.md":"# query-writing\n\nPath: `examples/text-to-sql-agent/skills/query-writing/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/text-to-sql-agent/skills/query-writing/SKILL.md)","libs/code/deepagents_code/built_in_skills/remember/SKILL.md":"# remember\n\nPath: `libs/code/deepagents_code/built_in_skills/remember/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/deepagents_code/built_in_skills/remember/SKILL.md)","libs/code/deepagents_code/built_in_skills/skill-creator/SKILL.md":"# skill-creator\n\nPath: `libs/code/deepagents_code/built_in_skills/skill-creator/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/deepagents_code/built_in_skills/skill-creator/SKILL.md)","libs/code/examples/skills/web-research/SKILL.md":"# web-research\n\nPath: `libs/code/examples/skills/web-research/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/examples/skills/web-research/SKILL.md)","libs/code/examples/skills/skill-creator/SKILL.md":"# skill-creator\n\nPath: `libs/code/examples/skills/skill-creator/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/examples/skills/skill-creator/SKILL.md)","libs/code/examples/skills/langgraph-docs/SKILL.md":"# langgraph-docs\n\nPath: `libs/code/examples/skills/langgraph-docs/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/examples/skills/langgraph-docs/SKILL.md)","libs/code/examples/skills/arxiv-search/SKILL.md":"# arxiv-search\n\nPath: `libs/code/examples/skills/arxiv-search/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/examples/skills/arxiv-search/SKILL.md)","libs/cli/examples/skills/web-research/SKILL.md":"# web-research\n\nPath: `libs/cli/examples/skills/web-research/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/skills/web-research/SKILL.md)","libs/cli/examples/skills/skill-creator/SKILL.md":"# skill-creator\n\nPath: `libs/cli/examples/skills/skill-creator/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/skills/skill-creator/SKILL.md)","libs/cli/examples/skills/langgraph-docs/SKILL.md":"# langgraph-docs\n\nPath: `libs/cli/examples/skills/langgraph-docs/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/skills/langgraph-docs/SKILL.md)","libs/cli/examples/skills/arxiv-search/SKILL.md":"# arxiv-search\n\nPath: `libs/cli/examples/skills/arxiv-search/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/skills/arxiv-search/SKILL.md)","examples/deploy-gtm-agent/subagents/market-researcher/skills/analyze-market/SKILL.md":"# analyze-market\n\nPath: `examples/deploy-gtm-agent/subagents/market-researcher/skills/analyze-market/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/deploy-gtm-agent/subagents/market-researcher/skills/analyze-market/SKILL.md)","libs/cli/examples/deploy-content-writer/skills/social-media/SKILL.md":"# social-media\n\nPath: `libs/cli/examples/deploy-content-writer/skills/social-media/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/deploy-content-writer/skills/social-media/SKILL.md)","libs/cli/examples/deploy-content-writer/skills/blog-post/SKILL.md":"# blog-post\n\nPath: `libs/cli/examples/deploy-content-writer/skills/blog-post/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/deploy-content-writer/skills/blog-post/SKILL.md)","libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/SKILL.md":"# summarize\n\nPath: `libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/SKILL.md)","libs/cli/tests/unit_tests/deploy/fixtures/projects/subagent_with_local_skills/subagents/researcher/skills/note/SKILL.md":"# note\n\nPath: `libs/cli/tests/unit_tests/deploy/fixtures/projects/subagent_with_local_skills/subagents/researcher/skills/note/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/tests/unit_tests/deploy/fixtures/projects/subagent_with_local_skills/subagents/researcher/skills/note/SKILL.md)","AGENTS.md":"# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/AGENTS.md)","libs/evals/AGENTS.md":"# Evals Skill\n\nPath: `libs/evals/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/AGENTS.md)","libs/evals/CONTRIBUTING.md":"# Evals Skill\n\nPath: `libs/evals/CONTRIBUTING.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/CONTRIBUTING.md)","libs/evals/EVAL_CATALOG.md":"# Evals Skill\n\nPath: `libs/evals/EVAL_CATALOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/EVAL_CATALOG.md)","libs/evals/MODEL_GROUPS.md":"# Evals Skill\n\nPath: `libs/evals/MODEL_GROUPS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/MODEL_GROUPS.md)","libs/evals/README.md":"# Evals Skill\n\nPath: `libs/evals/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/README.md)","libs/evals/deepagents_evals/categories.json":"# Deepagents_evals Skill\n\nPath: `libs/evals/deepagents_evals/categories.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/deepagents_evals/categories.json)","libs/evals/tests/evals/README.md":"# Evals Skill\n\nPath: `libs/evals/tests/evals/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/README.md)","libs/evals/tests/evals/fixtures/summarization_seed_messages.json":"# Fixtures Skill\n\nPath: `libs/evals/tests/evals/fixtures/summarization_seed_messages.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/fixtures/summarization_seed_messages.json)","libs/evals/tests/evals/data/benchmark_samples/bfcl_v3_final.json":"# Benchmark_samples Skill\n\nPath: `libs/evals/tests/evals/data/benchmark_samples/bfcl_v3_final.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/data/benchmark_samples/bfcl_v3_final.json)","libs/evals/tests/evals/data/benchmark_samples/frames_final.json":"# Benchmark_samples Skill\n\nPath: `libs/evals/tests/evals/data/benchmark_samples/frames_final.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/data/benchmark_samples/frames_final.json)","libs/evals/tests/evals/data/benchmark_samples/nexus_final.json":"# Benchmark_samples Skill\n\nPath: `libs/evals/tests/evals/data/benchmark_samples/nexus_final.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/data/benchmark_samples/nexus_final.json)","libs/evals/tests/evals/tau2_airline/data/db.json":"# Data Skill\n\nPath: `libs/evals/tests/evals/tau2_airline/data/db.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/tau2_airline/data/db.json)","libs/evals/tests/evals/tau2_airline/data/policy.md":"# Data Skill\n\nPath: `libs/evals/tests/evals/tau2_airline/data/policy.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/tau2_airline/data/policy.md)","libs/evals/tests/evals/tau2_airline/data/tasks.json":"# Data Skill\n\nPath: `libs/evals/tests/evals/tau2_airline/data/tasks.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/tau2_airline/data/tasks.json)","libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/examples.md":"# Summarize Skill\n\nPath: `libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/examples.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/examples.md)"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/AGENTS.md","title":"AI Agent Protocol & Instructions","category":"root-instruction","format":"markdown","content":"# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/AGENTS.md)","tokens":300,"sizeBytes":157},{"name":"SKILL.md","path":"examples/content-builder-agent/skills/blog-post/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/content-builder-agent/skills/blog-post/SKILL.md","title":"blog-post","category":"anthropic-skill","format":"markdown","content":"---\nname: blog-post\ndescription: Writes and structures long-form blog posts, creates tutorial outlines, and optimizes content for SEO with cover image generation. Use when the user asks to write a blog post, article, how-to guide, tutorial, technical writeup, thought leadership piece, or long-form content.\n---\n\n# Blog Post Writing Skill\n\n## Research First (Required)\n\n**Before writing any blog post, you MUST delegate research:**\n\n1. Use the `task` tool with `subagent_type: \"researcher\"`\n2. In the description, specify BOTH the topic AND where to save:\n\n```\ntask(\n    subagent_type=\"researcher\",\n    description=\"Research [TOPIC]. Save findings to research/[slug].md\"\n)\n```\n\nExample:\n```\ntask(\n    subagent_type=\"researcher\",\n    description=\"Research the current state of AI agents in 2025. Save findings to research/ai-agents-2025.md\"\n)\n```\n\n3. After research completes, read the findings file before writing\n\n## Output Structure (Required)\n\n**Every blog post MUST have both a post AND a cover image:**\n\n```\nblogs/\n└── <slug>/\n    ├── post.md        # The blog post content\n    └── hero.png       # REQUIRED: Generated cover image\n```\n\nExample: A post about \"AI Agents in 2025\" → `blogs/ai-agents-2025/`\n\n**You MUST complete both steps:**\n1. Write the post to `blogs/<slug>/post.md`\n2. Generate a cover image using `generate_image` and save to `blogs/<slug>/hero.png`\n\n**A blog post is NOT complete without its cover image.**\n\n## Blog Post Structure\n\nEvery blog post should follow this structure:\n\n### 1. Hook (Opening)\n- Start with a compelling question, statistic, or statement\n- Make the reader want to continue\n- Keep it to 2-3 sentences\n\n### 2. Context (The Problem)\n- Explain why this topic matters\n- Describe the problem or opportunity\n- Connect to the reader's experience\n\n### 3. Main Content (The Solution)\n- Break into 3-5 main sections with H2 headers\n- Each section covers one key point\n- Include code examples, diagrams, or screenshots where helpful\n- Use bullet points for lists\n\n### 4. Practical Application\n- Show how to apply the concepts\n- Include step-by-step instructions if applicable\n- Provide code snippets or templates\n\n### 5. Conclusion & CTA\n- Summarize key takeaways (3 bullets max)\n- End with a clear call-to-action\n- Link to related resources\n\n## Cover Image Generation\n\nAfter writing the post, generate a cover image using the `generate_cover` tool:\n\n```\ngenerate_cover(prompt=\"A detailed description of the image...\", slug=\"your-blog-slug\")\n```\n\nThe tool saves the image to `blogs/<slug>/hero.png`.\n\n### Writing Effective Image Prompts\n\nStructure your prompt with these elements:\n\n1. **Subject**: What is the main focus? Be specific and concrete.\n2. **Style**: Art direction (minimalist, isometric, flat design, 3D render, watercolor, etc.)\n3. **Composition**: How elements are arranged (centered, rule of thirds, symmetrical)\n4. **Color palette**: Specific colors or mood (warm earth tones, cool blues and purples, high contrast)\n5. **Lighting/Atmosphere**: Soft diffused light, dramatic shadows, golden hour, neon glow\n6. **Technical details**: Aspect ratio considerations, negative space for text overlay\n\n### Example Prompts\n\n**For a technical blog post:**\n```\nIsometric 3D illustration of interconnected glowing cubes representing AI agents, each cube has subtle circuit patterns. Cubes connected by luminous data streams. Deep navy background (#0a192f) with electric blue (#64ffda) and soft purple (#c792ea) accents. Clean minimal style, lots of negative space at top for title. Professional tech aesthetic.\n```\n\n**For a tutorial/how-to:**\n```\nClean flat illustration of hands typing on a keyboard with abstract code symbols floating upward, transforming into lightbulbs and gears. Warm gradient background from soft coral to light peach. Friendly, approachable style. Centered composition with space for text overlay.\n```\n\n**For thought leadership:**\n```\nAbstract visualization of a human silhouette profile merging with geometric neural network patterns. Split composition - organic watercolor texture on left transitioning to clean vector lines on right. Muted sage green and warm terracotta color scheme. Contemplative, forward-thinking mood.\n```\n\n## SEO Considerations\n\n- Include the main keyword in the title and first paragraph\n- Use the keyword naturally 3-5 times throughout\n- Keep the title under 60 characters\n- Write a meta description (150-160 characters)\n\n## Quality Checklist\n\nBefore finishing:\n- [ ] Post saved to `blogs/<slug>/post.md`\n- [ ] Hero image generated at `blogs/<slug>/hero.png`\n- [ ] Hook grabs attention in first 2 sentences\n- [ ] Each section has a clear purpose\n- [ ] Conclusion summarizes key points\n- [ ] CTA tells reader what to do next\n","frontmatter":{"name":"blog-post","description":"Writes and structures long-form blog posts, creates tutorial outlines, and optimizes content for SEO with cover image generation. Use when the user asks to write a blog post, article, how-to guide, tutorial, technical writeup, thought leadership piece, or long-form content."},"isInternal":false,"tokens":1093,"sizeBytes":4734},{"name":"SKILL.md","path":"examples/content-builder-agent/skills/social-media/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/content-builder-agent/skills/social-media/SKILL.md","title":"social-media","category":"anthropic-skill","format":"markdown","content":"---\nname: social-media\ndescription: Drafts engaging social media posts, writes hooks, suggests hashtags, creates thread structures, and generates companion images. Use when the user asks to write a LinkedIn post, tweet, Twitter/X thread, social media caption, social post, or repurpose content for social platforms.\n---\n\n# Social Media Content Skill\n\n## Research First (Required)\n\n**Before writing any social media content, you MUST delegate research:**\n\n1. Use the `task` tool with `subagent_type: \"researcher\"`\n2. In the description, specify BOTH the topic AND where to save:\n\n```\ntask(\n    subagent_type=\"researcher\",\n    description=\"Research [TOPIC]. Save findings to research/[slug].md\"\n)\n```\n\nExample:\n```\ntask(\n    subagent_type=\"researcher\",\n    description=\"Research renewable energy trends in 2025. Save findings to research/renewable-energy.md\"\n)\n```\n\n3. After research completes, read the findings file before writing\n\n## Output Structure (Required)\n\n**Every social media post MUST have both content AND an image:**\n\n**LinkedIn posts:**\n```\nlinkedin/\n└── <slug>/\n    ├── post.md        # The post content\n    └── image.png      # REQUIRED: Generated visual\n```\n\n**Twitter/X threads:**\n```\ntweets/\n└── <slug>/\n    ├── thread.md      # The thread content\n    └── image.png      # REQUIRED: Generated visual\n```\n\nExample: A LinkedIn post about \"prompt engineering\" → `linkedin/prompt-engineering/`\n\n**You MUST complete both steps:**\n1. Write the content to the appropriate path\n2. Generate an image using `generate_image` and save alongside the post\n\n**A social media post is NOT complete without its image.**\n\n## Platform Guidelines\n\n### LinkedIn\n\n**Format:**\n- 1,300 character limit (show more after ~210 chars)\n- First line is crucial - make it hook\n- Use line breaks for readability\n- 3-5 hashtags at the end\n\n**Tone:**\n- Professional but personal\n- Share insights and learnings\n- Ask questions to drive engagement\n- Use \"I\" and share experiences\n\n**Structure:**\n```\n[Hook - 1 compelling line]\n\n[Empty line]\n\n[Context - why this matters]\n\n[Empty line]\n\n[Main insight - 2-3 short paragraphs]\n\n[Empty line]\n\n[Call to action or question]\n\n#hashtag1 #hashtag2 #hashtag3\n```\n\n### Twitter/X\n\n**Format:**\n- 280 character limit per tweet\n- Threads for longer content (use 1/🧵 format)\n- No more than 2 hashtags per tweet\n\n**Thread Structure:**\n```\n1/🧵 [Hook - the main insight]\n\n2/ [Supporting point 1]\n\n3/ [Supporting point 2]\n\n4/ [Example or evidence]\n\n5/ [Conclusion + CTA]\n```\n\n## Image Generation\n\nEvery social media post needs an eye-catching image. Use the `generate_social_image` tool:\n\n```\ngenerate_social_image(prompt=\"A detailed description...\", platform=\"linkedin\", slug=\"your-post-slug\")\n```\n\nThe tool saves the image to `<platform>/<slug>/image.png`.\n\n### Social Image Best Practices\n\nSocial images need to work at small sizes in crowded feeds:\n- **Bold, simple compositions** - one clear focal point\n- **High contrast** - stands out when scrolling\n- **No text in image** - too small to read, platforms add their own\n- **Square or 4:5 ratio** - works across platforms\n\n### Writing Effective Prompts\n\nInclude these elements:\n\n1. **Single focal point**: One clear subject, not a busy scene\n2. **Bold style**: Vibrant colors, strong shapes, high contrast\n3. **Simple background**: Solid color, gradient, or subtle texture\n4. **Mood/energy**: Match the post tone (inspiring, urgent, thoughtful)\n\n### Example Prompts\n\n**For an insight/tip post:**\n```\nSingle glowing lightbulb floating against a deep purple gradient background, lightbulb made of interconnected golden geometric lines, rays of soft light emanating outward. Minimal, striking, high contrast. Square composition.\n```\n\n**For announcements/news:**\n```\nAbstract rocket ship made of colorful geometric shapes launching upward with a trail of particles. Bright coral and teal color scheme against clean white background. Energetic, celebratory mood. Bold flat illustration style.\n```\n\n**For thought-provoking content:**\n```\nTwo overlapping translucent circles, one blue one orange, creating a glowing intersection in the center. Represents collaboration or intersection of ideas. Dark charcoal background, soft ethereal glow. Minimalist and contemplative.\n```\n\n## Content Types\n\n### Announcement Posts\n- Lead with the news\n- Explain the impact\n- Include link or next step\n\n### Insight Posts\n- Share one specific learning\n- Explain the context briefly\n- Make it actionable\n\n### Question Posts\n- Ask a genuine question\n- Provide your take first\n- Keep it focused on one topic\n\n## Quality Checklist\n\nBefore finishing:\n- [ ] Post saved to `linkedin/<slug>/post.md` or `tweets/<slug>/thread.md`\n- [ ] Image generated alongside the post\n- [ ] First line hooks attention\n- [ ] Content fits platform limits\n- [ ] Tone matches platform norms\n- [ ] Has clear CTA or question\n- [ ] Hashtags are relevant (not generic)\n","frontmatter":{"name":"social-media","description":"Drafts engaging social media posts, writes hooks, suggests hashtags, creates thread structures, and generates companion images. Use when the user asks to write a LinkedIn post, tweet, Twitter/X thread, social media caption, social post, or repurpose content for social platforms."},"isInternal":false,"tokens":1152,"sizeBytes":4924},{"name":"SKILL.md","path":"examples/deploy-coding-agent/skills/code-review/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/deploy-coding-agent/skills/code-review/SKILL.md","title":"code-review","category":"anthropic-skill","format":"markdown","content":"---\nname: code-review\ndescription: Perform a structured code review of changes, checking for correctness, style, tests, and potential issues.\n---\n\n# Code Review Skill\n\nUse this skill after implementing changes to validate your work before delivering.\n\n## Review Checklist\n\n### 1. Correctness\n- [ ] Changes solve the original issue/task\n- [ ] No unintended side effects on existing functionality\n- [ ] Edge cases are handled\n- [ ] Error handling is appropriate (not excessive)\n\n### 2. Code Quality\n- [ ] Code matches existing style and patterns\n- [ ] No unnecessary complexity or abstraction\n- [ ] Variable and function names are clear\n- [ ] No dead code, commented-out code, or TODOs left behind\n\n### 3. Tests\n- [ ] New functionality has test coverage\n- [ ] Existing tests still pass\n- [ ] Tests cover both happy path and error cases\n- [ ] Tests are not brittle (don't test implementation details)\n\n### 4. Safety\n- [ ] No hardcoded secrets or credentials\n- [ ] User input is validated at boundaries\n- [ ] No SQL injection, XSS, or command injection vectors\n- [ ] File operations use safe paths\n\n## Process\n\n1. Read each modified file end-to-end (not just the diff)\n2. Run the test suite: `execute(\"python -m pytest -v\")`\n3. Run linters if available: `execute(\"ruff check .\")`\n4. Run the bundled lint check: `execute(\"python /skills/code-review/lint_check.py .\")`\n5. Check against each item in the review checklist\n6. If any issues found, fix them and re-review\n7. When everything passes, the review is complete\n\n## Helper Scripts\n\n- **`/skills/code-review/lint_check.py`** — Scans Python files for missing\n  docstrings, long functions (>50 lines), and bare `except:` clauses. Run it\n  via `execute(\"python /skills/code-review/lint_check.py [path ...]\")`.\n","frontmatter":{"name":"code-review","description":"Perform a structured code review of changes, checking for correctness, style, tests, and potential issues."},"isInternal":false,"tokens":423,"sizeBytes":1757},{"name":"SKILL.md","path":"examples/deploy-coding-agent/skills/coding-prefs/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/deploy-coding-agent/skills/coding-prefs/SKILL.md","title":"coding-prefs","category":"anthropic-skill","format":"markdown","content":"---\nname: coding-prefs\ndescription: Read the user's coding preferences from /memory/coding-prefs.md before making non-trivial style decisions, and append new preferences when the user gives durable feedback.\n---\n\n# Coding Preferences Skill\n\nUse this skill to keep `/memory/coding-prefs.md` in sync with how this\nspecific user wants you to work. This file is **user-scoped**, so each user\nhas their own copy — anything you write here only affects future\nconversations with the same user.\n\n## When to Read\n\n- Before picking a code style, test framework, or commit message format\n- Before deciding whether to add comments, type hints, or docstrings\n- Before refactoring beyond what was asked\n\n## When to Write\n\nAppend a new entry whenever the user gives feedback that should apply to\nfuture work:\n\n- \"Don't add docstrings unless I ask\" → save it\n- \"I prefer pytest over unittest\" → save it\n- \"Stop summarizing what you did at the end\" → save it\n\nEach entry should be one line: the rule, then a brief reason if the user\ngave one.\n\n## How to Write\n\nRead the file first (it may not exist yet), then append. Don't overwrite —\npreferences accumulate over time. If a new preference contradicts an\nexisting one, replace the old line and note the change.\n","frontmatter":{"name":"coding-prefs","description":"Read the user's coding preferences from /memory/coding-prefs.md before making non-trivial style decisions, and append new preferences when the user gives durable feedback."},"isInternal":false,"tokens":286,"sizeBytes":1254},{"name":"SKILL.md","path":"examples/deploy-coding-agent/skills/planning/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/deploy-coding-agent/skills/planning/SKILL.md","title":"planning","category":"anthropic-skill","format":"markdown","content":"---\nname: planning\ndescription: Break down a coding task into a structured implementation plan with clear steps, file identification, and risk assessment.\n---\n\n# Planning Skill\n\nUse this skill when starting a new coding task to create a thorough implementation plan.\n\n## Steps\n\n### 1. Understand the Task\n- Read the issue/task description completely\n- Identify the expected outcome and acceptance criteria\n- Note any constraints or requirements mentioned\n\n### 2. Explore the Codebase\n- Find the repository root and read the project structure\n- Identify the tech stack (language, framework, test runner)\n- Read README, CONTRIBUTING, or similar docs if they exist\n- Find existing tests to understand testing patterns\n\n### 3. Identify Relevant Files\n- Use `grep` to find code related to the task\n- Read the most relevant files (entry points, related modules)\n- Identify which files need to be modified vs. created\n- Check for existing patterns you should follow\n\n### 4. Write the Plan\nUse `write_todos` to create a structured plan:\n\n```\nwrite_todos([\n    \"1. <specific change in specific file>\",\n    \"2. <next specific change>\",\n    \"3. Write tests for <feature>\",\n    \"4. Run test suite and fix failures\",\n    \"5. Review all changes\"\n])\n```\n\n### 5. Assess Risks\n- Are there breaking changes?\n- Are there edge cases to handle?\n- Does this affect other parts of the codebase?\n- Flag anything uncertain for review\n\n## Guidelines\n\n- Plans should have 3-10 concrete steps\n- Each step should be specific enough to execute without further planning\n- Include test writing and test running as explicit steps\n- End with a review/verification step\n","frontmatter":{"name":"planning","description":"Break down a coding task into a structured implementation plan with clear steps, file identification, and risk assessment."},"isInternal":false,"tokens":361,"sizeBytes":1635},{"name":"SKILL.md","path":"examples/deploy-content-writer/skills/blog-post/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/deploy-content-writer/skills/blog-post/SKILL.md","title":"blog-post","category":"anthropic-skill","format":"markdown","content":"---\nname: blog-post\ndescription: Write structured long-form blog posts with research, SEO optimization, and cover image generation.\n---\n\n# Blog Post Writing Skill\n\n## Research First (Required)\n\nBefore writing any blog post, delegate research:\n1. Use the `task` tool with `subagent_type: \"researcher\"`\n2. Specify both the topic AND where to save findings\n\n## Blog Post Structure\n\nEvery blog post should follow this structure:\n\n### 1. Hook (Opening)\n- Start with a compelling question, statistic, or statement\n- Keep it to 2-3 sentences\n\n### 2. Context (The Problem)\n- Explain why this topic matters\n- Connect to the reader's experience\n\n### 3. Main Content (3-5 sections)\n- Each section covers one key point with an H2 header\n- Include code examples where helpful\n- Use bullet points for lists of 3+ items\n\n### 4. Practical Application\n- Show how to apply the concepts\n- Include step-by-step instructions or code snippets\n\n### 5. Conclusion & CTA\n- Summarize key takeaways (3 bullets max)\n- End with a clear call-to-action\n\n## Output\n\nSave the blog post to `blogs/<slug>/post.md`.\n\n## SEO Considerations\n\n- Include the main keyword in the title and first paragraph\n- Keep the title under 60 characters\n- Write a meta description (150-160 characters)\n","frontmatter":{"name":"blog-post","description":"Write structured long-form blog posts with research, SEO optimization, and cover image generation."},"isInternal":false,"tokens":296,"sizeBytes":1249},{"name":"SKILL.md","path":"examples/deploy-content-writer/skills/social-media/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/deploy-content-writer/skills/social-media/SKILL.md","title":"social-media","category":"anthropic-skill","format":"markdown","content":"---\nname: social-media\ndescription: Create social media content including Twitter/X threads, LinkedIn posts, and short-form updates.\n---\n\n# Social Media Content Skill\n\n## Formats\n\n### Twitter/X Thread\n- Hook tweet: compelling question or bold statement (< 280 chars)\n- 3-7 follow-up tweets expanding on the topic\n- Final tweet with CTA or key takeaway\n- Use line breaks for readability\n\n### LinkedIn Post\n- Opening hook (first 2 lines visible before \"see more\")\n- 3-5 short paragraphs with key insights\n- End with a question to drive engagement\n- 1,300 character target length\n\n### Short-form Update\n- Single paragraph announcement or insight\n- Link to longer content if available\n- Under 280 characters for cross-platform use\n\n## Guidelines\n\n- Write in first person for LinkedIn, third person for company accounts\n- Include 2-3 relevant hashtags (not more)\n- Adapt tone: LinkedIn is more professional, Twitter is more conversational\n- Every post should provide standalone value — don't just tease\n- Use concrete numbers and results over vague claims\n\n## Output\n\nSave content to `social/<platform>/<slug>.md` (e.g., `social/twitter/ai-agents-thread.md`).\n","frontmatter":{"name":"social-media","description":"Create social media content including Twitter/X threads, LinkedIn posts, and short-form updates."},"isInternal":false,"tokens":258,"sizeBytes":1157},{"name":"SKILL.md","path":"examples/deploy-gtm-agent/skills/competitor-analysis/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/deploy-gtm-agent/skills/competitor-analysis/SKILL.md","title":"competitor-analysis","category":"anthropic-skill","format":"markdown","content":"---\nname: competitor-analysis\ndescription: >-\n  Analyze competitors in a given market segment.\n  Trigger on: competitive landscape, competitor analysis,\n  market comparison, competitive positioning.\n---\n\n# Competitor Analysis\n\nWhen asked to analyze competitors:\n\n1. Identify the top 3-5 competitors in the target segment\n2. For each competitor, assess:\n   - Product positioning and key differentiators\n   - Pricing model and tiers\n   - Target audience and market share estimates\n   - Strengths and weaknesses\n3. Create a comparison matrix\n4. Identify gaps and opportunities for differentiation\n","frontmatter":{"name":"competitor-analysis","description":"Analyze competitors in a given market segment. Trigger on: competitive landscape, competitor analysis, market comparison, competitive positioning."},"isInternal":false,"tokens":120,"sizeBytes":594},{"name":"SKILL.md","path":"examples/deploy-gtm-agent/subagents/market-researcher/skills/analyze-market/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/deploy-gtm-agent/subagents/market-researcher/skills/analyze-market/SKILL.md","title":"analyze-market","category":"anthropic-skill","format":"markdown","content":"# analyze-market\n\nPath: `examples/deploy-gtm-agent/subagents/market-researcher/skills/analyze-market/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/deploy-gtm-agent/subagents/market-researcher/skills/analyze-market/SKILL.md)","tokens":300,"sizeBytes":289},{"name":"SKILL.md","path":"examples/nvidia_deep_agent/skills/cudf-analytics/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/nvidia_deep_agent/skills/cudf-analytics/SKILL.md","title":"cudf-analytics","category":"anthropic-skill","format":"markdown","content":"---\nname: cudf-analytics\ndescription: Use for GPU-accelerated data analysis on datasets, CSVs, or tabular data using NVIDIA cuDF. Triggers when tasks involve groupby aggregations, statistical summaries, anomaly detection, or large-scale data profiling.\n---\n\n# cuDF Analytics Skill\n\nGPU-accelerated data analysis using NVIDIA RAPIDS cuDF. cuDF provides a pandas-like API that runs on NVIDIA GPUs, enabling massive speedups on large datasets.\n\n## When to Use This Skill\n\nUse this skill when:\n- Analyzing CSV files, datasets, or tabular data\n- Computing statistical summaries (mean, median, std, quartiles)\n- Performing groupby aggregations\n- Detecting anomalies or outliers in data\n- Profiling datasets with millions of rows\n- Computing correlation matrices\n\n## Initialization (REQUIRED)\n\nAlways start every script with this boilerplate. It tests actual GPU operations, not just import.\n\n```python\nimport pandas as pd\n\ntry:\n    import cudf\n    # Smoke-test: verify GPU compute AND host transfer both work\n    _test = cudf.Series([1, 2, 3])\n    assert _test.sum() == 6\n    assert _test.to_pandas().tolist() == [1, 2, 3]\n    GPU = True\nexcept Exception as e:\n    print(f\"[GPU] cudf unavailable, falling back to pandas: {e}\")\n    GPU = False\n\ndef read_csv(path):\n    return cudf.read_csv(path) if GPU else pd.read_csv(path)\n\ndef to_pd(df):\n    \"\"\"Convert cuDF DataFrame/Series to pandas. Use this instead of .to_pandas() directly.\"\"\"\n    if not GPU:\n        return df\n    try:\n        return df.to_pandas()\n    except Exception as e:\n        print(f\"[GPU] .to_pandas() failed, using Arrow fallback: {e}\")\n        return df.to_arrow().to_pandas()\n```\n\n## Quick Reference\n\ncuDF mirrors the pandas API. Common operations:\n\n### Read Data\n```python\ndf = read_csv(\"data.csv\")\n```\n\n### Statistical Summary\n```python\n# Use to_pd() when you need pandas output\nsummary = to_pd(df[[\"value\", \"score\"]].describe())\n\n# Scalar values work directly with float()\nmean_val = float(df[\"value\"].mean())\nq1 = float(df[\"value\"].quantile(0.25))\n\n# Correlation\ncorr = float(df[\"value\"].corr(df[\"score\"]))\n```\n\n### Groupby Aggregation\n```python\nresult = df.groupby(\"category\").agg({\n    \"revenue\": [\"sum\", \"mean\", \"count\"],\n    \"quantity\": [\"sum\", \"mean\"],\n})\nresult_pd = to_pd(result)\n```\n\n### Anomaly Detection (IQR Method)\n```python\ncol = \"value\"\nQ1 = float(df[col].quantile(0.25))\nQ3 = float(df[col].quantile(0.75))\nIQR = Q3 - Q1\nlower = Q1 - 1.5 * IQR\nupper = Q3 + 1.5 * IQR\noutliers = to_pd(df[(df[col] < lower) | (df[col] > upper)])\n```\n\n### Anomaly Detection (Z-Score Method)\n```python\nmean = float(df[col].mean())\nstd = float(df[col].std())\ndf[\"z_score\"] = (df[col] - mean) / std\nanomalies = to_pd(df[df[\"z_score\"].abs() > 3])\n```\n\n### Filtering and Selection\n```python\n# Filter rows\nfiltered = df[df[\"status\"] == \"active\"]\n\n# Select columns\nsubset = df[[\"name\", \"revenue\", \"date\"]]\n\n# Sort\nsorted_df = df.sort_values(\"revenue\", ascending=False)\n\n# Convert to pandas for final output / iteration\nresult_pd = to_pd(sorted_df)\n```\n\n## Data Type Requirements\n\ncuDF requires explicit type specification for optimal performance:\n- Use `float32` or `float64` for numeric data\n- Use `int32` or `int64` for integer data\n- String columns use cuDF's string dtype automatically\n\n## Output Guidelines\n\nWhen reporting analysis results:\n- Include dataset dimensions (rows x columns)\n- Show key statistics in formatted tables\n- Highlight notable patterns, trends, or anomalies\n- Provide both summary statistics and specific examples\n- Note any data quality issues (missing values, outliers)\n","frontmatter":{"name":"cudf-analytics","description":"Use for GPU-accelerated data analysis on datasets, CSVs, or tabular data using NVIDIA cuDF. Triggers when tasks involve groupby aggregations, statistical summaries, anomaly detection, or large-scale data profiling."},"isInternal":false,"tokens":930,"sizeBytes":3555},{"name":"SKILL.md","path":"examples/nvidia_deep_agent/skills/cuml-machine-learning/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/nvidia_deep_agent/skills/cuml-machine-learning/SKILL.md","title":"cuml-machine-learning","category":"anthropic-skill","format":"markdown","content":"---\nname: cuml-machine-learning\ndescription: Use for GPU-accelerated machine learning on tabular data using NVIDIA cuML. Triggers when tasks involve classification, regression, clustering, dimensionality reduction, or model training on datasets.\n---\n\n# cuML Machine Learning Skill\n\nGPU-accelerated machine learning using NVIDIA RAPIDS cuML. cuML provides a scikit-learn-compatible API that runs on NVIDIA GPUs, enabling massive speedups on large datasets.\n\n## When to Use This Skill\n\nUse this skill when:\n- Training classification models (predict categories, detect fraud, classify text)\n- Training regression models (forecast values, predict prices, estimate quantities)\n- Clustering data (segment customers, group documents, find patterns)\n- Dimensionality reduction (visualize high-dimensional data, compress features)\n- Preprocessing and feature engineering on large datasets\n- Any ML task on datasets with 10K+ rows where GPU acceleration helps\n\n## Initialization (REQUIRED)\n\nAlways start every script with this boilerplate. It tests actual GPU ML operations.\n\n```python\nimport pandas as pd\nimport numpy as np\n\ntry:\n    import cudf\n    import cuml\n    # Smoke-test: verify GPU ML works end-to-end\n    _test_data = cudf.DataFrame({'a': [1.0, 2.0, 3.0, 4.0], 'b': [5.0, 6.0, 7.0, 8.0]})\n    _km = cuml.cluster.KMeans(n_clusters=2, n_init=1, random_state=42)\n    _km.fit(_test_data)\n    assert len(_km.labels_) == 4\n    GPU = True\nexcept Exception as e:\n    print(f\"[GPU] cuml unavailable, falling back to scikit-learn: {e}\")\n    GPU = False\n\ndef read_csv(path):\n    return cudf.read_csv(path) if GPU else pd.read_csv(path)\n\ndef to_pd(df):\n    \"\"\"Convert cuML/cuDF output to pandas. Use this instead of .to_pandas() directly.\"\"\"\n    if not GPU:\n        return df\n    try:\n        return df.to_pandas()\n    except Exception as e:\n        print(f\"[GPU] .to_pandas() failed, using Arrow fallback: {e}\")\n        return df.to_arrow().to_pandas()\n```\n\n## Import Patterns\n\n```python\n# GPU mode\nif GPU:\n    from cuml.cluster import KMeans, DBSCAN, HDBSCAN\n    from cuml.ensemble import RandomForestClassifier, RandomForestRegressor\n    from cuml.linear_model import LinearRegression, Ridge, Lasso, LogisticRegression\n    from cuml.neighbors import KNeighborsClassifier, KNeighborsRegressor\n    from cuml.svm import SVC, SVR\n    from cuml.decomposition import PCA, TruncatedSVD\n    from cuml.manifold import UMAP, TSNE\n    from cuml.preprocessing import StandardScaler, MinMaxScaler, LabelEncoder\n    from cuml.model_selection import train_test_split\n    from cuml.metrics import accuracy_score, r2_score, mean_squared_error\n# CPU fallback\nelse:\n    from sklearn.cluster import KMeans, DBSCAN, HDBSCAN\n    from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor\n    from sklearn.linear_model import LinearRegression, Ridge, Lasso, LogisticRegression\n    from sklearn.neighbors import KNeighborsClassifier, KNeighborsRegressor\n    from sklearn.svm import SVC, SVR\n    from sklearn.decomposition import PCA, TruncatedSVD\n    from sklearn.manifold import TSNE\n    from sklearn.preprocessing import StandardScaler, MinMaxScaler, LabelEncoder\n    from sklearn.model_selection import train_test_split\n    from sklearn.metrics import accuracy_score, r2_score, mean_squared_error\n    # UMAP not in sklearn — skip or pip install umap-learn\n```\n\n## Quick Reference\n\n### Train/Test Split (Start Here)\n\n```python\nX = df[[\"feature1\", \"feature2\", \"feature3\"]].astype(\"float32\")\ny = df[\"target\"]\n\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n```\n\n### Classification\n\n```python\nmodel = RandomForestClassifier(n_estimators=100, max_depth=10, random_state=42)\nmodel.fit(X_train, y_train)\n\npredictions = model.predict(X_test)\naccuracy = float(accuracy_score(to_pd(y_test), to_pd(predictions)))\nprint(f\"Accuracy: {accuracy:.4f}\")\n\n# Feature importances (tree models only)\nimportances = to_pd(model.feature_importances_)\nfor name, imp in zip(feature_names, importances):\n    print(f\"  {name}: {imp:.4f}\")\n```\n\n### Regression\n\n```python\nmodel = Ridge(alpha=1.0)\nmodel.fit(X_train, y_train)\n\npredictions = model.predict(X_test)\nr2 = float(r2_score(to_pd(y_test), to_pd(predictions)))\nmse = float(mean_squared_error(to_pd(y_test), to_pd(predictions)))\nprint(f\"R² Score: {r2:.4f}\")\nprint(f\"MSE: {mse:.4f}\")\n\n# Coefficients\ncoeffs = to_pd(model.coef_)\nprint(f\"Intercept: {float(model.intercept_):.4f}\")\n```\n\n### Clustering (KMeans)\n\n```python\nX = df[[\"feature1\", \"feature2\"]].astype(\"float32\")\n\nmodel = KMeans(n_clusters=4, n_init=10, random_state=42)\nmodel.fit(X)\n\nlabels = to_pd(model.labels_)\ncentroids = to_pd(model.cluster_centers_)\ninertia = float(model.inertia_)\n\nprint(f\"Inertia: {inertia:.2f}\")\nprint(f\"Cluster sizes: {labels.value_counts().sort_index().to_dict()}\")\nprint(f\"Centroids:\\n{centroids}\")\n```\n\n### Dimensionality Reduction (PCA)\n\n```python\nscaler = StandardScaler()\nX_scaled = scaler.fit_transform(X.astype(\"float32\"))\n\npca = PCA(n_components=3)\nX_reduced = pca.fit_transform(X_scaled)\n\nvariance_ratio = to_pd(pca.explained_variance_ratio_)\nprint(f\"Explained variance: {[f'{v:.4f}' for v in variance_ratio]}\")\nprint(f\"Total explained: {float(sum(variance_ratio)):.4f}\")\n```\n\n### Dimensionality Reduction (UMAP — GPU only)\n\n```python\nif GPU:\n    reducer = UMAP(n_components=2, n_neighbors=15, min_dist=0.1, random_state=42)\n    embedding = to_pd(reducer.fit_transform(X_scaled))\n    print(f\"UMAP embedding shape: {embedding.shape}\")\n```\n\n### Preprocessing\n\n```python\n# Scale numeric features\nscaler = StandardScaler()\nX_scaled = scaler.fit_transform(X.astype(\"float32\"))\n\n# Encode categorical columns\nle = LabelEncoder()\ndf[\"category_encoded\"] = le.fit_transform(df[\"category\"])\n```\n\n## Data Type Requirements\n\n- cuML requires **float32 or float64** for features. Always cast: `X.astype(\"float32\")`\n- Integer targets (classification labels) work directly\n- Categorical columns must be encoded first (LabelEncoder or OneHotEncoder)\n- cuML does NOT support sparse matrices — always use dense data\n\n## Gotchas\n\n| Issue | Fix |\n|-------|-----|\n| `TypeError: sparse input` | Convert to dense: `X.toarray()` or don't use sparse |\n| PCA `solver='randomized'` fails | Use `solver='full'` or omit (cuML auto-selects) |\n| UMAP not available on CPU | Skip UMAP in CPU mode or `pip install umap-learn` |\n| Float64 slower than float32 | Cast to float32: `X.astype(\"float32\")` |\n| Large dataset OOM | Reduce features or sample data before fitting |\n\n## Output Guidelines\n\nWhen reporting ML results:\n- Include dataset shape (rows × features) and target distribution\n- Show train/test split sizes\n- Report key metrics in a formatted table (accuracy, R², MSE, etc.)\n- For classification: show per-class metrics if multi-class\n- For clustering: show cluster sizes and centroid summaries\n- For dimensionality reduction: show explained variance ratios\n- List feature importances ranked by magnitude\n- Note any data quality issues (class imbalance, missing values, outliers)\n","frontmatter":{"name":"cuml-machine-learning","description":"Use for GPU-accelerated machine learning on tabular data using NVIDIA cuML. Triggers when tasks involve classification, regression, clustering, dimensionality reduction, or model training on datasets."},"isInternal":false,"tokens":1758,"sizeBytes":7014},{"name":"SKILL.md","path":"examples/nvidia_deep_agent/skills/data-visualization/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/nvidia_deep_agent/skills/data-visualization/SKILL.md","title":"data-visualization","category":"anthropic-skill","format":"markdown","content":"---\nname: data-visualization\ndescription: Use for creating publication-quality charts and multi-panel analysis summaries. Triggers when tasks involve visualizing data, plotting results, creating charts, or producing visual reports from analysis output.\n---\n\n# Data Visualization Skill\n\nCreate publication-quality analytical charts using matplotlib and seaborn in a headless GPU sandbox. Charts are saved as PNG files to `/workspace/` for retrieval.\n\n## When to Use This Skill\n\nUse this skill when:\n- Visualizing results from cuDF analysis or cuML models\n- Creating charts (bar, line, scatter, heatmap, histogram, box plot)\n- Building multi-panel analysis summaries\n- The user asks for visual output, plots, graphs, or charts\n- Presenting statistical findings with figures\n\n## Initialization (REQUIRED)\n\nMUST call `matplotlib.use('Agg')` BEFORE importing pyplot. This enables headless rendering.\n\n```python\nimport matplotlib\nmatplotlib.use('Agg')  # Headless backend — MUST be before pyplot import\nimport matplotlib.pyplot as plt\nimport numpy as np\n\n# Publication-quality defaults\nplt.rcParams.update({\n    'figure.dpi': 100,\n    'savefig.dpi': 300,\n    'font.size': 11,\n    'axes.labelsize': 12,\n    'axes.titlesize': 14,\n    'xtick.labelsize': 10,\n    'ytick.labelsize': 10,\n    'legend.fontsize': 10,\n    'figure.constrained_layout.use': True,\n})\n\n# Colorblind-safe palette (Okabe-Ito)\nCOLORS = ['#0173B2', '#DE8F05', '#029E73', '#D55E00', '#CC78BC',\n          '#CA9161', '#FBAFE4', '#949494', '#ECE133', '#56B4E9']\n```\n\n## Saving Charts\n\nAlways save to `/workspace/` with these settings:\n\n```python\nplt.savefig('/workspace/chart_name.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n- `dpi=300` for print quality\n- `bbox_inches='tight'` removes excess whitespace\n- `facecolor='white'` ensures white background\n- Always call `plt.close()` after saving to free memory\n\n## Displaying Charts (REQUIRED)\n\nAfter saving any chart, you MUST call `read_file` on it to display it inline in the conversation:\n\n```\nread_file(\"/workspace/chart_name.png\")\n```\n\nUsers cannot see charts unless you do this. Every chart you save MUST be followed by a `read_file` call.\n\n## Quick Reference\n\n### Bar Chart (from groupby results)\n\n```python\n# After: result = to_pd(df.groupby(\"category\")[\"value\"].mean())\nfig, ax = plt.subplots(figsize=(8, 5))\n\nbars = ax.bar(result.index, result.values, color=COLORS[:len(result)],\n              edgecolor='black', linewidth=0.8)\n\nfor bar in bars:\n    height = bar.get_height()\n    ax.text(bar.get_x() + bar.get_width()/2., height,\n            f'{height:.1f}', ha='center', va='bottom', fontsize=9)\n\nax.set_ylabel('Mean Value', fontweight='bold')\nax.set_xlabel('Category', fontweight='bold')\nax.set_title('Average Value by Category', fontweight='bold')\nax.grid(axis='y', alpha=0.3, linestyle='--')\nax.set_axisbelow(True)\n\nplt.savefig('/workspace/bar_chart.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Line Chart (trends over time)\n\n```python\nfig, ax = plt.subplots(figsize=(10, 5))\n\nfor i, col in enumerate(columns_to_plot):\n    ax.plot(df[\"date\"], df[col], label=col, color=COLORS[i], linewidth=2,\n            marker='o', markersize=3, markevery=max(1, len(df)//20))\n\nax.set_ylabel('Values', fontweight='bold')\nax.set_xlabel('Date', fontweight='bold')\nax.set_title('Trends Over Time', fontweight='bold')\nax.legend(frameon=True, shadow=False)\nax.grid(True, alpha=0.3, linestyle='--')\nax.set_axisbelow(True)\nplt.xticks(rotation=45, ha='right')\n\nplt.savefig('/workspace/line_chart.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Scatter Plot — Continuous Color (correlations)\n\n```python\nfig, ax = plt.subplots(figsize=(8, 6))\n\nscatter = ax.scatter(df[\"x\"], df[\"y\"], c=df[\"value\"], cmap='viridis',\n                     s=40, alpha=0.7, edgecolors='black', linewidth=0.3)\nplt.colorbar(scatter, ax=ax, label='Value')\n\n# Optional: trend line\nz = np.polyfit(df[\"x\"], df[\"y\"], 1)\nax.plot(df[\"x\"].sort_values(), np.poly1d(z)(df[\"x\"].sort_values()),\n        \"r--\", linewidth=2, label=f'y={z[0]:.2f}x+{z[1]:.2f}')\n\nax.set_xlabel('X', fontweight='bold')\nax.set_ylabel('Y', fontweight='bold')\nax.set_title('Correlation Analysis', fontweight='bold')\nax.legend()\nax.grid(True, alpha=0.3, linestyle='--')\n\nplt.savefig('/workspace/scatter_correlation.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Scatter Plot — Categorical Color (clusters)\n\n```python\nfig, ax = plt.subplots(figsize=(8, 6))\n\nfor i, label in enumerate(sorted(df[\"cluster\"].unique())):\n    mask = df[\"cluster\"] == label\n    ax.scatter(df.loc[mask, \"x\"], df.loc[mask, \"y\"],\n               c=COLORS[i], label=f'Cluster {label}', s=40, alpha=0.7)\n\nax.set_xlabel('X', fontweight='bold')\nax.set_ylabel('Y', fontweight='bold')\nax.set_title('Cluster Visualization', fontweight='bold')\nax.legend()\nax.grid(True, alpha=0.3, linestyle='--')\n\nplt.savefig('/workspace/scatter_clusters.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Heatmap (correlation matrix or confusion matrix)\n\n```python\nimport seaborn as sns\n\nfig, ax = plt.subplots(figsize=(8, 7))\n\n# corr_matrix = to_pd(df[numeric_cols].corr())\nsns.heatmap(corr_matrix, annot=True, fmt='.2f', cmap='RdBu_r', center=0,\n            square=True, linewidths=1, vmin=-1, vmax=1,\n            cbar_kws={'label': 'Correlation'}, ax=ax)\n\nax.set_title('Correlation Matrix', fontweight='bold')\n\nplt.savefig('/workspace/heatmap.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Histogram with KDE\n\n```python\nfig, ax = plt.subplots(figsize=(8, 5))\n\nax.hist(df[\"value\"], bins=30, color=COLORS[0], alpha=0.7,\n        edgecolor='black', linewidth=0.5, density=True, label='Distribution')\n\n# Add KDE curve\nfrom scipy.stats import gaussian_kde\nkde = gaussian_kde(df[\"value\"].dropna())\nx_range = np.linspace(df[\"value\"].min(), df[\"value\"].max(), 200)\nax.plot(x_range, kde(x_range), color=COLORS[1], linewidth=2, label='KDE')\n\nax.set_xlabel('Value', fontweight='bold')\nax.set_ylabel('Density', fontweight='bold')\nax.set_title('Value Distribution', fontweight='bold')\nax.legend()\nax.grid(axis='y', alpha=0.3, linestyle='--')\n\nplt.savefig('/workspace/histogram.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Box Plot (compare groups)\n\n```python\nfig, ax = plt.subplots(figsize=(8, 5))\n\ngroups = [df[df[\"group\"] == g][\"value\"].values for g in group_names]\nbp = ax.boxplot(groups, labels=group_names, patch_artist=True,\n                widths=0.6, showmeans=True,\n                meanprops=dict(marker='D', markerfacecolor='red', markersize=6))\n\nfor i, patch in enumerate(bp['boxes']):\n    patch.set_facecolor(COLORS[i % len(COLORS)])\n    patch.set_alpha(0.7)\n\nax.set_ylabel('Value', fontweight='bold')\nax.set_title('Distribution by Group', fontweight='bold')\nax.grid(axis='y', alpha=0.3, linestyle='--')\nax.set_axisbelow(True)\n\nplt.savefig('/workspace/boxplot.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Multi-Panel Analysis Summary\n\nUse this to create a single image with multiple charts — the most effective way to present a complete analysis.\n\n```python\nfig, axes = plt.subplots(2, 2, figsize=(14, 10))\n\n# Top-left: Distribution\naxes[0, 0].hist(df[\"value\"], bins=30, color=COLORS[0], alpha=0.7, edgecolor='black', linewidth=0.5)\naxes[0, 0].set_title('Value Distribution', fontweight='bold')\naxes[0, 0].set_xlabel('Value')\naxes[0, 0].grid(axis='y', alpha=0.3, linestyle='--')\n\n# Top-right: Scatter\naxes[0, 1].scatter(df[\"x\"], df[\"y\"], c=COLORS[0], s=30, alpha=0.5)\naxes[0, 1].set_title('X vs Y', fontweight='bold')\naxes[0, 1].set_xlabel('X')\naxes[0, 1].set_ylabel('Y')\naxes[0, 1].grid(True, alpha=0.3, linestyle='--')\n\n# Bottom-left: Bar chart\ngroup_means = df.groupby(\"category\")[\"value\"].mean()\naxes[1, 0].bar(group_means.index, group_means.values, color=COLORS[:len(group_means)])\naxes[1, 0].set_title('Mean by Category', fontweight='bold')\naxes[1, 0].set_xlabel('Category')\naxes[1, 0].grid(axis='y', alpha=0.3, linestyle='--')\n\n# Bottom-right: Box plot\naxes[1, 1].boxplot([df[df[\"category\"] == c][\"value\"].values for c in categories],\n                    labels=categories, patch_artist=True)\naxes[1, 1].set_title('Distribution by Category', fontweight='bold')\naxes[1, 1].grid(axis='y', alpha=0.3, linestyle='--')\n\nfig.suptitle('Analysis Summary', fontsize=16, fontweight='bold')\n\nplt.savefig('/workspace/analysis_summary.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Feature Importance Chart (from cuML model)\n\n```python\nfig, ax = plt.subplots(figsize=(8, max(4, len(feature_names) * 0.35)))\n\n# importances = to_pd(model.feature_importances_)\nsorted_idx = np.argsort(importances)\nax.barh(np.array(feature_names)[sorted_idx], importances[sorted_idx],\n        color=COLORS[0], edgecolor='black', linewidth=0.5)\n\nax.set_xlabel('Importance', fontweight='bold')\nax.set_title('Feature Importances', fontweight='bold')\nax.grid(axis='x', alpha=0.3, linestyle='--')\nax.set_axisbelow(True)\n\nplt.savefig('/workspace/feature_importance.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Confusion Matrix (from cuML classification)\n\n```python\nimport seaborn as sns\n\nfig, ax = plt.subplots(figsize=(7, 6))\n\n# cm = confusion_matrix(to_pd(y_test), to_pd(predictions))\nsns.heatmap(cm, annot=True, fmt='d', cmap='Blues', square=True,\n            xticklabels=class_names, yticklabels=class_names,\n            linewidths=1, cbar_kws={'label': 'Count'}, ax=ax)\n\nax.set_xlabel('Predicted', fontweight='bold')\nax.set_ylabel('Actual', fontweight='bold')\nax.set_title('Confusion Matrix', fontweight='bold')\n\nplt.savefig('/workspace/confusion_matrix.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n## Style Rules\n\n- Use `COLORS` palette (colorblind-safe) — never rely on color alone to distinguish elements\n- No pie charts (bar charts are always clearer)\n- No 3D plots (distort data perception)\n- Grid lines at `alpha=0.3, linestyle='--'` with `ax.set_axisbelow(True)`\n- Bold axis labels and titles (`fontweight='bold'`)\n- White background for all exports\n- 1-4 charts per analysis is typical; use multi-panel for more\n\n## Output Guidelines\n\n- Save all charts to `/workspace/` as PNG\n- Print file paths after saving so the agent can reference them\n- For multi-panel summaries, use `figsize=(14, 10)` for 2×2 layouts\n- Keep chart titles descriptive but concise\n- Include units in axis labels when applicable\n","frontmatter":{"name":"data-visualization","description":"Use for creating publication-quality charts and multi-panel analysis summaries. Triggers when tasks involve visualizing data, plotting results, creating charts, or producing visual reports from analysis output."},"isInternal":false,"tokens":3132,"sizeBytes":11614},{"name":"SKILL.md","path":"examples/nvidia_deep_agent/skills/gpu-document-processing/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/nvidia_deep_agent/skills/gpu-document-processing/SKILL.md","title":"gpu-document-processing","category":"anthropic-skill","format":"markdown","content":"---\nname: gpu-document-processing\ndescription: Use when processing large PDFs, document collections, or bulk text extraction tasks that benefit from GPU-accelerated processing. Triggers when the user provides large documents or needs bulk document analysis.\n---\n\n# GPU Document Processing Skill\n\nProcess large documents and document collections using GPU-accelerated tools. This skill uses the sandbox-as-tool pattern: the agent runs on CPU for reasoning, and sends document processing work to a GPU-equipped environment.\n\n## When to Use This Skill\n\nUse this skill when:\n- Processing large PDF files (50+ pages)\n- Analyzing collections of documents (10+ files)\n- Extracting structured data from unstructured documents\n- Performing bulk text extraction and chunking\n- Generating embeddings for large document sets\n- The user uploads or references large documents for analysis\n\n## Architecture: Sandbox as Tool\n\nThis skill follows the **sandbox-as-tool pattern** for GPU execution:\n\n1. **Agent reasons on CPU** - planning, synthesis, report writing\n2. **Processing sent to GPU sandbox** - document parsing, embedding, extraction\n3. **Results returned to agent** - structured output for further analysis\n\nThis separation ensures:\n- API keys stay outside the sandbox (security)\n- Agent state persists independently of processing jobs\n- Processing can be parallelized across documents\n- Cost-efficient: GPU used only during processing, not during reasoning\n\n## Capabilities\n\n### PDF Text Extraction\nExtract text content from PDF documents with layout preservation:\n- Headers, paragraphs, lists, and tables detected separately\n- Page numbers and section boundaries preserved\n- Multi-column layout handling\n\n### Tabular Data Extraction\nExtract tables from documents into structured formats:\n- PDF tables to CSV/DataFrames using GPU-accelerated parsing\n- Automatic column type detection\n- Handles merged cells and multi-row headers\n\n### Document Chunking\nSplit large documents into meaningful chunks for analysis:\n- Semantic chunking (by topic/section boundaries)\n- Fixed-size chunking with overlap for embedding\n- Configurable chunk sizes (default: 512 tokens)\n\n### Embedding Generation\nGenerate vector embeddings for document chunks:\n- Uses NVIDIA NeMo Retriever NIM for GPU-accelerated embedding\n- Supports batch processing for large document sets\n- Compatible with standard vector stores (Milvus, ChromaDB)\n\n## Workflow\n\n1. **Receive document reference** from the orchestrator\n2. **Determine processing type** (extraction, analysis, embedding)\n3. **Send to GPU sandbox** for processing\n4. **Collect structured results** (text, tables, embeddings)\n5. **Write findings** to /shared/ for the orchestrator to synthesize\n\n## Processing Large Document Collections\n\nFor multiple documents:\n1. Process documents in parallel batches (3-5 concurrent)\n2. Extract key metadata first (title, date, author, page count)\n3. Generate per-document summaries\n4. Cross-reference findings across documents\n5. Write consolidated findings with per-document citations\n\n## Output Format\n\nWhen reporting document processing results:\n- Include document metadata (filename, pages, size)\n- Structure extracted content by section/chapter\n- Format tables as markdown tables\n- Include page references for all extracted content\n- Note any extraction quality issues (scanned images, corrupted pages)\n\n## Integration with NVIDIA NIM\n\nFor production deployments, GPU document processing can leverage:\n- **NVIDIA NeMo Retriever**: GPU-accelerated embedding and retrieval\n- **NVIDIA RAPIDS cuDF**: Tabular data processing from extracted tables\n- **NVIDIA Triton**: Scalable inference for document classification models\n\nSee NVIDIA's NIM documentation for self-hosted deployment options.\n","frontmatter":{"name":"gpu-document-processing","description":"Use when processing large PDFs, document collections, or bulk text extraction tasks that benefit from GPU-accelerated processing. Triggers when the user provides large documents or needs bulk document analysis."},"isInternal":false,"tokens":753,"sizeBytes":3745},{"name":"SKILL.md","path":"examples/repl_swarm/skills/swarm/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/repl_swarm/skills/swarm/SKILL.md","title":"swarm","category":"anthropic-skill","format":"markdown","content":"# swarm\n\nPath: `examples/repl_swarm/skills/swarm/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/repl_swarm/skills/swarm/SKILL.md)","tokens":300,"sizeBytes":194},{"name":"SKILL.md","path":"examples/text-to-sql-agent/skills/query-writing/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/text-to-sql-agent/skills/query-writing/SKILL.md","title":"query-writing","category":"anthropic-skill","format":"markdown","content":"# query-writing\n\nPath: `examples/text-to-sql-agent/skills/query-writing/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/text-to-sql-agent/skills/query-writing/SKILL.md)","tokens":300,"sizeBytes":232},{"name":"SKILL.md","path":"examples/text-to-sql-agent/skills/schema-exploration/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/text-to-sql-agent/skills/schema-exploration/SKILL.md","title":"schema-exploration","category":"anthropic-skill","format":"markdown","content":"# schema-exploration\n\nPath: `examples/text-to-sql-agent/skills/schema-exploration/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/text-to-sql-agent/skills/schema-exploration/SKILL.md)","tokens":300,"sizeBytes":247},{"name":"SKILL.md","path":"libs/cli/examples/deploy-content-writer/skills/blog-post/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/deploy-content-writer/skills/blog-post/SKILL.md","title":"blog-post","category":"anthropic-skill","format":"markdown","content":"# blog-post\n\nPath: `libs/cli/examples/deploy-content-writer/skills/blog-post/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/deploy-content-writer/skills/blog-post/SKILL.md)","tokens":300,"sizeBytes":246},{"name":"SKILL.md","path":"libs/cli/examples/deploy-content-writer/skills/social-media/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/deploy-content-writer/skills/social-media/SKILL.md","title":"social-media","category":"anthropic-skill","format":"markdown","content":"# social-media\n\nPath: `libs/cli/examples/deploy-content-writer/skills/social-media/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/deploy-content-writer/skills/social-media/SKILL.md)","tokens":300,"sizeBytes":255},{"name":"SKILL.md","path":"libs/cli/examples/skills/arxiv-search/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/skills/arxiv-search/SKILL.md","title":"arxiv-search","category":"anthropic-skill","format":"markdown","content":"# arxiv-search\n\nPath: `libs/cli/examples/skills/arxiv-search/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/skills/arxiv-search/SKILL.md)","tokens":300,"sizeBytes":211},{"name":"SKILL.md","path":"libs/cli/examples/skills/langgraph-docs/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/skills/langgraph-docs/SKILL.md","title":"langgraph-docs","category":"anthropic-skill","format":"markdown","content":"# langgraph-docs\n\nPath: `libs/cli/examples/skills/langgraph-docs/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/skills/langgraph-docs/SKILL.md)","tokens":300,"sizeBytes":217},{"name":"SKILL.md","path":"libs/cli/examples/skills/skill-creator/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/skills/skill-creator/SKILL.md","title":"skill-creator","category":"anthropic-skill","format":"markdown","content":"# skill-creator\n\nPath: `libs/cli/examples/skills/skill-creator/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/skills/skill-creator/SKILL.md)","tokens":300,"sizeBytes":214},{"name":"SKILL.md","path":"libs/cli/examples/skills/web-research/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/skills/web-research/SKILL.md","title":"web-research","category":"anthropic-skill","format":"markdown","content":"# web-research\n\nPath: `libs/cli/examples/skills/web-research/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/skills/web-research/SKILL.md)","tokens":300,"sizeBytes":211},{"name":"SKILL.md","path":"libs/cli/tests/unit_tests/deploy/fixtures/projects/subagent_with_local_skills/subagents/researcher/skills/note/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/tests/unit_tests/deploy/fixtures/projects/subagent_with_local_skills/subagents/researcher/skills/note/SKILL.md","title":"note","category":"anthropic-skill","format":"markdown","content":"# note\n\nPath: `libs/cli/tests/unit_tests/deploy/fixtures/projects/subagent_with_local_skills/subagents/researcher/skills/note/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/tests/unit_tests/deploy/fixtures/projects/subagent_with_local_skills/subagents/researcher/skills/note/SKILL.md)","tokens":300,"sizeBytes":349},{"name":"examples.md","path":"libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/examples.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/examples.md","title":"Summarize Skill","category":"anthropic-skill","format":"markdown","content":"# Summarize Skill\n\nPath: `libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/examples.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/examples.md)","tokens":300,"sizeBytes":304},{"name":"SKILL.md","path":"libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/SKILL.md","title":"summarize","category":"anthropic-skill","format":"markdown","content":"# summarize\n\nPath: `libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/SKILL.md)","tokens":300,"sizeBytes":292},{"name":"SKILL.md","path":"libs/code/deepagents_code/built_in_skills/remember/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/deepagents_code/built_in_skills/remember/SKILL.md","title":"remember","category":"anthropic-skill","format":"markdown","content":"# remember\n\nPath: `libs/code/deepagents_code/built_in_skills/remember/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/deepagents_code/built_in_skills/remember/SKILL.md)","tokens":300,"sizeBytes":233},{"name":"SKILL.md","path":"libs/code/deepagents_code/built_in_skills/skill-creator/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/deepagents_code/built_in_skills/skill-creator/SKILL.md","title":"skill-creator","category":"anthropic-skill","format":"markdown","content":"# skill-creator\n\nPath: `libs/code/deepagents_code/built_in_skills/skill-creator/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/deepagents_code/built_in_skills/skill-creator/SKILL.md)","tokens":300,"sizeBytes":248},{"name":"SKILL.md","path":"libs/code/examples/skills/arxiv-search/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/examples/skills/arxiv-search/SKILL.md","title":"arxiv-search","category":"anthropic-skill","format":"markdown","content":"# arxiv-search\n\nPath: `libs/code/examples/skills/arxiv-search/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/examples/skills/arxiv-search/SKILL.md)","tokens":300,"sizeBytes":213},{"name":"SKILL.md","path":"libs/code/examples/skills/langgraph-docs/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/examples/skills/langgraph-docs/SKILL.md","title":"langgraph-docs","category":"anthropic-skill","format":"markdown","content":"# langgraph-docs\n\nPath: `libs/code/examples/skills/langgraph-docs/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/examples/skills/langgraph-docs/SKILL.md)","tokens":300,"sizeBytes":219},{"name":"SKILL.md","path":"libs/code/examples/skills/skill-creator/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/examples/skills/skill-creator/SKILL.md","title":"skill-creator","category":"anthropic-skill","format":"markdown","content":"# skill-creator\n\nPath: `libs/code/examples/skills/skill-creator/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/examples/skills/skill-creator/SKILL.md)","tokens":300,"sizeBytes":216},{"name":"SKILL.md","path":"libs/code/examples/skills/web-research/SKILL.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/examples/skills/web-research/SKILL.md","title":"web-research","category":"anthropic-skill","format":"markdown","content":"# web-research\n\nPath: `libs/code/examples/skills/web-research/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/examples/skills/web-research/SKILL.md)","tokens":300,"sizeBytes":213},{"name":"AGENTS.md","path":"libs/evals/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/AGENTS.md","title":"Evals Skill","category":"anthropic-skill","format":"markdown","content":"# Evals Skill\n\nPath: `libs/evals/AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/AGENTS.md)","tokens":300,"sizeBytes":158},{"name":"CONTRIBUTING.md","path":"libs/evals/CONTRIBUTING.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/CONTRIBUTING.md","title":"Evals Skill","category":"anthropic-skill","format":"markdown","content":"# Evals Skill\n\nPath: `libs/evals/CONTRIBUTING.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/CONTRIBUTING.md)","tokens":300,"sizeBytes":170},{"name":"categories.json","path":"libs/evals/deepagents_evals/categories.json","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/deepagents_evals/categories.json","title":"Deepagents_evals Skill","category":"anthropic-skill","format":"json","content":"# Deepagents_evals Skill\n\nPath: `libs/evals/deepagents_evals/categories.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/deepagents_evals/categories.json)","tokens":300,"sizeBytes":215},{"name":"EVAL_CATALOG.md","path":"libs/evals/EVAL_CATALOG.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/EVAL_CATALOG.md","title":"Evals Skill","category":"anthropic-skill","format":"markdown","content":"# Evals Skill\n\nPath: `libs/evals/EVAL_CATALOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/EVAL_CATALOG.md)","tokens":300,"sizeBytes":170},{"name":"MODEL_GROUPS.md","path":"libs/evals/MODEL_GROUPS.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/MODEL_GROUPS.md","title":"Evals Skill","category":"anthropic-skill","format":"markdown","content":"# Evals Skill\n\nPath: `libs/evals/MODEL_GROUPS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/MODEL_GROUPS.md)","tokens":300,"sizeBytes":170},{"name":"README.md","path":"libs/evals/README.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/README.md","title":"Evals Skill","category":"anthropic-skill","format":"markdown","content":"# Evals Skill\n\nPath: `libs/evals/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/README.md)","tokens":300,"sizeBytes":158},{"name":"bfcl_v3_final.json","path":"libs/evals/tests/evals/data/benchmark_samples/bfcl_v3_final.json","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/data/benchmark_samples/bfcl_v3_final.json","title":"Benchmark_samples Skill","category":"anthropic-skill","format":"json","content":"# Benchmark_samples Skill\n\nPath: `libs/evals/tests/evals/data/benchmark_samples/bfcl_v3_final.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/data/benchmark_samples/bfcl_v3_final.json)","tokens":300,"sizeBytes":258},{"name":"frames_final.json","path":"libs/evals/tests/evals/data/benchmark_samples/frames_final.json","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/data/benchmark_samples/frames_final.json","title":"Benchmark_samples Skill","category":"anthropic-skill","format":"json","content":"# Benchmark_samples Skill\n\nPath: `libs/evals/tests/evals/data/benchmark_samples/frames_final.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/data/benchmark_samples/frames_final.json)","tokens":300,"sizeBytes":256},{"name":"nexus_final.json","path":"libs/evals/tests/evals/data/benchmark_samples/nexus_final.json","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/data/benchmark_samples/nexus_final.json","title":"Benchmark_samples Skill","category":"anthropic-skill","format":"json","content":"# Benchmark_samples Skill\n\nPath: `libs/evals/tests/evals/data/benchmark_samples/nexus_final.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/data/benchmark_samples/nexus_final.json)","tokens":300,"sizeBytes":254},{"name":"summarization_seed_messages.json","path":"libs/evals/tests/evals/fixtures/summarization_seed_messages.json","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/fixtures/summarization_seed_messages.json","title":"Fixtures Skill","category":"anthropic-skill","format":"json","content":"# Fixtures Skill\n\nPath: `libs/evals/tests/evals/fixtures/summarization_seed_messages.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/fixtures/summarization_seed_messages.json)","tokens":300,"sizeBytes":249},{"name":"README.md","path":"libs/evals/tests/evals/README.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/README.md","title":"Evals Skill","category":"anthropic-skill","format":"markdown","content":"# Evals Skill\n\nPath: `libs/evals/tests/evals/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/README.md)","tokens":300,"sizeBytes":182},{"name":"db.json","path":"libs/evals/tests/evals/tau2_airline/data/db.json","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/tau2_airline/data/db.json","title":"Data Skill","category":"anthropic-skill","format":"json","content":"# Data Skill\n\nPath: `libs/evals/tests/evals/tau2_airline/data/db.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/tau2_airline/data/db.json)","tokens":300,"sizeBytes":213},{"name":"policy.md","path":"libs/evals/tests/evals/tau2_airline/data/policy.md","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/tau2_airline/data/policy.md","title":"Data Skill","category":"anthropic-skill","format":"markdown","content":"# Data Skill\n\nPath: `libs/evals/tests/evals/tau2_airline/data/policy.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/tau2_airline/data/policy.md)","tokens":300,"sizeBytes":217},{"name":"tasks.json","path":"libs/evals/tests/evals/tau2_airline/data/tasks.json","rawUrl":"https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/tau2_airline/data/tasks.json","title":"Data Skill","category":"anthropic-skill","format":"json","content":"# Data Skill\n\nPath: `libs/evals/tests/evals/tau2_airline/data/tasks.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/evals/tests/evals/tau2_airline/data/tasks.json)","tokens":300,"sizeBytes":219}],"systemPromptSnippet":"<yakaai_skills repo=\"langchain-ai/deepagents\">\n<!-- File: AGENTS.md (Tokens: ~300 | Category: root-instruction) -->\n# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/AGENTS.md)\n\n<!-- File: examples/content-builder-agent/skills/blog-post/SKILL.md (Tokens: ~1093 | Category: anthropic-skill) -->\n---\nname: blog-post\ndescription: Writes and structures long-form blog posts, creates tutorial outlines, and optimizes content for SEO with cover image generation. Use when the user asks to write a blog post, article, how-to guide, tutorial, technical writeup, thought leadership piece, or long-form content.\n---\n\n# Blog Post Writing Skill\n\n## Research First (Required)\n\n**Before writing any blog post, you MUST delegate research:**\n\n1. Use the `task` tool with `subagent_type: \"researcher\"`\n2. In the description, specify BOTH the topic AND where to save:\n\n```\ntask(\n    subagent_type=\"researcher\",\n    description=\"Research [TOPIC]. Save findings to research/[slug].md\"\n)\n```\n\nExample:\n```\ntask(\n    subagent_type=\"researcher\",\n    description=\"Research the current state of AI agents in 2025. Save findings to research/ai-agents-2025.md\"\n)\n```\n\n3. After research completes, read the findings file before writing\n\n## Output Structure (Required)\n\n**Every blog post MUST have both a post AND a cover image:**\n\n```\nblogs/\n└── <slug>/\n    ├── post.md        # The blog post content\n    └── hero.png       # REQUIRED: Generated cover image\n```\n\nExample: A post about \"AI Agents in 2025\" → `blogs/ai-agents-2025/`\n\n**You MUST complete both steps:**\n1. Write the post to `blogs/<slug>/post.md`\n2. Generate a cover image using `generate_image` and save to `blogs/<slug>/hero.png`\n\n**A blog post is NOT complete without its cover image.**\n\n## Blog Post Structure\n\nEvery blog post should follow this structure:\n\n### 1. Hook (Opening)\n- Start with a compelling question, statistic, or statement\n- Make the reader want to continue\n- Keep it to 2-3 sentences\n\n### 2. Context (The Problem)\n- Explain why this topic matters\n- Describe the problem or opportunity\n- Connect to the reader's experience\n\n### 3. Main Content (The Solution)\n- Break into 3-5 main sections with H2 headers\n- Each section covers one key point\n- Include code examples, diagrams, or screenshots where helpful\n- Use bullet points for lists\n\n### 4. Practical Application\n- Show how to apply the concepts\n- Include step-by-step instructions if applicable\n- Provide code snippets or templates\n\n### 5. Conclusion & CTA\n- Summarize key takeaways (3 bullets max)\n- End with a clear call-to-action\n- Link to related resources\n\n## Cover Image Generation\n\nAfter writing the post, generate a cover image using the `generate_cover` tool:\n\n```\ngenerate_cover(prompt=\"A detailed description of the image...\", slug=\"your-blog-slug\")\n```\n\nThe tool saves the image to `blogs/<slug>/hero.png`.\n\n### Writing Effective Image Prompts\n\nStructure your prompt with these elements:\n\n1. **Subject**: What is the main focus? Be specific and concrete.\n2. **Style**: Art direction (minimalist, isometric, flat design, 3D render, watercolor, etc.)\n3. **Composition**: How elements are arranged (centered, rule of thirds, symmetrical)\n4. **Color palette**: Specific colors or mood (warm earth tones, cool blues and purples, high contrast)\n5. **Lighting/Atmosphere**: Soft diffused light, dramatic shadows, golden hour, neon glow\n6. **Technical details**: Aspect ratio considerations, negative space for text overlay\n\n### Example Prompts\n\n**For a technical blog post:**\n```\nIsometric 3D illustration of interconnected glowing cubes representing AI agents, each cube has subtle circuit patterns. Cubes connected by luminous data streams. Deep navy background (#0a192f) with electric blue (#64ffda) and soft purple (#c792ea) accents. Clean minimal style, lots of negative space at top for title. Professional tech aesthetic.\n```\n\n**For a tutorial/how-to:**\n```\nClean flat illustration of hands typing on a keyboard with abstract code symbols floating upward, transforming into lightbulbs and gears. Warm gradient background from soft coral to light peach. Friendly, approachable style. Centered composition with space for text overlay.\n```\n\n**For thought leadership:**\n```\nAbstract visualization of a human silhouette profile merging with geometric neural network patterns. Split composition - organic watercolor texture on left transitioning to clean vector lines on right. Muted sage green and warm terracotta color scheme. Contemplative, forward-thinking mood.\n```\n\n## SEO Considerations\n\n- Include the main keyword in the title and first paragraph\n- Use the keyword naturally 3-5 times throughout\n- Keep the title under 60 characters\n- Write a meta description (150-160 characters)\n\n## Quality Checklist\n\nBefore finishing:\n- [ ] Post saved to `blogs/<slug>/post.md`\n- [ ] Hero image generated at `blogs/<slug>/hero.png`\n- [ ] Hook grabs attention in first 2 sentences\n- [ ] Each section has a clear purpose\n- [ ] Conclusion summarizes key points\n- [ ] CTA tells reader what to do next\n\n<!-- File: examples/content-builder-agent/skills/social-media/SKILL.md (Tokens: ~1152 | Category: anthropic-skill) -->\n---\nname: social-media\ndescription: Drafts engaging social media posts, writes hooks, suggests hashtags, creates thread structures, and generates companion images. Use when the user asks to write a LinkedIn post, tweet, Twitter/X thread, social media caption, social post, or repurpose content for social platforms.\n---\n\n# Social Media Content Skill\n\n## Research First (Required)\n\n**Before writing any social media content, you MUST delegate research:**\n\n1. Use the `task` tool with `subagent_type: \"researcher\"`\n2. In the description, specify BOTH the topic AND where to save:\n\n```\ntask(\n    subagent_type=\"researcher\",\n    description=\"Research [TOPIC]. Save findings to research/[slug].md\"\n)\n```\n\nExample:\n```\ntask(\n    subagent_type=\"researcher\",\n    description=\"Research renewable energy trends in 2025. Save findings to research/renewable-energy.md\"\n)\n```\n\n3. After research completes, read the findings file before writing\n\n## Output Structure (Required)\n\n**Every social media post MUST have both content AND an image:**\n\n**LinkedIn posts:**\n```\nlinkedin/\n└── <slug>/\n    ├── post.md        # The post content\n    └── image.png      # REQUIRED: Generated visual\n```\n\n**Twitter/X threads:**\n```\ntweets/\n└── <slug>/\n    ├── thread.md      # The thread content\n    └── image.png      # REQUIRED: Generated visual\n```\n\nExample: A LinkedIn post about \"prompt engineering\" → `linkedin/prompt-engineering/`\n\n**You MUST complete both steps:**\n1. Write the content to the appropriate path\n2. Generate an image using `generate_image` and save alongside the post\n\n**A social media post is NOT complete without its image.**\n\n## Platform Guidelines\n\n### LinkedIn\n\n**Format:**\n- 1,300 character limit (show more after ~210 chars)\n- First line is crucial - make it hook\n- Use line breaks for readability\n- 3-5 hashtags at the end\n\n**Tone:**\n- Professional but personal\n- Share insights and learnings\n- Ask questions to drive engagement\n- Use \"I\" and share experiences\n\n**Structure:**\n```\n[Hook - 1 compelling line]\n\n[Empty line]\n\n[Context - why this matters]\n\n[Empty line]\n\n[Main insight - 2-3 short paragraphs]\n\n[Empty line]\n\n[Call to action or question]\n\n#hashtag1 #hashtag2 #hashtag3\n```\n\n### Twitter/X\n\n**Format:**\n- 280 character limit per tweet\n- Threads for longer content (use 1/🧵 format)\n- No more than 2 hashtags per tweet\n\n**Thread Structure:**\n```\n1/🧵 [Hook - the main insight]\n\n2/ [Supporting point 1]\n\n3/ [Supporting point 2]\n\n4/ [Example or evidence]\n\n5/ [Conclusion + CTA]\n```\n\n## Image Generation\n\nEvery social media post needs an eye-catching image. Use the `generate_social_image` tool:\n\n```\ngenerate_social_image(prompt=\"A detailed description...\", platform=\"linkedin\", slug=\"your-post-slug\")\n```\n\nThe tool saves the image to `<platform>/<slug>/image.png`.\n\n### Social Image Best Practices\n\nSocial images need to work at small sizes in crowded feeds:\n- **Bold, simple compositions** - one clear focal point\n- **High contrast** - stands out when scrolling\n- **No text in image** - too small to read, platforms add their own\n- **Square or 4:5 ratio** - works across platforms\n\n### Writing Effective Prompts\n\nInclude these elements:\n\n1. **Single focal point**: One clear subject, not a busy scene\n2. **Bold style**: Vibrant colors, strong shapes, high contrast\n3. **Simple background**: Solid color, gradient, or subtle texture\n4. **Mood/energy**: Match the post tone (inspiring, urgent, thoughtful)\n\n### Example Prompts\n\n**For an insight/tip post:**\n```\nSingle glowing lightbulb floating against a deep purple gradient background, lightbulb made of interconnected golden geometric lines, rays of soft light emanating outward. Minimal, striking, high contrast. Square composition.\n```\n\n**For announcements/news:**\n```\nAbstract rocket ship made of colorful geometric shapes launching upward with a trail of particles. Bright coral and teal color scheme against clean white background. Energetic, celebratory mood. Bold flat illustration style.\n```\n\n**For thought-provoking content:**\n```\nTwo overlapping translucent circles, one blue one orange, creating a glowing intersection in the center. Represents collaboration or intersection of ideas. Dark charcoal background, soft ethereal glow. Minimalist and contemplative.\n```\n\n## Content Types\n\n### Announcement Posts\n- Lead with the news\n- Explain the impact\n- Include link or next step\n\n### Insight Posts\n- Share one specific learning\n- Explain the context briefly\n- Make it actionable\n\n### Question Posts\n- Ask a genuine question\n- Provide your take first\n- Keep it focused on one topic\n\n## Quality Checklist\n\nBefore finishing:\n- [ ] Post saved to `linkedin/<slug>/post.md` or `tweets/<slug>/thread.md`\n- [ ] Image generated alongside the post\n- [ ] First line hooks attention\n- [ ] Content fits platform limits\n- [ ] Tone matches platform norms\n- [ ] Has clear CTA or question\n- [ ] Hashtags are relevant (not generic)\n\n<!-- File: examples/deploy-coding-agent/skills/code-review/SKILL.md (Tokens: ~423 | Category: anthropic-skill) -->\n---\nname: code-review\ndescription: Perform a structured code review of changes, checking for correctness, style, tests, and potential issues.\n---\n\n# Code Review Skill\n\nUse this skill after implementing changes to validate your work before delivering.\n\n## Review Checklist\n\n### 1. Correctness\n- [ ] Changes solve the original issue/task\n- [ ] No unintended side effects on existing functionality\n- [ ] Edge cases are handled\n- [ ] Error handling is appropriate (not excessive)\n\n### 2. Code Quality\n- [ ] Code matches existing style and patterns\n- [ ] No unnecessary complexity or abstraction\n- [ ] Variable and function names are clear\n- [ ] No dead code, commented-out code, or TODOs left behind\n\n### 3. Tests\n- [ ] New functionality has test coverage\n- [ ] Existing tests still pass\n- [ ] Tests cover both happy path and error cases\n- [ ] Tests are not brittle (don't test implementation details)\n\n### 4. Safety\n- [ ] No hardcoded secrets or credentials\n- [ ] User input is validated at boundaries\n- [ ] No SQL injection, XSS, or command injection vectors\n- [ ] File operations use safe paths\n\n## Process\n\n1. Read each modified file end-to-end (not just the diff)\n2. Run the test suite: `execute(\"python -m pytest -v\")`\n3. Run linters if available: `execute(\"ruff check .\")`\n4. Run the bundled lint check: `execute(\"python /skills/code-review/lint_check.py .\")`\n5. Check against each item in the review checklist\n6. If any issues found, fix them and re-review\n7. When everything passes, the review is complete\n\n## Helper Scripts\n\n- **`/skills/code-review/lint_check.py`** — Scans Python files for missing\n  docstrings, long functions (>50 lines), and bare `except:` clauses. Run it\n  via `execute(\"python /skills/code-review/lint_check.py [path ...]\")`.\n\n<!-- File: examples/deploy-coding-agent/skills/coding-prefs/SKILL.md (Tokens: ~286 | Category: anthropic-skill) -->\n---\nname: coding-prefs\ndescription: Read the user's coding preferences from /memory/coding-prefs.md before making non-trivial style decisions, and append new preferences when the user gives durable feedback.\n---\n\n# Coding Preferences Skill\n\nUse this skill to keep `/memory/coding-prefs.md` in sync with how this\nspecific user wants you to work. This file is **user-scoped**, so each user\nhas their own copy — anything you write here only affects future\nconversations with the same user.\n\n## When to Read\n\n- Before picking a code style, test framework, or commit message format\n- Before deciding whether to add comments, type hints, or docstrings\n- Before refactoring beyond what was asked\n\n## When to Write\n\nAppend a new entry whenever the user gives feedback that should apply to\nfuture work:\n\n- \"Don't add docstrings unless I ask\" → save it\n- \"I prefer pytest over unittest\" → save it\n- \"Stop summarizing what you did at the end\" → save it\n\nEach entry should be one line: the rule, then a brief reason if the user\ngave one.\n\n## How to Write\n\nRead the file first (it may not exist yet), then append. Don't overwrite —\npreferences accumulate over time. If a new preference contradicts an\nexisting one, replace the old line and note the change.\n\n<!-- File: examples/deploy-coding-agent/skills/planning/SKILL.md (Tokens: ~361 | Category: anthropic-skill) -->\n---\nname: planning\ndescription: Break down a coding task into a structured implementation plan with clear steps, file identification, and risk assessment.\n---\n\n# Planning Skill\n\nUse this skill when starting a new coding task to create a thorough implementation plan.\n\n## Steps\n\n### 1. Understand the Task\n- Read the issue/task description completely\n- Identify the expected outcome and acceptance criteria\n- Note any constraints or requirements mentioned\n\n### 2. Explore the Codebase\n- Find the repository root and read the project structure\n- Identify the tech stack (language, framework, test runner)\n- Read README, CONTRIBUTING, or similar docs if they exist\n- Find existing tests to understand testing patterns\n\n### 3. Identify Relevant Files\n- Use `grep` to find code related to the task\n- Read the most relevant files (entry points, related modules)\n- Identify which files need to be modified vs. created\n- Check for existing patterns you should follow\n\n### 4. Write the Plan\nUse `write_todos` to create a structured plan:\n\n```\nwrite_todos([\n    \"1. <specific change in specific file>\",\n    \"2. <next specific change>\",\n    \"3. Write tests for <feature>\",\n    \"4. Run test suite and fix failures\",\n    \"5. Review all changes\"\n])\n```\n\n### 5. Assess Risks\n- Are there breaking changes?\n- Are there edge cases to handle?\n- Does this affect other parts of the codebase?\n- Flag anything uncertain for review\n\n## Guidelines\n\n- Plans should have 3-10 concrete steps\n- Each step should be specific enough to execute without further planning\n- Include test writing and test running as explicit steps\n- End with a review/verification step\n\n<!-- File: examples/deploy-content-writer/skills/blog-post/SKILL.md (Tokens: ~296 | Category: anthropic-skill) -->\n---\nname: blog-post\ndescription: Write structured long-form blog posts with research, SEO optimization, and cover image generation.\n---\n\n# Blog Post Writing Skill\n\n## Research First (Required)\n\nBefore writing any blog post, delegate research:\n1. Use the `task` tool with `subagent_type: \"researcher\"`\n2. Specify both the topic AND where to save findings\n\n## Blog Post Structure\n\nEvery blog post should follow this structure:\n\n### 1. Hook (Opening)\n- Start with a compelling question, statistic, or statement\n- Keep it to 2-3 sentences\n\n### 2. Context (The Problem)\n- Explain why this topic matters\n- Connect to the reader's experience\n\n### 3. Main Content (3-5 sections)\n- Each section covers one key point with an H2 header\n- Include code examples where helpful\n- Use bullet points for lists of 3+ items\n\n### 4. Practical Application\n- Show how to apply the concepts\n- Include step-by-step instructions or code snippets\n\n### 5. Conclusion & CTA\n- Summarize key takeaways (3 bullets max)\n- End with a clear call-to-action\n\n## Output\n\nSave the blog post to `blogs/<slug>/post.md`.\n\n## SEO Considerations\n\n- Include the main keyword in the title and first paragraph\n- Keep the title under 60 characters\n- Write a meta description (150-160 characters)\n\n<!-- File: examples/deploy-content-writer/skills/social-media/SKILL.md (Tokens: ~258 | Category: anthropic-skill) -->\n---\nname: social-media\ndescription: Create social media content including Twitter/X threads, LinkedIn posts, and short-form updates.\n---\n\n# Social Media Content Skill\n\n## Formats\n\n### Twitter/X Thread\n- Hook tweet: compelling question or bold statement (< 280 chars)\n- 3-7 follow-up tweets expanding on the topic\n- Final tweet with CTA or key takeaway\n- Use line breaks for readability\n\n### LinkedIn Post\n- Opening hook (first 2 lines visible before \"see more\")\n- 3-5 short paragraphs with key insights\n- End with a question to drive engagement\n- 1,300 character target length\n\n### Short-form Update\n- Single paragraph announcement or insight\n- Link to longer content if available\n- Under 280 characters for cross-platform use\n\n## Guidelines\n\n- Write in first person for LinkedIn, third person for company accounts\n- Include 2-3 relevant hashtags (not more)\n- Adapt tone: LinkedIn is more professional, Twitter is more conversational\n- Every post should provide standalone value — don't just tease\n- Use concrete numbers and results over vague claims\n\n## Output\n\nSave content to `social/<platform>/<slug>.md` (e.g., `social/twitter/ai-agents-thread.md`).\n\n<!-- File: examples/deploy-gtm-agent/skills/competitor-analysis/SKILL.md (Tokens: ~120 | Category: anthropic-skill) -->\n---\nname: competitor-analysis\ndescription: >-\n  Analyze competitors in a given market segment.\n  Trigger on: competitive landscape, competitor analysis,\n  market comparison, competitive positioning.\n---\n\n# Competitor Analysis\n\nWhen asked to analyze competitors:\n\n1. Identify the top 3-5 competitors in the target segment\n2. For each competitor, assess:\n   - Product positioning and key differentiators\n   - Pricing model and tiers\n   - Target audience and market share estimates\n   - Strengths and weaknesses\n3. Create a comparison matrix\n4. Identify gaps and opportunities for differentiation\n\n<!-- File: examples/deploy-gtm-agent/subagents/market-researcher/skills/analyze-market/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# analyze-market\n\nPath: `examples/deploy-gtm-agent/subagents/market-researcher/skills/analyze-market/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/deploy-gtm-agent/subagents/market-researcher/skills/analyze-market/SKILL.md)\n\n<!-- File: examples/nvidia_deep_agent/skills/cudf-analytics/SKILL.md (Tokens: ~930 | Category: anthropic-skill) -->\n---\nname: cudf-analytics\ndescription: Use for GPU-accelerated data analysis on datasets, CSVs, or tabular data using NVIDIA cuDF. Triggers when tasks involve groupby aggregations, statistical summaries, anomaly detection, or large-scale data profiling.\n---\n\n# cuDF Analytics Skill\n\nGPU-accelerated data analysis using NVIDIA RAPIDS cuDF. cuDF provides a pandas-like API that runs on NVIDIA GPUs, enabling massive speedups on large datasets.\n\n## When to Use This Skill\n\nUse this skill when:\n- Analyzing CSV files, datasets, or tabular data\n- Computing statistical summaries (mean, median, std, quartiles)\n- Performing groupby aggregations\n- Detecting anomalies or outliers in data\n- Profiling datasets with millions of rows\n- Computing correlation matrices\n\n## Initialization (REQUIRED)\n\nAlways start every script with this boilerplate. It tests actual GPU operations, not just import.\n\n```python\nimport pandas as pd\n\ntry:\n    import cudf\n    # Smoke-test: verify GPU compute AND host transfer both work\n    _test = cudf.Series([1, 2, 3])\n    assert _test.sum() == 6\n    assert _test.to_pandas().tolist() == [1, 2, 3]\n    GPU = True\nexcept Exception as e:\n    print(f\"[GPU] cudf unavailable, falling back to pandas: {e}\")\n    GPU = False\n\ndef read_csv(path):\n    return cudf.read_csv(path) if GPU else pd.read_csv(path)\n\ndef to_pd(df):\n    \"\"\"Convert cuDF DataFrame/Series to pandas. Use this instead of .to_pandas() directly.\"\"\"\n    if not GPU:\n        return df\n    try:\n        return df.to_pandas()\n    except Exception as e:\n        print(f\"[GPU] .to_pandas() failed, using Arrow fallback: {e}\")\n        return df.to_arrow().to_pandas()\n```\n\n## Quick Reference\n\ncuDF mirrors the pandas API. Common operations:\n\n### Read Data\n```python\ndf = read_csv(\"data.csv\")\n```\n\n### Statistical Summary\n```python\n# Use to_pd() when you need pandas output\nsummary = to_pd(df[[\"value\", \"score\"]].describe())\n\n# Scalar values work directly with float()\nmean_val = float(df[\"value\"].mean())\nq1 = float(df[\"value\"].quantile(0.25))\n\n# Correlation\ncorr = float(df[\"value\"].corr(df[\"score\"]))\n```\n\n### Groupby Aggregation\n```python\nresult = df.groupby(\"category\").agg({\n    \"revenue\": [\"sum\", \"mean\", \"count\"],\n    \"quantity\": [\"sum\", \"mean\"],\n})\nresult_pd = to_pd(result)\n```\n\n### Anomaly Detection (IQR Method)\n```python\ncol = \"value\"\nQ1 = float(df[col].quantile(0.25))\nQ3 = float(df[col].quantile(0.75))\nIQR = Q3 - Q1\nlower = Q1 - 1.5 * IQR\nupper = Q3 + 1.5 * IQR\noutliers = to_pd(df[(df[col] < lower) | (df[col] > upper)])\n```\n\n### Anomaly Detection (Z-Score Method)\n```python\nmean = float(df[col].mean())\nstd = float(df[col].std())\ndf[\"z_score\"] = (df[col] - mean) / std\nanomalies = to_pd(df[df[\"z_score\"].abs() > 3])\n```\n\n### Filtering and Selection\n```python\n# Filter rows\nfiltered = df[df[\"status\"] == \"active\"]\n\n# Select columns\nsubset = df[[\"name\", \"revenue\", \"date\"]]\n\n# Sort\nsorted_df = df.sort_values(\"revenue\", ascending=False)\n\n# Convert to pandas for final output / iteration\nresult_pd = to_pd(sorted_df)\n```\n\n## Data Type Requirements\n\ncuDF requires explicit type specification for optimal performance:\n- Use `float32` or `float64` for numeric data\n- Use `int32` or `int64` for integer data\n- String columns use cuDF's string dtype automatically\n\n## Output Guidelines\n\nWhen reporting analysis results:\n- Include dataset dimensions (rows x columns)\n- Show key statistics in formatted tables\n- Highlight notable patterns, trends, or anomalies\n- Provide both summary statistics and specific examples\n- Note any data quality issues (missing values, outliers)\n\n<!-- File: examples/nvidia_deep_agent/skills/cuml-machine-learning/SKILL.md (Tokens: ~1758 | Category: anthropic-skill) -->\n---\nname: cuml-machine-learning\ndescription: Use for GPU-accelerated machine learning on tabular data using NVIDIA cuML. Triggers when tasks involve classification, regression, clustering, dimensionality reduction, or model training on datasets.\n---\n\n# cuML Machine Learning Skill\n\nGPU-accelerated machine learning using NVIDIA RAPIDS cuML. cuML provides a scikit-learn-compatible API that runs on NVIDIA GPUs, enabling massive speedups on large datasets.\n\n## When to Use This Skill\n\nUse this skill when:\n- Training classification models (predict categories, detect fraud, classify text)\n- Training regression models (forecast values, predict prices, estimate quantities)\n- Clustering data (segment customers, group documents, find patterns)\n- Dimensionality reduction (visualize high-dimensional data, compress features)\n- Preprocessing and feature engineering on large datasets\n- Any ML task on datasets with 10K+ rows where GPU acceleration helps\n\n## Initialization (REQUIRED)\n\nAlways start every script with this boilerplate. It tests actual GPU ML operations.\n\n```python\nimport pandas as pd\nimport numpy as np\n\ntry:\n    import cudf\n    import cuml\n    # Smoke-test: verify GPU ML works end-to-end\n    _test_data = cudf.DataFrame({'a': [1.0, 2.0, 3.0, 4.0], 'b': [5.0, 6.0, 7.0, 8.0]})\n    _km = cuml.cluster.KMeans(n_clusters=2, n_init=1, random_state=42)\n    _km.fit(_test_data)\n    assert len(_km.labels_) == 4\n    GPU = True\nexcept Exception as e:\n    print(f\"[GPU] cuml unavailable, falling back to scikit-learn: {e}\")\n    GPU = False\n\ndef read_csv(path):\n    return cudf.read_csv(path) if GPU else pd.read_csv(path)\n\ndef to_pd(df):\n    \"\"\"Convert cuML/cuDF output to pandas. Use this instead of .to_pandas() directly.\"\"\"\n    if not GPU:\n        return df\n    try:\n        return df.to_pandas()\n    except Exception as e:\n        print(f\"[GPU] .to_pandas() failed, using Arrow fallback: {e}\")\n        return df.to_arrow().to_pandas()\n```\n\n## Import Patterns\n\n```python\n# GPU mode\nif GPU:\n    from cuml.cluster import KMeans, DBSCAN, HDBSCAN\n    from cuml.ensemble import RandomForestClassifier, RandomForestRegressor\n    from cuml.linear_model import LinearRegression, Ridge, Lasso, LogisticRegression\n    from cuml.neighbors import KNeighborsClassifier, KNeighborsRegressor\n    from cuml.svm import SVC, SVR\n    from cuml.decomposition import PCA, TruncatedSVD\n    from cuml.manifold import UMAP, TSNE\n    from cuml.preprocessing import StandardScaler, MinMaxScaler, LabelEncoder\n    from cuml.model_selection import train_test_split\n    from cuml.metrics import accuracy_score, r2_score, mean_squared_error\n# CPU fallback\nelse:\n    from sklearn.cluster import KMeans, DBSCAN, HDBSCAN\n    from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor\n    from sklearn.linear_model import LinearRegression, Ridge, Lasso, LogisticRegression\n    from sklearn.neighbors import KNeighborsClassifier, KNeighborsRegressor\n    from sklearn.svm import SVC, SVR\n    from sklearn.decomposition import PCA, TruncatedSVD\n    from sklearn.manifold import TSNE\n    from sklearn.preprocessing import StandardScaler, MinMaxScaler, LabelEncoder\n    from sklearn.model_selection import train_test_split\n    from sklearn.metrics import accuracy_score, r2_score, mean_squared_error\n    # UMAP not in sklearn — skip or pip install umap-learn\n```\n\n## Quick Reference\n\n### Train/Test Split (Start Here)\n\n```python\nX = df[[\"feature1\", \"feature2\", \"feature3\"]].astype(\"float32\")\ny = df[\"target\"]\n\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n```\n\n### Classification\n\n```python\nmodel = RandomForestClassifier(n_estimators=100, max_depth=10, random_state=42)\nmodel.fit(X_train, y_train)\n\npredictions = model.predict(X_test)\naccuracy = float(accuracy_score(to_pd(y_test), to_pd(predictions)))\nprint(f\"Accuracy: {accuracy:.4f}\")\n\n# Feature importances (tree models only)\nimportances = to_pd(model.feature_importances_)\nfor name, imp in zip(feature_names, importances):\n    print(f\"  {name}: {imp:.4f}\")\n```\n\n### Regression\n\n```python\nmodel = Ridge(alpha=1.0)\nmodel.fit(X_train, y_train)\n\npredictions = model.predict(X_test)\nr2 = float(r2_score(to_pd(y_test), to_pd(predictions)))\nmse = float(mean_squared_error(to_pd(y_test), to_pd(predictions)))\nprint(f\"R² Score: {r2:.4f}\")\nprint(f\"MSE: {mse:.4f}\")\n\n# Coefficients\ncoeffs = to_pd(model.coef_)\nprint(f\"Intercept: {float(model.intercept_):.4f}\")\n```\n\n### Clustering (KMeans)\n\n```python\nX = df[[\"feature1\", \"feature2\"]].astype(\"float32\")\n\nmodel = KMeans(n_clusters=4, n_init=10, random_state=42)\nmodel.fit(X)\n\nlabels = to_pd(model.labels_)\ncentroids = to_pd(model.cluster_centers_)\ninertia = float(model.inertia_)\n\nprint(f\"Inertia: {inertia:.2f}\")\nprint(f\"Cluster sizes: {labels.value_counts().sort_index().to_dict()}\")\nprint(f\"Centroids:\\n{centroids}\")\n```\n\n### Dimensionality Reduction (PCA)\n\n```python\nscaler = StandardScaler()\nX_scaled = scaler.fit_transform(X.astype(\"float32\"))\n\npca = PCA(n_components=3)\nX_reduced = pca.fit_transform(X_scaled)\n\nvariance_ratio = to_pd(pca.explained_variance_ratio_)\nprint(f\"Explained variance: {[f'{v:.4f}' for v in variance_ratio]}\")\nprint(f\"Total explained: {float(sum(variance_ratio)):.4f}\")\n```\n\n### Dimensionality Reduction (UMAP — GPU only)\n\n```python\nif GPU:\n    reducer = UMAP(n_components=2, n_neighbors=15, min_dist=0.1, random_state=42)\n    embedding = to_pd(reducer.fit_transform(X_scaled))\n    print(f\"UMAP embedding shape: {embedding.shape}\")\n```\n\n### Preprocessing\n\n```python\n# Scale numeric features\nscaler = StandardScaler()\nX_scaled = scaler.fit_transform(X.astype(\"float32\"))\n\n# Encode categorical columns\nle = LabelEncoder()\ndf[\"category_encoded\"] = le.fit_transform(df[\"category\"])\n```\n\n## Data Type Requirements\n\n- cuML requires **float32 or float64** for features. Always cast: `X.astype(\"float32\")`\n- Integer targets (classification labels) work directly\n- Categorical columns must be encoded first (LabelEncoder or OneHotEncoder)\n- cuML does NOT support sparse matrices — always use dense data\n\n## Gotchas\n\n| Issue | Fix |\n|-------|-----|\n| `TypeError: sparse input` | Convert to dense: `X.toarray()` or don't use sparse |\n| PCA `solver='randomized'` fails | Use `solver='full'` or omit (cuML auto-selects) |\n| UMAP not available on CPU | Skip UMAP in CPU mode or `pip install umap-learn` |\n| Float64 slower than float32 | Cast to float32: `X.astype(\"float32\")` |\n| Large dataset OOM | Reduce features or sample data before fitting |\n\n## Output Guidelines\n\nWhen reporting ML results:\n- Include dataset shape (rows × features) and target distribution\n- Show train/test split sizes\n- Report key metrics in a formatted table (accuracy, R², MSE, etc.)\n- For classification: show per-class metrics if multi-class\n- For clustering: show cluster sizes and centroid summaries\n- For dimensionality reduction: show explained variance ratios\n- List feature importances ranked by magnitude\n- Note any data quality issues (class imbalance, missing values, outliers)\n\n<!-- File: examples/nvidia_deep_agent/skills/data-visualization/SKILL.md (Tokens: ~3132 | Category: anthropic-skill) -->\n---\nname: data-visualization\ndescription: Use for creating publication-quality charts and multi-panel analysis summaries. Triggers when tasks involve visualizing data, plotting results, creating charts, or producing visual reports from analysis output.\n---\n\n# Data Visualization Skill\n\nCreate publication-quality analytical charts using matplotlib and seaborn in a headless GPU sandbox. Charts are saved as PNG files to `/workspace/` for retrieval.\n\n## When to Use This Skill\n\nUse this skill when:\n- Visualizing results from cuDF analysis or cuML models\n- Creating charts (bar, line, scatter, heatmap, histogram, box plot)\n- Building multi-panel analysis summaries\n- The user asks for visual output, plots, graphs, or charts\n- Presenting statistical findings with figures\n\n## Initialization (REQUIRED)\n\nMUST call `matplotlib.use('Agg')` BEFORE importing pyplot. This enables headless rendering.\n\n```python\nimport matplotlib\nmatplotlib.use('Agg')  # Headless backend — MUST be before pyplot import\nimport matplotlib.pyplot as plt\nimport numpy as np\n\n# Publication-quality defaults\nplt.rcParams.update({\n    'figure.dpi': 100,\n    'savefig.dpi': 300,\n    'font.size': 11,\n    'axes.labelsize': 12,\n    'axes.titlesize': 14,\n    'xtick.labelsize': 10,\n    'ytick.labelsize': 10,\n    'legend.fontsize': 10,\n    'figure.constrained_layout.use': True,\n})\n\n# Colorblind-safe palette (Okabe-Ito)\nCOLORS = ['#0173B2', '#DE8F05', '#029E73', '#D55E00', '#CC78BC',\n          '#CA9161', '#FBAFE4', '#949494', '#ECE133', '#56B4E9']\n```\n\n## Saving Charts\n\nAlways save to `/workspace/` with these settings:\n\n```python\nplt.savefig('/workspace/chart_name.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n- `dpi=300` for print quality\n- `bbox_inches='tight'` removes excess whitespace\n- `facecolor='white'` ensures white background\n- Always call `plt.close()` after saving to free memory\n\n## Displaying Charts (REQUIRED)\n\nAfter saving any chart, you MUST call `read_file` on it to display it inline in the conversation:\n\n```\nread_file(\"/workspace/chart_name.png\")\n```\n\nUsers cannot see charts unless you do this. Every chart you save MUST be followed by a `read_file` call.\n\n## Quick Reference\n\n### Bar Chart (from groupby results)\n\n```python\n# After: result = to_pd(df.groupby(\"category\")[\"value\"].mean())\nfig, ax = plt.subplots(figsize=(8, 5))\n\nbars = ax.bar(result.index, result.values, color=COLORS[:len(result)],\n              edgecolor='black', linewidth=0.8)\n\nfor bar in bars:\n    height = bar.get_height()\n    ax.text(bar.get_x() + bar.get_width()/2., height,\n            f'{height:.1f}', ha='center', va='bottom', fontsize=9)\n\nax.set_ylabel('Mean Value', fontweight='bold')\nax.set_xlabel('Category', fontweight='bold')\nax.set_title('Average Value by Category', fontweight='bold')\nax.grid(axis='y', alpha=0.3, linestyle='--')\nax.set_axisbelow(True)\n\nplt.savefig('/workspace/bar_chart.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Line Chart (trends over time)\n\n```python\nfig, ax = plt.subplots(figsize=(10, 5))\n\nfor i, col in enumerate(columns_to_plot):\n    ax.plot(df[\"date\"], df[col], label=col, color=COLORS[i], linewidth=2,\n            marker='o', markersize=3, markevery=max(1, len(df)//20))\n\nax.set_ylabel('Values', fontweight='bold')\nax.set_xlabel('Date', fontweight='bold')\nax.set_title('Trends Over Time', fontweight='bold')\nax.legend(frameon=True, shadow=False)\nax.grid(True, alpha=0.3, linestyle='--')\nax.set_axisbelow(True)\nplt.xticks(rotation=45, ha='right')\n\nplt.savefig('/workspace/line_chart.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Scatter Plot — Continuous Color (correlations)\n\n```python\nfig, ax = plt.subplots(figsize=(8, 6))\n\nscatter = ax.scatter(df[\"x\"], df[\"y\"], c=df[\"value\"], cmap='viridis',\n                     s=40, alpha=0.7, edgecolors='black', linewidth=0.3)\nplt.colorbar(scatter, ax=ax, label='Value')\n\n# Optional: trend line\nz = np.polyfit(df[\"x\"], df[\"y\"], 1)\nax.plot(df[\"x\"].sort_values(), np.poly1d(z)(df[\"x\"].sort_values()),\n        \"r--\", linewidth=2, label=f'y={z[0]:.2f}x+{z[1]:.2f}')\n\nax.set_xlabel('X', fontweight='bold')\nax.set_ylabel('Y', fontweight='bold')\nax.set_title('Correlation Analysis', fontweight='bold')\nax.legend()\nax.grid(True, alpha=0.3, linestyle='--')\n\nplt.savefig('/workspace/scatter_correlation.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Scatter Plot — Categorical Color (clusters)\n\n```python\nfig, ax = plt.subplots(figsize=(8, 6))\n\nfor i, label in enumerate(sorted(df[\"cluster\"].unique())):\n    mask = df[\"cluster\"] == label\n    ax.scatter(df.loc[mask, \"x\"], df.loc[mask, \"y\"],\n               c=COLORS[i], label=f'Cluster {label}', s=40, alpha=0.7)\n\nax.set_xlabel('X', fontweight='bold')\nax.set_ylabel('Y', fontweight='bold')\nax.set_title('Cluster Visualization', fontweight='bold')\nax.legend()\nax.grid(True, alpha=0.3, linestyle='--')\n\nplt.savefig('/workspace/scatter_clusters.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Heatmap (correlation matrix or confusion matrix)\n\n```python\nimport seaborn as sns\n\nfig, ax = plt.subplots(figsize=(8, 7))\n\n# corr_matrix = to_pd(df[numeric_cols].corr())\nsns.heatmap(corr_matrix, annot=True, fmt='.2f', cmap='RdBu_r', center=0,\n            square=True, linewidths=1, vmin=-1, vmax=1,\n            cbar_kws={'label': 'Correlation'}, ax=ax)\n\nax.set_title('Correlation Matrix', fontweight='bold')\n\nplt.savefig('/workspace/heatmap.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Histogram with KDE\n\n```python\nfig, ax = plt.subplots(figsize=(8, 5))\n\nax.hist(df[\"value\"], bins=30, color=COLORS[0], alpha=0.7,\n        edgecolor='black', linewidth=0.5, density=True, label='Distribution')\n\n# Add KDE curve\nfrom scipy.stats import gaussian_kde\nkde = gaussian_kde(df[\"value\"].dropna())\nx_range = np.linspace(df[\"value\"].min(), df[\"value\"].max(), 200)\nax.plot(x_range, kde(x_range), color=COLORS[1], linewidth=2, label='KDE')\n\nax.set_xlabel('Value', fontweight='bold')\nax.set_ylabel('Density', fontweight='bold')\nax.set_title('Value Distribution', fontweight='bold')\nax.legend()\nax.grid(axis='y', alpha=0.3, linestyle='--')\n\nplt.savefig('/workspace/histogram.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Box Plot (compare groups)\n\n```python\nfig, ax = plt.subplots(figsize=(8, 5))\n\ngroups = [df[df[\"group\"] == g][\"value\"].values for g in group_names]\nbp = ax.boxplot(groups, labels=group_names, patch_artist=True,\n                widths=0.6, showmeans=True,\n                meanprops=dict(marker='D', markerfacecolor='red', markersize=6))\n\nfor i, patch in enumerate(bp['boxes']):\n    patch.set_facecolor(COLORS[i % len(COLORS)])\n    patch.set_alpha(0.7)\n\nax.set_ylabel('Value', fontweight='bold')\nax.set_title('Distribution by Group', fontweight='bold')\nax.grid(axis='y', alpha=0.3, linestyle='--')\nax.set_axisbelow(True)\n\nplt.savefig('/workspace/boxplot.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Multi-Panel Analysis Summary\n\nUse this to create a single image with multiple charts — the most effective way to present a complete analysis.\n\n```python\nfig, axes = plt.subplots(2, 2, figsize=(14, 10))\n\n# Top-left: Distribution\naxes[0, 0].hist(df[\"value\"], bins=30, color=COLORS[0], alpha=0.7, edgecolor='black', linewidth=0.5)\naxes[0, 0].set_title('Value Distribution', fontweight='bold')\naxes[0, 0].set_xlabel('Value')\naxes[0, 0].grid(axis='y', alpha=0.3, linestyle='--')\n\n# Top-right: Scatter\naxes[0, 1].scatter(df[\"x\"], df[\"y\"], c=COLORS[0], s=30, alpha=0.5)\naxes[0, 1].set_title('X vs Y', fontweight='bold')\naxes[0, 1].set_xlabel('X')\naxes[0, 1].set_ylabel('Y')\naxes[0, 1].grid(True, alpha=0.3, linestyle='--')\n\n# Bottom-left: Bar chart\ngroup_means = df.groupby(\"category\")[\"value\"].mean()\naxes[1, 0].bar(group_means.index, group_means.values, color=COLORS[:len(group_means)])\naxes[1, 0].set_title('Mean by Category', fontweight='bold')\naxes[1, 0].set_xlabel('Category')\naxes[1, 0].grid(axis='y', alpha=0.3, linestyle='--')\n\n# Bottom-right: Box plot\naxes[1, 1].boxplot([df[df[\"category\"] == c][\"value\"].values for c in categories],\n                    labels=categories, patch_artist=True)\naxes[1, 1].set_title('Distribution by Category', fontweight='bold')\naxes[1, 1].grid(axis='y', alpha=0.3, linestyle='--')\n\nfig.suptitle('Analysis Summary', fontsize=16, fontweight='bold')\n\nplt.savefig('/workspace/analysis_summary.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Feature Importance Chart (from cuML model)\n\n```python\nfig, ax = plt.subplots(figsize=(8, max(4, len(feature_names) * 0.35)))\n\n# importances = to_pd(model.feature_importances_)\nsorted_idx = np.argsort(importances)\nax.barh(np.array(feature_names)[sorted_idx], importances[sorted_idx],\n        color=COLORS[0], edgecolor='black', linewidth=0.5)\n\nax.set_xlabel('Importance', fontweight='bold')\nax.set_title('Feature Importances', fontweight='bold')\nax.grid(axis='x', alpha=0.3, linestyle='--')\nax.set_axisbelow(True)\n\nplt.savefig('/workspace/feature_importance.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n### Confusion Matrix (from cuML classification)\n\n```python\nimport seaborn as sns\n\nfig, ax = plt.subplots(figsize=(7, 6))\n\n# cm = confusion_matrix(to_pd(y_test), to_pd(predictions))\nsns.heatmap(cm, annot=True, fmt='d', cmap='Blues', square=True,\n            xticklabels=class_names, yticklabels=class_names,\n            linewidths=1, cbar_kws={'label': 'Count'}, ax=ax)\n\nax.set_xlabel('Predicted', fontweight='bold')\nax.set_ylabel('Actual', fontweight='bold')\nax.set_title('Confusion Matrix', fontweight='bold')\n\nplt.savefig('/workspace/confusion_matrix.png', dpi=300, bbox_inches='tight',\n            facecolor='white', edgecolor='none')\nplt.close()\n# IMPORTANT: call read_file(\"/workspace/<chart>.png\") to display inline\n```\n\n## Style Rules\n\n- Use `COLORS` palette (colorblind-safe) — never rely on color alone to distinguish elements\n- No pie charts (bar charts are always clearer)\n- No 3D plots (distort data perception)\n- Grid lines at `alpha=0.3, linestyle='--'` with `ax.set_axisbelow(True)`\n- Bold axis labels and titles (`fontweight='bold'`)\n- White background for all exports\n- 1-4 charts per analysis is typical; use multi-panel for more\n\n## Output Guidelines\n\n- Save all charts to `/workspace/` as PNG\n- Print file paths after saving so the agent can reference them\n- For multi-panel summaries, use `figsize=(14, 10)` for 2×2 layouts\n- Keep chart titles descriptive but concise\n- Include units in axis labels when applicable\n\n<!-- File: examples/nvidia_deep_agent/skills/gpu-document-processing/SKILL.md (Tokens: ~753 | Category: anthropic-skill) -->\n---\nname: gpu-document-processing\ndescription: Use when processing large PDFs, document collections, or bulk text extraction tasks that benefit from GPU-accelerated processing. Triggers when the user provides large documents or needs bulk document analysis.\n---\n\n# GPU Document Processing Skill\n\nProcess large documents and document collections using GPU-accelerated tools. This skill uses the sandbox-as-tool pattern: the agent runs on CPU for reasoning, and sends document processing work to a GPU-equipped environment.\n\n## When to Use This Skill\n\nUse this skill when:\n- Processing large PDF files (50+ pages)\n- Analyzing collections of documents (10+ files)\n- Extracting structured data from unstructured documents\n- Performing bulk text extraction and chunking\n- Generating embeddings for large document sets\n- The user uploads or references large documents for analysis\n\n## Architecture: Sandbox as Tool\n\nThis skill follows the **sandbox-as-tool pattern** for GPU execution:\n\n1. **Agent reasons on CPU** - planning, synthesis, report writing\n2. **Processing sent to GPU sandbox** - document parsing, embedding, extraction\n3. **Results returned to agent** - structured output for further analysis\n\nThis separation ensures:\n- API keys stay outside the sandbox (security)\n- Agent state persists independently of processing jobs\n- Processing can be parallelized across documents\n- Cost-efficient: GPU used only during processing, not during reasoning\n\n## Capabilities\n\n### PDF Text Extraction\nExtract text content from PDF documents with layout preservation:\n- Headers, paragraphs, lists, and tables detected separately\n- Page numbers and section boundaries preserved\n- Multi-column layout handling\n\n### Tabular Data Extraction\nExtract tables from documents into structured formats:\n- PDF tables to CSV/DataFrames using GPU-accelerated parsing\n- Automatic column type detection\n- Handles merged cells and multi-row headers\n\n### Document Chunking\nSplit large documents into meaningful chunks for analysis:\n- Semantic chunking (by topic/section boundaries)\n- Fixed-size chunking with overlap for embedding\n- Configurable chunk sizes (default: 512 tokens)\n\n### Embedding Generation\nGenerate vector embeddings for document chunks:\n- Uses NVIDIA NeMo Retriever NIM for GPU-accelerated embedding\n- Supports batch processing for large document sets\n- Compatible with standard vector stores (Milvus, ChromaDB)\n\n## Workflow\n\n1. **Receive document reference** from the orchestrator\n2. **Determine processing type** (extraction, analysis, embedding)\n3. **Send to GPU sandbox** for processing\n4. **Collect structured results** (text, tables, embeddings)\n5. **Write findings** to /shared/ for the orchestrator to synthesize\n\n## Processing Large Document Collections\n\nFor multiple documents:\n1. Process documents in parallel batches (3-5 concurrent)\n2. Extract key metadata first (title, date, author, page count)\n3. Generate per-document summaries\n4. Cross-reference findings across documents\n5. Write consolidated findings with per-document citations\n\n## Output Format\n\nWhen reporting document processing results:\n- Include document metadata (filename, pages, size)\n- Structure extracted content by section/chapter\n- Format tables as markdown tables\n- Include page references for all extracted content\n- Note any extraction quality issues (scanned images, corrupted pages)\n\n## Integration with NVIDIA NIM\n\nFor production deployments, GPU document processing can leverage:\n- **NVIDIA NeMo Retriever**: GPU-accelerated embedding and retrieval\n- **NVIDIA RAPIDS cuDF**: Tabular data processing from extracted tables\n- **NVIDIA Triton**: Scalable inference for document classification models\n\nSee NVIDIA's NIM documentation for self-hosted deployment options.\n\n<!-- File: examples/repl_swarm/skills/swarm/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# swarm\n\nPath: `examples/repl_swarm/skills/swarm/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/repl_swarm/skills/swarm/SKILL.md)\n\n<!-- File: examples/text-to-sql-agent/skills/query-writing/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# query-writing\n\nPath: `examples/text-to-sql-agent/skills/query-writing/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/text-to-sql-agent/skills/query-writing/SKILL.md)\n\n<!-- File: examples/text-to-sql-agent/skills/schema-exploration/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# schema-exploration\n\nPath: `examples/text-to-sql-agent/skills/schema-exploration/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/examples/text-to-sql-agent/skills/schema-exploration/SKILL.md)\n\n<!-- File: libs/cli/examples/deploy-content-writer/skills/blog-post/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# blog-post\n\nPath: `libs/cli/examples/deploy-content-writer/skills/blog-post/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/deploy-content-writer/skills/blog-post/SKILL.md)\n\n<!-- File: libs/cli/examples/deploy-content-writer/skills/social-media/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# social-media\n\nPath: `libs/cli/examples/deploy-content-writer/skills/social-media/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/deploy-content-writer/skills/social-media/SKILL.md)\n\n<!-- File: libs/cli/examples/skills/arxiv-search/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# arxiv-search\n\nPath: `libs/cli/examples/skills/arxiv-search/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/skills/arxiv-search/SKILL.md)\n\n<!-- File: libs/cli/examples/skills/langgraph-docs/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# langgraph-docs\n\nPath: `libs/cli/examples/skills/langgraph-docs/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/skills/langgraph-docs/SKILL.md)\n\n<!-- File: libs/cli/examples/skills/skill-creator/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# skill-creator\n\nPath: `libs/cli/examples/skills/skill-creator/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/skills/skill-creator/SKILL.md)\n\n<!-- File: libs/cli/examples/skills/web-research/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# web-research\n\nPath: `libs/cli/examples/skills/web-research/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/examples/skills/web-research/SKILL.md)\n\n<!-- File: libs/cli/tests/unit_tests/deploy/fixtures/projects/subagent_with_local_skills/subagents/researcher/skills/note/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# note\n\nPath: `libs/cli/tests/unit_tests/deploy/fixtures/projects/subagent_with_local_skills/subagents/researcher/skills/note/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/tests/unit_tests/deploy/fixtures/projects/subagent_with_local_skills/subagents/researcher/skills/note/SKILL.md)\n\n<!-- File: libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/examples.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Summarize Skill\n\nPath: `libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/examples.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/examples.md)\n\n<!-- File: libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# summarize\n\nPath: `libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/cli/tests/unit_tests/deploy/fixtures/projects/with_skills/skills/summarize/SKILL.md)\n\n<!-- File: libs/code/deepagents_code/built_in_skills/remember/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# remember\n\nPath: `libs/code/deepagents_code/built_in_skills/remember/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/deepagents_code/built_in_skills/remember/SKILL.md)\n\n<!-- File: libs/code/deepagents_code/built_in_skills/skill-creator/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# skill-creator\n\nPath: `libs/code/deepagents_code/built_in_skills/skill-creator/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/deepagents_code/built_in_skills/skill-creator/SKILL.md)\n\n<!-- File: libs/code/examples/skills/arxiv-search/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# arxiv-search\n\nPath: `libs/code/examples/skills/arxiv-search/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/examples/skills/arxiv-search/SKILL.md)\n\n<!-- File: libs/code/examples/skills/langgraph-docs/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# langgraph-docs\n\nPath: `libs/code/examples/skills/langgraph-docs/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/langchain-ai/deepagents/HEAD/libs/code/examples/skills/langgraph-docs/SKILL.md)\n\n<!-- ... +16 more modular skills available via /api/skills/langchain-ai/deepagents?path={path} -->\n</yakaai_skills>"}