From f65aa9707c8e24361784968827ac0c9747415e66 Mon Sep 17 00:00:00 2001 From: REAL-Madrid01 <3098711414@qq.com> Date: Thu, 26 Feb 2026 17:01:30 +0800 Subject: [PATCH 1/5] upload skill datanalysis-credit-risk --- skills/datanalysis-credit-risk/SKILL.md | 113 ++ .../__pycache__/analysis.cpython-313.pyc | Bin 0 -> 55261 bytes .../__pycache__/func.cpython-313.pyc | Bin 0 -> 11926 bytes .../references/analysis.py | 1223 +++++++++++++++++ .../references/func.py | 228 +++ .../scripts/example.py | 386 ++++++ 6 files changed, 1950 insertions(+) create mode 100644 skills/datanalysis-credit-risk/SKILL.md create mode 100644 skills/datanalysis-credit-risk/references/__pycache__/analysis.cpython-313.pyc create mode 100644 skills/datanalysis-credit-risk/references/__pycache__/func.cpython-313.pyc create mode 100644 skills/datanalysis-credit-risk/references/analysis.py create mode 100644 skills/datanalysis-credit-risk/references/func.py create mode 100644 skills/datanalysis-credit-risk/scripts/example.py diff --git a/skills/datanalysis-credit-risk/SKILL.md b/skills/datanalysis-credit-risk/SKILL.md new file mode 100644 index 000000000..090a47c90 --- /dev/null +++ b/skills/datanalysis-credit-risk/SKILL.md @@ -0,0 +1,113 @@ +--- +name: datanalysis-credit-risk +description: Credit risk data cleaning and variable screening pipeline for pre-loan modeling. Use when working with raw credit data that needs quality assessment, missing value analysis, or variable selection before modeling. it covers data loading and formatting, abnormal period filtering, missing rate calculation, high-missing variable removal,low-IV variable filtering, high-PSI variable removal, Null Importance denoising, high-correlation variable removal, and cleaning report generation. 适用场景:信用风险数据清洗、变量筛选、贷前建模预处理。关键词:缺失率、IV值、PSI、Null Importance、相关性剔除、数据质量报告。 +--- + +# 数据清洗与筛选 + +## 快速开始 + +```bash +# 运行完整的数据清洗流程 +python ".github/skills/datanalysis-credit-risk/scripts/example.py" +``` + +## 完整流程说明 + +数据清洗流程包含以下11个步骤,每个步骤独立执行,不删除原始数据: + +1. **获取数据** - 加载并格式化原始数据 +2. **机构样本分析** - 统计各机构的样本数量和坏样本率 +3. **分离OOS数据** - 将贷外样本与建模样本分离 +4. **过滤异常月份** - 剔除坏样本数或总样本数过少的月份 +5. **计算缺失率** - 计算各变量的整体缺失率和分机构缺失率 +6. **剔除高缺失变量** - 剔除整体缺失率超过阈值的变量 +7. **剔除低IV变量** - 剔除整体IV过低或在过多机构上IV过低的变量 +8. **剔除高PSI变量** - 剔除PSI不稳定的变量 +9. **Null Importance去噪** - 使用标签反转方法剔除噪音变量 +10. **剔除高相关变量** - 基于原始gain剔除高相关变量 +11. **导出报告** - 生成包含所有步骤详情和统计的Excel报告 + +## 核心函数 + +| 函数 | 作用 | 所在模块 | +|------|------|----------| +| `get_dataset()` | 加载并格式化数据 | ai_utils.func | +| `org_analysis()` | 机构样本分析 | ai_utils.func | +| `missing_check()` | 计算缺失率 | ai_utils.func | +| `drop_abnormal_ym()` | 过滤异常月份 | ai_utils.analysis | +| `drop_highmiss_features()` | 剔除高缺失变量 | ai_utils.analysis | +| `drop_lowiv_features()` | 剔除低IV变量 | ai_utils.analysis | +| `drop_highpsi_features()` | 剔除高PSI变量 | ai_utils.analysis | +| `drop_highnoise_features()` | Null Importance去噪 | ai_utils.analysis | +| `drop_highcorr_features()` | 剔除高相关变量 | ai_utils.analysis | +| `iv_distribution_by_org()` | IV分布统计 | ai_utils.analysis | +| `psi_distribution_by_org()` | PSI分布统计 | ai_utils.analysis | +| `value_ratio_distribution_by_org()` | 有值率分布统计 | ai_utils.analysis | +| `export_cleaning_report()` | 导出清洗报告 | ai_utils.analysis | + +## 参数说明 + +### 数据加载参数 +- `DATA_PATH`: 数据文件路径(parquet格式) +- `DATE_COL`: 日期列名 +- `Y_COL`: 标签列名 +- `ORG_COL`: 机构列名 +- `KEY_COLS`: 主键列名列表 + +### OOS机构配置 +- `OOS_ORGS`: 贷外机构列表 + +### 异常月份过滤参数 +- `min_ym_bad_sample`: 单月最小坏样本数(默认10) +- `min_ym_sample`: 单月最小总样本数(默认500) + +### 缺失率参数 +- `missing_ratio`: 整体缺失率阈值(默认0.6) + +### IV参数 +- `overall_iv_threshold`: 整体IV阈值(默认0.1) +- `org_iv_threshold`: 单机构IV阈值(默认0.1) +- `max_org_threshold`: 最大容忍低IV机构数(默认2) + +### PSI参数 +- `psi_threshold`: PSI阈值(默认0.1) +- `max_months_ratio`: 最大不稳定月份比例(默认1/3) +- `max_orgs`: 最大不稳定机构数(默认6) + +### Null Importance参数 +- `n_estimators`: 树的数量(默认100) +- `max_depth`: 树的最大深度(默认5) +- `gain_threshold`: gain差值阈值(默认50) + +### 高相关性参数 +- `max_corr`: 相关性阈值(默认0.9) +- `top_n_keep`: 保留原始gain排名前N的变量(默认20) + +## 输出报告 + +生成的Excel报告包含以下sheet: + +1. **汇总** - 所有步骤的汇总信息,包括操作结果和依据条件 +2. **机构样本统计** - 各机构的样本数量和坏样本率 +3. **分离OOS数据** - OOS样本和建模样本数量 +4. **Step4-异常月份处理** - 被剔除的异常月份 +5. **缺失率明细** - 各变量的整体和分机构缺失率 +6. **Step5-有值率分布统计** - 各变量在不同有值率区间的分布 +7. **Step6-高缺失率处理** - 被剔除的高缺失变量 +8. **Step7-IV明细** - 各变量在每个机构上以及整体上的IV值 +9. **Step7-IV处理** - 不满足IV条件的变量及低IV机构 +10. **Step7-IV分布统计** - 各变量在不同IV区间的分布 +11. **Step8-PSI明细** - 各变量在每个机构每个月上的PSI值 +12. **Step8-PSI处理** - 不满足PSI条件的变量及不稳定机构 +13. **Step8-PSI分布统计** - 各变量在不同PSI区间的分布 +14. **Step9-null importance处理** - 被剔除的噪音变量 +15. **Step10-高相关性剔除** - 被剔除的高相关变量 + +## 特点 + +- **交互式输入**:每个步骤执行前可输入参数,支持默认值 +- **独立执行**:各步骤独立执行,不删除原始数据,便于对比分析 +- **完整报告**:生成包含明细、统计、分布的完整Excel报告 +- **多进程支持**:IV、PSI计算支持多进程加速 +- **分机构分析**:支持分机构统计和建模/贷外区分 diff --git a/skills/datanalysis-credit-risk/references/__pycache__/analysis.cpython-313.pyc b/skills/datanalysis-credit-risk/references/__pycache__/analysis.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..536ad6abfa2133835fc2f4fd8b692c069db08159 GIT binary patch literal 55261 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%0Db`Iku4$JpeJbbj`a2Qp8;GaYiuwd@-6vN^*H+a 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 Dr>JX= literal 0 HcmV?d00001 diff --git a/skills/datanalysis-credit-risk/references/__pycache__/func.cpython-313.pyc b/skills/datanalysis-credit-risk/references/__pycache__/func.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f2c830c4d64d6aae80bf5b7a9b868966df3493eb GIT binary patch literal 11926 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 E05}MVEdT%j literal 0 HcmV?d00001 diff --git a/skills/datanalysis-credit-risk/references/analysis.py b/skills/datanalysis-credit-risk/references/analysis.py new file mode 100644 index 000000000..cf7c2db50 --- /dev/null +++ b/skills/datanalysis-credit-risk/references/analysis.py @@ -0,0 +1,1223 @@ +"""变量筛选与分析模块 - 精简版 +PSI计算在func.py中复用,analysis.py只做变量筛选 +""" +import pandas as pd +import numpy as np +import toad +from typing import List, Dict, Tuple +from openpyxl import Workbook +from openpyxl.styles import Font, PatternFill, Alignment +from datetime import datetime +import lightgbm as lgb +from sklearn.model_selection import train_test_split +from sklearn.metrics import roc_auc_score +from joblib import Parallel, delayed + + +def drop_abnormal_ym(data: pd.DataFrame, min_ym_bad_sample: int = 1, + min_ym_sample: int = 500) -> tuple: + """过滤异常月份 - 整体统计,不分机构""" + stat = data.groupby('new_date_ym').agg( + bad_cnt=('new_target', 'sum'), + total=('new_target', 'count') + ).reset_index() + + abnormal = stat[(stat['bad_cnt'] < min_ym_bad_sample) | (stat['total'] < min_ym_sample)] + abnormal = abnormal.rename(columns={'new_date_ym': '年月'}) + abnormal['去除条件'] = abnormal.apply( + lambda x: f'坏样本数{x["bad_cnt"]}小于{min_ym_bad_sample}' if x['bad_cnt'] < min_ym_bad_sample else f'总样本数{x["total"]}小于{min_ym_sample}', axis=1 + ) + + if len(abnormal) > 0: + data = data[~data['new_date_ym'].isin(abnormal['年月'])] + + # 移除空行 + abnormal = abnormal.dropna(how='all') + abnormal = abnormal.reset_index(drop=True) + + return data, abnormal + + +def drop_highmiss_features(data: pd.DataFrame, miss_channel: pd.DataFrame, + threshold: float = 0.6) -> tuple: + """剔除高缺失变量""" + high_miss = miss_channel[miss_channel['整体缺失率'] > threshold].copy() + high_miss['缺失率'] = high_miss['整体缺失率'] + + # 修改去除条件写法,显示具体缺失率值 + high_miss['去除条件'] = high_miss.apply( + lambda x: f'该变量整体缺失率为{x["缺失率"]:.4f},超过阈值{threshold}', axis=1 + ) + + # 移除空行 + high_miss = high_miss.dropna(how='all') + high_miss = high_miss.reset_index(drop=True) + + # 剔除高缺失变量 + if len(high_miss) > 0 and '变量' in high_miss.columns: + to_drop = high_miss['变量'].tolist() + data = data.drop(columns=[c for c in to_drop if c in data.columns]) + + return data, high_miss[['变量', '缺失率', '去除条件']] + + +def drop_lowiv_features(data: pd.DataFrame, features: List[str], + overall_iv_threshold: float = 0.05, org_iv_threshold: float = 0.02, + max_org_threshold: int = 8, n_jobs: int = 4) -> tuple: + """剔除低IV变量 - 多进程版本,返回IV明细和IV处理表 + + Args: + overall_iv_threshold: 整体IV阈值,低于此值记录到IV处理表 + org_iv_threshold: 单机构IV阈值,低于此值认为不满足 + max_org_threshold: 最大容忍机构数,超过此数机构IV低于阈值则记录到IV处理表 + + Returns: + data: 剔除后的数据 + iv_detail: IV明细(每个变量在每个机构上以及整体上的IV值) + iv_process: IV处理表(不满足设定条件的变量) + """ + from references.func import calculate_iv + from joblib import Parallel, delayed + + orgs = sorted(data['new_org'].unique()) + + print(f" IV计算: 特征数={len(features)}, 机构数={len(orgs)}") + + # 一次性计算所有机构的IV值 + def _calc_org_iv(org): + org_data = data[data['new_org'] == org] + org_iv = calculate_iv(org_data, features, n_jobs=1) + if len(org_iv) > 0: + org_iv = org_iv.rename(columns={'IV': 'IV值'}) + org_iv['机构'] = org + return org_iv + return None + + # 计算整体IV + print(f" 计算整体IV...") + iv_overall = calculate_iv(data, features, n_jobs=n_jobs) + print(f" 整体IV计算结果: {len(iv_overall)}个变量") + if len(iv_overall) == 0: + print(f" 警告: 整体IV计算结果为空,返回空表") + return data, pd.DataFrame(columns=['变量', 'IV值', '机构', '类型']), pd.DataFrame(columns=['变量', '整体IV', '低IV机构数', '处理原因']) + iv_overall = iv_overall.rename(columns={'IV': 'IV值'}) + + # 并行计算所有机构的IV值 + print(f" 并行计算{len(orgs)}个机构的IV值...") + iv_by_org_results = Parallel(n_jobs=n_jobs, verbose=0)( + delayed(_calc_org_iv)(org) for org in orgs + ) + iv_by_org = [r for r in iv_by_org_results if r is not None] + iv_by_org = pd.concat(iv_by_org, ignore_index=True) if iv_by_org else pd.DataFrame(columns=['变量', 'IV值', '机构']) + print(f" 分机构IV汇总: {len(iv_by_org)}条记录") + + # 转换为宽表格式:变量,整体,机构1,机构2,...,机构n + iv_detail_dict = {'变量': []} + iv_detail_dict['整体'] = [] + + for org in orgs: + iv_detail_dict[org] = [] + + # 获取所有变量 + all_vars = set(iv_overall['变量'].tolist()) + if len(iv_by_org) > 0: + all_vars.update(iv_by_org['变量'].tolist()) + all_vars = sorted(all_vars) + + for var in all_vars: + iv_detail_dict['变量'].append(var) + + # 整体IV + var_overall = iv_overall[iv_overall['变量'] == var] + if len(var_overall) > 0: + iv_detail_dict['整体'].append(var_overall['IV值'].values[0]) + else: + iv_detail_dict['整体'].append(None) + + # 各机构IV + for org in orgs: + var_org = iv_by_org[iv_by_org['机构'] == org] + var_org = var_org[var_org['变量'] == var] + if len(var_org) > 0: + iv_detail_dict[org].append(var_org['IV值'].values[0]) + else: + iv_detail_dict[org].append(None) + + iv_detail = pd.DataFrame(iv_detail_dict) + # 按照整体IV降序排序 + iv_detail = iv_detail.sort_values('整体', ascending=False) + iv_detail = iv_detail.reset_index(drop=True) + + # 标记不满足条件的变量 + # 1. 整体IV低于阈值 + iv_overall_low = iv_overall[iv_overall['IV值'] < overall_iv_threshold]['变量'].tolist() + + # 2. 单机构IV低于阈值的机构数 + if len(iv_by_org) > 0: + iv_by_org_low = iv_by_org[iv_by_org['IV值'] < org_iv_threshold].groupby('变量').size().reset_index() + iv_by_org_low.columns = ['变量', '低IV机构数'] + else: + iv_by_org_low = pd.DataFrame(columns=['变量', '低IV机构数']) + + # 获取每个变量的低IV机构列表 + low_iv_orgs_dict = {} + if len(iv_by_org) > 0: + for var in iv_by_org['变量'].unique(): + var_orgs = iv_by_org[(iv_by_org['变量'] == var) & (iv_by_org['IV值'] < org_iv_threshold)]['机构'].tolist() + low_iv_orgs_dict[var] = var_orgs + + # 3. 标记需要处理的变量 + iv_process = [] + + # 调试信息:统计IV分布 + if len(iv_overall) > 0: + print(f" 整体IV统计: 最小值={iv_overall['IV值'].min():.4f}, 最大值={iv_overall['IV值'].max():.4f}, 中位数={iv_overall['IV值'].median():.4f}") + print(f" 整体IV小于{overall_iv_threshold}的变量数: {(iv_overall['IV值'] < overall_iv_threshold).sum()}/{len(iv_overall)}") + + if len(iv_by_org_low) > 0: + print(f" 分机构IV小于{org_iv_threshold}的变量统计:") + print(f" 最多低IV机构数: {iv_by_org_low['低IV机构数'].max()}") + print(f" 低IV机构数大于等于{max_org_threshold}的变量数: {(iv_by_org_low['低IV机构数'] >= max_org_threshold).sum()}/{len(iv_by_org_low)}") + + for var in features: + reasons = [] + + # 检查整体IV + var_overall_iv = iv_overall[iv_overall['变量'] == var]['IV值'].values + if len(var_overall_iv) > 0 and var_overall_iv[0] < overall_iv_threshold: + reasons.append(f'整体IV{var_overall_iv[0]:.4f}小于阈值{overall_iv_threshold}') + + # 检查分机构IV + var_org_low = iv_by_org_low[iv_by_org_low['变量'] == var] + if len(var_org_low) > 0 and var_org_low['低IV机构数'].values[0] >= max_org_threshold: + reasons.append(f'在{var_org_low["低IV机构数"].values[0]}个机构上IV小于阈值{org_iv_threshold}') + + if reasons: + iv_process.append({ + '变量': var, + '处理原因': '; '.join(reasons), + '低IV机构': ','.join(low_iv_orgs_dict.get(var, [])) + }) + + iv_process = pd.DataFrame(iv_process) + iv_process = iv_process.reset_index(drop=True) + + # 剔除不满足条件的变量 + if len(iv_process) > 0 and '变量' in iv_process.columns: + to_drop = iv_process['变量'].tolist() + data = data.drop(columns=[c for c in to_drop if c in data.columns]) + + return data, iv_detail, iv_process + + +def drop_highcorr_features(data: pd.DataFrame, features: List[str], + threshold: float = 0.8, gain_dict: dict = None, top_n_keep: int = 20) -> tuple: + """剔除高相关变量 - 基于原始gain,每次剔除一个变量 + + Args: + data: 数据 + features: 特征列表 + threshold: 相关性阈值 + gain_dict: 变量到原始gain的映射字典 + top_n_keep: 保留原始gain排名前N的变量 + + Returns: + data: 剔除后的数据 + dropped_info: 剔除信息 + """ + if gain_dict is None: + gain_dict = {} + + # 获取当前特征列表(只存在于数据中的特征) + current_features = [f for f in features if f in data.columns] + + if len(current_features) == 0: + return data, pd.DataFrame(columns=['变量', '相关变量', '去除条件']) + + # 确定需要保留的变量(原始gain排名前N) + if gain_dict: + # 只考虑存在于当前特征中的变量 + current_gain_dict = {k: v for k, v in gain_dict.items() if k in current_features} + if current_gain_dict: + sorted_features = sorted(current_gain_dict.keys(), key=lambda x: current_gain_dict[x], reverse=True) + top_features = set(sorted_features[:top_n_keep]) + # 创建变量到排名的映射 + rank_dict = {v: i+1 for i, v in enumerate(sorted_features)} + else: + top_features = set() + rank_dict = {} + else: + top_features = set() + rank_dict = {} + + dropped_info = [] + + # 循环剔除,直到没有高相关变量对 + while True: + # 重新计算相关性矩阵(只针对当前剩余的特征) + current_features = [f for f in current_features if f in data.columns] + if len(current_features) < 2: + break + + corr = data[current_features].corr().abs() + upper = corr.where(np.triu(np.ones(corr.shape), k=1).astype(bool)) + + # 找到所有高相关变量对 + high_corr_pairs = [] + for i, col1 in enumerate(upper.columns): + for col2 in upper.columns[i+1:]: + corr_val = upper.loc[col1, col2] + if pd.notna(corr_val) and corr_val > threshold: + high_corr_pairs.append((col1, col2, corr_val)) + + if not high_corr_pairs: + break + + # 对于每个高相关变量对,选择原始gain较小的变量作为候选剔除 + candidates = set() + for col1, col2, corr_val in high_corr_pairs: + # 跳过top N保留的变量 + if col1 in top_features and col2 in top_features: + continue + + gain1 = gain_dict.get(col1, 0) + gain2 = gain_dict.get(col2, 0) + + # 选择原始gain较小的变量 + if gain1 <= gain2: + candidates.add(col1) + else: + candidates.add(col2) + + if not candidates: + break + + # 在候选变量中选择原始gain最小的进行剔除 + candidates_list = list(candidates) + candidates_with_gain = [(c, gain_dict.get(c, 0)) for c in candidates_list] + candidates_with_gain.sort(key=lambda x: x[1]) + to_drop = candidates_with_gain[0][0] + + # 找到与该变量高相关的所有变量 + related_vars = [] + for col1, col2, corr_val in high_corr_pairs: + if col1 == to_drop: + related_vars.append((col2, corr_val)) + elif col2 == to_drop: + related_vars.append((col1, corr_val)) + + # 记录剔除信息 + # 相关变量列:显示变量名和相似度值(相关性值) + related_str = ','.join([f"{v}(相似度={c:.4f})" for v, c in related_vars]) + # 去除条件列:显示相关变量及其对应的gain值 + gain_str = ','.join([f"{v}(gain={gain_dict.get(v, 0):.2f})" for v, c in related_vars]) + dropped_info.append({ + '变量': to_drop, + '原始gain': gain_dict.get(to_drop, 0), + '原始gain排名': rank_dict.get(to_drop, '-'), + '相关变量': related_str, + '去除条件': gain_str + }) + + # 从数据中删除该变量 + data = data.drop(columns=[to_drop], errors='ignore') + current_features.remove(to_drop) + + print(f" 剔除变量: {to_drop} (原始gain={gain_dict.get(to_drop, 0):.2f})") + + # 转换为DataFrame并按原始gain降序排序 + dropped_df = pd.DataFrame(dropped_info) + if len(dropped_df) > 0: + dropped_df = dropped_df.sort_values('原始gain', ascending=False) + dropped_df = dropped_df.reset_index(drop=True) + + return data, dropped_df + + +def drop_highnoise_features(data: pd.DataFrame, features: List[str], + n_estimators: int = 100, max_depth: int = 5, gain_threshold: float = 50) -> tuple: + """Null Importance去除高噪音变量""" + # 检查特征列表是否为空 + if len(features) == 0: + print(" 没有特征需要处理") + return data, pd.DataFrame(columns=['变量', '原始gain', '反转后gain']) + + # 检查数据是否足够 + if len(data) < 1000: + print(f" 数据量不足({len(data)}条),跳过Null Importance") + return data, pd.DataFrame(columns=['变量', '原始gain', '反转后gain']) + + X = data[features].copy() + Y = data['new_target'].copy() + + # 检查X是否为空或包含NaN + if X.shape[1] == 0: + print(" 特征数据为空,跳过Null Importance") + return data, pd.DataFrame(columns=['变量', '原始gain', '反转后gain']) + + # 填充NaN + X = X.fillna(0) + + # 打乱标签 + Y_permuted = Y.copy() + for _ in range(20): + Y_permuted = np.random.permutation(Y_permuted) + + clf = lgb.LGBMClassifier( + objective='binary', boosting_type='gbdt', learning_rate=0.05, + max_depth=max_depth, min_child_samples=2000, min_child_weight=20, + n_estimators=n_estimators, num_leaves=2**max_depth - 1, n_jobs=-1, verbose=-1 + ) + + clf_permuted = lgb.LGBMClassifier( + objective='binary', boosting_type='gbdt', learning_rate=0.05, + max_depth=max_depth, min_child_samples=2000, min_child_weight=20, + n_estimators=n_estimators, num_leaves=2**max_depth - 1, n_jobs=-1, verbose=-1 + ) + + results, results_permuted = [], [] + + print("Null Importance计算中...") + for i in range(2): + random_n = np.random.randint(30) + + X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.3, random_state=random_n) + + # 检查训练数据是否有效 + if X_train.shape[0] == 0 or X_test.shape[0] == 0: + print(f" 轮次{i+1}: 数据分割失败,跳过") + continue + + clf.fit(X_train, y_train) + + X_train_, X_test_, y_train_, y_test_ = train_test_split(X, Y_permuted, test_size=0.3, random_state=random_n) + + if X_train_.shape[0] == 0 or X_test_.shape[0] == 0: + print(f" 轮次{i+1}: 打乱数据分割失败,跳过") + continue + + clf_permuted.fit(X_train_, y_train_) + + imp_real = pd.DataFrame({ + 'feature': clf.booster_.feature_name(), + 'gain': clf.booster_.feature_importance(importance_type='gain') + }) + imp_perm = pd.DataFrame({ + 'feature': clf_permuted.booster_.feature_name(), + 'gain': clf_permuted.booster_.feature_importance(importance_type='gain') + }) + + results.append(imp_real) + results_permuted.append(imp_perm) + + train_auc = roc_auc_score(y_train, clf.predict_proba(X_train)[:, 1]) + test_auc = roc_auc_score(y_test, clf.predict_proba(X_test)[:, 1]) + print(f" 轮次{i+1}: train_auc={train_auc:.3f}, test_auc={test_auc:.3f}") + + # 检查是否有有效结果 + if len(results) == 0 or len(results_permuted) == 0: + print(" 没有有效的训练结果,跳过Null Importance") + return data, pd.DataFrame(columns=['变量', '原始gain', '反转后gain']) + + imp_real_avg = pd.concat(results).groupby('feature')['gain'].mean().reset_index() + imp_perm_avg = pd.concat(results_permuted).groupby('feature')['gain'].mean().reset_index() + + comparison = imp_real_avg.merge(imp_perm_avg, on='feature', suffixes=('_real', '_perm')) + comparison['gain_real'] = comparison['gain_real'].fillna(0) + comparison['gain_perm'] = comparison['gain_perm'].fillna(0) + + # 使用反转前后gain值差别绝对值小于50的条件 + comparison['gain_diff'] = (comparison['gain_real'] - comparison['gain_perm']).abs() + noise_features = comparison[comparison['gain_diff'] < gain_threshold]['feature'].tolist() + + # 列出所有变量的原始gain和反转后gain + dropped_info = pd.DataFrame({ + '变量': comparison['feature'].values, + '原始gain': comparison['gain_real'].values, + '反转后gain': comparison['gain_perm'].values + }) + # 增加状态列,去除的要标明去除,不去除的标明保留 + dropped_info['状态'] = dropped_info.apply( + lambda x: '去除' if np.abs(x['原始gain'] - x['反转后gain']) < gain_threshold else '保留', axis=1 + ) + # 按原始gain降序排序 + dropped_info = dropped_info.sort_values('原始gain', ascending=False) + dropped_info = dropped_info.reset_index(drop=True) + # 添加原始gain排名列 + dropped_info['原始gain排名'] = range(1, len(dropped_info) + 1) + + data = data.drop(columns=[c for c in noise_features if c in data.columns]) + + print(f" 剔除{len(noise_features)}个噪音变量") + return data, dropped_info + + +def _calc_single_psi(args): + """计算单个机构单个变量的PSI - NaN作为单独箱子""" + org, train_month, test_month, train_n, test_n, f, data_ref, min_sample = args + + try: + org_data = data_ref[data_ref['new_org'] == org] + train_data = org_data[org_data['new_date_ym'] == train_month] + test_data = org_data[org_data['new_date_ym'] == test_month] + + # 获取数据 + train_vals = train_data[f].values + test_vals = test_data[f].values + + # 标记NaN + train_nan_mask = pd.isna(train_vals) + test_nan_mask = pd.isna(test_vals) + + # 非NaN值用于分箱 + train_nonan = train_vals[~train_nan_mask] + test_nonan = test_vals[~test_nan_mask] + + if len(train_nonan) < min_sample or len(test_nonan) < min_sample: + return { + '机构': org, '日期': f"{train_month}->{test_month}", + '变量': f, 'PSI': None, '有效计算': 0, + '样本数': train_n + } + + # 基于非NaN数据分箱(10分箱) + try: + bins = pd.qcut(train_nonan, q=10, duplicates='drop', retbins=True)[1] + except: + bins = pd.cut(train_nonan, bins=10, retbins=True)[1] + + # 计算各箱子占比(包含NaN箱子) + train_counts = [] + test_counts = [] + + for i in range(len(bins)): + if i == 0: + train_counts.append((~train_nan_mask & (train_vals <= bins[i])).sum()) + test_counts.append((~test_nan_mask & (test_vals <= bins[i])).sum()) + else: + train_counts.append((~train_nan_mask & (train_vals > bins[i-1]) & (train_vals <= bins[i])).sum()) + test_counts.append((~test_nan_mask & (test_vals > bins[i-1]) & (test_vals <= bins[i])).sum()) + + # NaN箱子 + train_counts.append(train_nan_mask.sum()) + test_counts.append(test_nan_mask.sum()) + + # 转为占比 + train_pct = np.array(train_counts) / len(train_vals) + test_pct = np.array(test_counts) / len(test_vals) + + # 避免0值 + train_pct = np.where(train_pct == 0, 1e-6, train_pct) + test_pct = np.where(test_pct == 0, 1e-6, test_pct) + + # 计算PSI + psi = np.sum((test_pct - train_pct) * np.log(test_pct / train_pct)) + + return { + '机构': org, '日期': f"{train_month}->{test_month}", + '变量': f, 'PSI': round(psi, 4), '有效计算': 1, + '样本数': train_n + } + except Exception as e: + return { + '机构': org, '日期': f"{train_month}->{test_month}", + '变量': f, 'PSI': None, '有效计算': 0, + '样本数': train_n + } + + +def drop_highpsi_features(data: pd.DataFrame, features: List[str], + psi_threshold: float = 0.1, max_months_ratio: float = 1/3, + max_orgs: int = 4, min_sample_per_month: int = 100, n_jobs: int = 4) -> tuple: + """剔除高PSI变量 - 分机构+逐月份版本 + + 多进程在变量层面,每个机构循环,机构内变量并行计算 + + Args: + psi_threshold: PSI阈值,超过此值认为不稳定 + max_months_ratio: 最大容忍月份比例,超过此比例月份PSI超过阈值则记录到处理表 + max_orgs: 最大容忍机构数,超过此数机构不稳定则记录到处理表 + min_sample_per_month: 每月最小样本数 + + Returns: + data: 剔除后的数据 + psi_detail: PSI明细(每个变量在每个机构每个月上的PSI值) + psi_process: PSI处理表(不满足设定条件的变量) + """ + orgs = data['new_org'].unique() + + # 构建任务列表:每个机构、每对月份、每个变量 + tasks = [] + for org in orgs: + org_data = data[data['new_org'] == org] + months = sorted(org_data['new_date_ym'].unique()) + + if len(months) < 2: + continue + + for i in range(len(months) - 1): + train_month = months[i] + test_month = months[i + 1] + + train_data = org_data[org_data['new_date_ym'] == train_month] + test_data = org_data[org_data['new_date_ym'] == test_month] + + train_n = len(train_data) + test_n = len(test_data) + + for f in features: + tasks.append((org, train_month, test_month, train_n, test_n, f, data, min_sample_per_month)) + + # 多进程计算PSI(变量层面并行) + print(f" PSI计算: {len(tasks)}个任务, 使用{n_jobs}进程") + results = Parallel(n_jobs=n_jobs, verbose=0)(delayed(_calc_single_psi)(task) for task in tasks) + + psi_df = pd.DataFrame(results) + + if len(psi_df) == 0: + return data, pd.DataFrame(columns=['变量', '机构', '月份', 'PSI值']), pd.DataFrame(columns=['变量', '处理原因']) + + # 筛选有效计算的记录 + valid_psi = psi_df[psi_df['有效计算'] == 1].copy() + + if len(valid_psi) == 0: + return data, pd.DataFrame(columns=['变量', '机构', '月份', 'PSI值']), pd.DataFrame(columns=['变量', '处理原因']) + + # PSI明细表:每个变量在每个机构每个月上的PSI值 + # 日期改为单个月份,初始月份PSI值为0 + psi_detail = valid_psi[['机构', '日期', '变量', 'PSI']].copy() + + # 解析日期,提取测试月份 + psi_detail['月份'] = psi_detail['日期'].apply(lambda x: x.split('->')[1] if '->' in x else x) + psi_detail = psi_detail.rename(columns={'PSI': 'PSI值'}) + + # 按照变量,机构,月份升序排序 + psi_detail = psi_detail.sort_values(['变量', '机构', '月份'], ascending=[True, True, True]) + + # 获取所有机构和月份 + all_orgs = sorted(psi_detail['机构'].unique()) + all_vars = sorted(psi_detail['变量'].unique()) + + # 构建完整的PSI明细表(包含初始月份,PSI值为0) + psi_detail_list = [] + for org in all_orgs: + org_data = psi_detail[psi_detail['机构'] == org] + if len(org_data) == 0: + continue + + # 获取该机构的所有月份 + months = sorted(org_data['月份'].unique()) + + for var in all_vars: + var_data = org_data[org_data['变量'] == var] + if len(var_data) == 0: + continue + + # 初始月份PSI值为0 + psi_detail_list.append({ + '机构': org, + '变量': var, + '月份': months[0], + 'PSI值': 0.0 + }) + + # 后续月份PSI值为计算结果 + for i in range(1, len(months)): + month = months[i] + var_month_data = var_data[var_data['月份'] == month] + if len(var_month_data) > 0: + psi_value = var_month_data['PSI值'].values[0] + else: + psi_value = 0.0 + psi_detail_list.append({ + '机构': org, + '变量': var, + '月份': month, + 'PSI值': psi_value + }) + + psi_detail = pd.DataFrame(psi_detail_list) + psi_detail = psi_detail[['机构', '变量', '月份', 'PSI值']] + psi_detail = psi_detail.reset_index(drop=True) + # 按照变量,机构,月份升序排序 + psi_detail = psi_detail.sort_values(['变量', '机构', '月份'], ascending=[True, True, True]) + psi_detail = psi_detail.reset_index(drop=True) + + # 标记不稳定 + valid_psi['不稳定'] = (valid_psi['PSI'] > psi_threshold).astype(int) + + # 汇总:每个机构每个变量的不稳定月份数和总月份数 + org_summary = valid_psi.groupby(['机构', '变量']).agg( + 不稳定月份数=('不稳定', 'sum'), + 总月份数=('变量', 'count') + ).reset_index() + + # 标记每个机构每个变量是否不稳定 + # 确保阈值至少为1,避免机构月份数少时过于严格 + org_summary['不稳定阈值'] = org_summary['总月份数'].apply( + lambda x: max(1, int(x * max_months_ratio)) + ) + org_summary['是否不稳定'] = org_summary['不稳定月份数'] >= org_summary['不稳定阈值'] + + # 机构层面汇总:不稳定的机构数 + org_count = len(orgs) + channel_summary = org_summary.groupby('变量').apply( + lambda x: pd.Series({ + '机构数': org_count, + '不稳定机构数': x['是否不稳定'].sum() + }) + ).reset_index() + + # 标记需要处理的变量 + channel_summary['需处理'] = channel_summary['不稳定机构数'] >= max_orgs + channel_summary['处理原因'] = channel_summary.apply( + lambda x: f'在{x["不稳定机构数"]}个机构上PSI不稳定' if x['需处理'] else '', axis=1 + ) + + # 获取每个变量的不稳定机构列表 + unstable_orgs_dict = {} + for var in org_summary['变量'].unique(): + var_orgs = org_summary[(org_summary['变量'] == var) & (org_summary['是否不稳定'] == True)]['机构'].tolist() + unstable_orgs_dict[var] = var_orgs + + # PSI处理表:不满足设定条件的变量 + psi_process = channel_summary[channel_summary['需处理']].copy() + psi_process['不稳定机构'] = psi_process['变量'].apply(lambda x: ','.join(unstable_orgs_dict.get(x, []))) + psi_process = psi_process[['变量', '处理原因', '不稳定机构']] + psi_process = psi_process.reset_index(drop=True) + + # 筛选要剔除的变量 + if len(psi_process) > 0 and '变量' in psi_process.columns: + to_drop_vars = psi_process['变量'].tolist() + data = data.drop(columns=[c for c in to_drop_vars if c in data.columns]) + + return data, psi_detail, psi_process + + +def iv_distribution_by_org(iv_detail: pd.DataFrame, oos_orgs: list = None, iv_bins: list = [0, 0.02, 0.05, 0.1, float('inf')]) -> pd.DataFrame: + """统计每个机构下不同IV区间的变量个数和占比 + + Args: + iv_detail: IV明细表(包含变量、整体、各机构列) + oos_orgs: 贷外机构列表 + iv_bins: IV区间边界 [0, 0.02, 0.05, 0.1, inf] + + Returns: + IV分布统计表 + """ + if oos_orgs is None: + oos_orgs = [] + + # 获取机构列(排除'变量'和'整体'列) + org_cols = [c for c in iv_detail.columns if c not in ['变量', '整体']] + + # 定义区间标签 + bin_labels = ['[0, 0.02)', '[0.02, 0.05)', '[0.05, 0.1)', '[0.1, +∞)'] + + result = [] + + # 各机构统计(不计算整体) + for org in org_cols: + org_iv = iv_detail[org].dropna() + total_vars = len(org_iv) + + # 判断机构类型 + org_type = '贷外' if org in oos_orgs else '建模' + + for i in range(len(iv_bins) - 1): + lower = iv_bins[i] + upper = iv_bins[i + 1] + if upper == float('inf'): + count = ((org_iv >= lower)).sum() + else: + count = ((org_iv >= lower) & (org_iv < upper)).sum() + ratio = count / total_vars if total_vars > 0 else 0 + result.append({ + '机构': org, + '类型': org_type, + 'IV区间': bin_labels[i], + '变量个数': count, + '占比': f'{ratio:.2%}' + }) + + return pd.DataFrame(result) + + +def psi_distribution_by_org(psi_detail: pd.DataFrame, oos_orgs: list = None, psi_bins: list = [0, 0.05, 0.1, float('inf')]) -> pd.DataFrame: + """统计每个机构下不同PSI区间的变量个数和占比 + + Args: + psi_detail: PSI明细表(包含机构、变量、月份、PSI值列) + oos_orgs: 贷外机构列表 + psi_bins: PSI区间边界 [0, 0.05, 0.1, inf] + + Returns: + PSI分布统计表 + """ + if oos_orgs is None: + oos_orgs = [] + + # 定义区间标签 + bin_labels = ['[0, 0.05)', '[0.05, 0.1)', '[0.1, +∞)'] + + result = [] + + # 获取所有机构 + orgs = psi_detail['机构'].unique() + + for org in orgs: + org_data = psi_detail[psi_detail['机构'] == org] + + # 判断机构类型 + org_type = '贷外' if org in oos_orgs else '建模' + + # 对每个变量,取其最大PSI值 + var_max_psi = org_data.groupby('变量')['PSI值'].max() + total_vars = len(var_max_psi) + + for i in range(len(psi_bins) - 1): + lower = psi_bins[i] + upper = psi_bins[i + 1] + if upper == float('inf'): + count = ((var_max_psi >= lower)).sum() + else: + count = ((var_max_psi >= lower) & (var_max_psi < upper)).sum() + ratio = count / total_vars if total_vars > 0 else 0 + result.append({ + '机构': org, + '类型': org_type, + 'PSI区间': bin_labels[i], + '变量个数': count, + '占比': f'{ratio:.2%}' + }) + + return pd.DataFrame(result) + + +def value_ratio_distribution_by_org(data: pd.DataFrame, features: List[str], + oos_orgs: list = None, + value_bins: list = [0, 0.15, 0.35, 0.65, 0.95, 1.0]) -> pd.DataFrame: + """统计每个机构下不同有值率区间的变量个数和占比 + + Args: + data: 数据(包含new_org列) + features: 特征列表 + oos_orgs: 贷外机构列表 + value_bins: 有值率区间边界 [0, 0.15, 0.35, 0.65, 0.95, 1.0] + + Returns: + 有值率分布统计表 + """ + if oos_orgs is None: + oos_orgs = [] + + # 定义区间标签 + bin_labels = ['[0, 15%)', '[15%, 35%)', '[35%, 65%)', '[65%, 95%)', '[95%, 100%]'] + + result = [] + + # 获取所有机构 + orgs = data['new_org'].unique() + + for org in orgs: + org_data = data[data['new_org'] == org] + + # 判断机构类型 + org_type = '贷外' if org in oos_orgs else '建模' + + # 计算每个变量的有值率(非NaN的占比) + value_ratios = {} + for f in features: + if f in org_data.columns: + non_null_count = org_data[f].notna().sum() + total_count = len(org_data) + value_ratios[f] = non_null_count / total_count if total_count > 0 else 0 + + # 统计各区间的变量个数 + total_vars = len(value_ratios) + for i in range(len(value_bins) - 1): + lower = value_bins[i] + upper = value_bins[i + 1] + if upper == 1.0: + count = sum(1 for v in value_ratios.values() if lower <= v <= upper) + else: + count = sum(1 for v in value_ratios.values() if lower <= v < upper) + ratio = count / total_vars if total_vars > 0 else 0 + result.append({ + '机构': org, + '类型': org_type, + '有值率区间': bin_labels[i], + '变量个数': count, + '占比': f'{ratio:.2%}' + }) + + return pd.DataFrame(result) + + +def calculate_iv_by_org(data: pd.DataFrame, features: List[str], + n_jobs: int = 4) -> Tuple[pd.DataFrame, pd.DataFrame]: + """计算分机构和整体的IV + + Returns: + iv_by_org: 分机构IV明细 + iv_overall: 整体IV + """ + from references.func import calculate_iv + + orgs = data['new_org'].unique() + + # 整体IV + iv_overall = calculate_iv(data, features, n_jobs=n_jobs) + iv_overall['类型'] = '整体' + + # 分机构IV + iv_by_org = [] + for org in orgs: + org_data = data[data['new_org'] == org] + org_iv = calculate_iv(org_data, features, n_jobs=1) # 单机构用单进程 + if len(org_iv) > 0: # 只添加非空结果 + org_iv['机构'] = org + org_iv['类型'] = '分机构' + iv_by_org.append(org_iv) + + iv_by_org = pd.concat(iv_by_org, ignore_index=True) if iv_by_org else pd.DataFrame(columns=['变量', 'IV', '机构', '类型']) + + return iv_by_org, iv_overall + + +def calculate_psi_detail(data: pd.DataFrame, features: List[str], + max_psi: float = 0.1, min_months_unstable: int = 3, + min_sample: int = 100, n_jobs: int = 4) -> tuple: + """计算每个变量在每个机构下的逐月PSI明细,并标记是否剔除 + + Returns: + data: 剔除后的数据 + dropped: 被剔除的变量汇总 + psi_summary: 完整的PSI明细(包含是否剔除标识) + """ + orgs = data['new_org'].unique() + + # 构建任务 + tasks = [] + for org in orgs: + org_data = data[data['new_org'] == org] + months = sorted(org_data['new_date_ym'].unique()) + + if len(months) < 2: + continue + + for i in range(len(months) - 1): + train_month = months[i] + test_month = months[i + 1] + + train_data = org_data[org_data['new_date_ym'] == train_month] + test_data = org_data[org_data['new_date_ym'] == test_month] + + train_n = len(train_data) + test_n = len(test_data) + + for f in features: + tasks.append((org, train_month, test_month, train_n, test_n, f, data, min_sample)) + + # 多进程计算 + print(f" PSI计算: {len(tasks)}个任务, 使用{n_jobs}进程") + results = Parallel(n_jobs=n_jobs, verbose=0)(delayed(_calc_single_psi)(task) for task in tasks) + + psi_df = pd.DataFrame(results) + + if len(psi_df) == 0: + return data, pd.DataFrame(columns=['变量', '机构数', '不稳定机构数', '原因']), pd.DataFrame(columns=['变量', '机构数', '不稳定机构数', '是否剔除', '去除条件']) + + # 筛选有效计算的记录 + valid_psi = psi_df[psi_df['有效计算'] == 1].copy() + + if len(valid_psi) == 0: + return data, pd.DataFrame(columns=['变量', '机构数', '不稳定机构数', '原因']), pd.DataFrame(columns=['变量', '机构数', '不稳定机构数', '是否剔除', '去除条件']) + + # 标记不稳定 + valid_psi['不稳定'] = (valid_psi['PSI'] > max_psi).astype(int) + + # 汇总:每个机构每个变量的不稳定月份数 + org_summary = valid_psi.groupby(['机构', '变量'])['不稳定'].sum().reset_index() + org_summary.columns = ['机构', '变量', '不稳定月份数'] + + # 机构层面汇总:超过min_months_unstable个月不稳定的变量 + org_count = len(orgs) + channel_summary = org_summary.groupby('变量').apply( + lambda x: pd.Series({ + '机构数': org_count, + '不稳定机构数': (x['不稳定月份数'] >= min_months_unstable).sum() + }) + ).reset_index() + + # 标记需要删除的变量(超过1/3机构不稳定) + channel_summary['需剔除'] = channel_summary['不稳定机构数'] > (channel_summary['机构数'] / 3) + channel_summary['是否剔除'] = channel_summary['需剔除'].astype(int) + channel_summary['去除条件'] = channel_summary.apply( + lambda x: f'在{org_count}个机构中有超过1/3机构连续{min_months_unstable}月PSI>{max_psi}' if x['需剔除'] else '', axis=1 + ) + + # 筛选要剔除的变量 + if len(channel_summary) > 0 and '变量' in channel_summary.columns: + to_drop_vars = channel_summary[channel_summary['需剔除']]['变量'].tolist() + data = data.drop(columns=[c for c in to_drop_vars if c in data.columns]) + + # 整理剔除信息(只返回被剔除的变量) + dropped = channel_summary[channel_summary['需剔除']].copy() + dropped['原因'] = f'在{org_count}个机构中有超过1/3机构连续{min_months_unstable}月PSI>{max_psi}' + + return data, dropped[['变量', '机构数', '不稳定机构数', '原因']], channel_summary[['变量', '机构数', '不稳定机构数', '是否剔除', '去除条件']] + + +def export_cleaning_report(filepath: str, steps: list, + iv_detail: pd.DataFrame = None, + iv_process: pd.DataFrame = None, + psi_detail: pd.DataFrame = None, + psi_process: pd.DataFrame = None, + params: dict = None, + iv_distribution: pd.DataFrame = None, + psi_distribution: pd.DataFrame = None, + value_ratio_distribution: pd.DataFrame = None): + """导出清洗报告到xlsx - 每个sheet一个步骤 + + Args: + filepath: 输出路径 + steps: 清洗步骤列表 [(步骤名, DataFrame), ...] + iv_detail: IV明细(每个变量在每个机构上以及整体上的IV值) + iv_process: IV处理表(不满足设定条件的变量) + psi_detail: PSI明细(每个变量在每个机构每个月上的PSI值) + psi_process: PSI处理表(不满足设定条件的变量) + params: 超参数字典,用于动态生成依据条件 + iv_distribution: IV分布统计表 + psi_distribution: PSI分布统计表 + value_ratio_distribution: 有值率分布统计表 + """ + from openpyxl import load_workbook + + try: + wb = load_workbook(filepath) + except: + wb = Workbook() + wb.remove(wb.active) + + # 汇总sheet - 只显示真正的筛选步骤 + if '汇总' in wb.sheetnames: + del wb['汇总'] + ws = wb.create_sheet('汇总', 0) + ws['A1'] = '数据清洗报告' + ws['A2'] = f'生成时间: {datetime.now().strftime("%Y-%m-%d %H:%M:%S")}' + ws['A4'] = '步骤' + ws['B4'] = '操作明细' + ws['C4'] = '操作结果' + ws['D4'] = '依据条件' + + # 只显示真正的筛选步骤(不包含明细和分布统计) + filter_steps = [ + 'Step4-异常月份处理', 'Step6-高缺失率处理', 'Step7-IV处理', + 'Step8-PSI处理', 'Step9-null importance处理', 'Step10-高相关性剔除' + ] + + # 需要排除的步骤(明细和分布统计) + exclude_steps = [ + 'Step7-IV明细', 'Step7-IV分布统计', 'Step8-PSI明细', + 'Step8-PSI分布统计', 'Step5-有值率分布统计' + ] + + # 需要显示删除变量数量的步骤 + show_drop_count_steps = ['分离OOS数据'] + + # 只显示参数标准的步骤(不显示操作结果) + show_param_only_steps = ['机构样本统计', '缺失率明细'] + + # 添加说明:各步骤独立执行 + ws['A3'] = '说明:各筛选步骤独立执行,不删除数据,仅统计不满足条件的变量' + + # 获取参数,如果没有传入则使用默认值 + if params is None: + params = {} + + min_ym_bad_sample = params.get('min_ym_bad_sample', 10) + min_ym_sample = params.get('min_ym_sample', 500) + missing_ratio = params.get('missing_ratio', 0.6) + overall_iv_threshold = params.get('overall_iv_threshold', 0.1) + org_iv_threshold = params.get('org_iv_threshold', 0.1) + max_org_threshold = params.get('max_org_threshold', 2) + psi_threshold = params.get('psi_threshold', 0.1) + max_months_ratio = params.get('max_months_ratio', 1/3) + max_orgs = params.get('max_orgs', 4) + gain_threshold = params.get('gain_threshold', 50) + + step_num = 1 + for name, df in steps: + # 跳过明细和分布统计步骤 + if name in exclude_steps: + continue + + # 去掉操作明细中的StepX-前缀 + display_name = name.replace('Step4-', '').replace('Step6-', '').replace('Step7-', '').replace('Step8-', '').replace('Step9-', '').replace('Step10-', '') + + # 只显示参数标准的步骤(不显示操作结果) + if name in show_param_only_steps: + ws.cell(4+step_num, 1, step_num) + ws.cell(4+step_num, 2, display_name) + result = '' + # 依据条件:显示参数标准 + if name == '机构样本统计': + condition = '统计各机构的样本数量和坏样本率' + elif name == '缺失率明细': + condition = '计算各变量的缺失率' + else: + condition = '' + ws.cell(4+step_num, 3, result) + ws.cell(4+step_num, 4, condition) + step_num += 1 + # 显示删除变量数量的步骤 + elif name in show_drop_count_steps: + ws.cell(4+step_num, 1, step_num) + ws.cell(4+step_num, 2, display_name) + if df is not None and len(df) > 0: + if name == '分离OOS数据': + # 特殊处理:显示OOS和建模样本数量 + if '变量' in df.columns and '数量' in df.columns: + + oos_count = df[df['变量'] == 'OOS样本']['数量'].values[0] if len(df[df['变量'] == 'OOS样本']) > 0 else 0 + model_count = df[df['变量'] == '建模样本']['数量'].values[0] if len(df[df['变量'] == '建模样本']) > 0 else 0 + result = f'OOS样本{oos_count}条,建模样本{model_count}条' + else: + result = f'{len(df)}条' + elif '变量' in df.columns: + result = f'删除{len(df)}个变量' + else: + result = f'删除{len(df)}个' + condition = '' + else: + result = '空' + condition = '' + ws.cell(4+step_num, 3, result) + ws.cell(4+step_num, 4, condition) + step_num += 1 + elif name in filter_steps: + ws.cell(4+step_num, 1, step_num) + ws.cell(4+step_num, 2, display_name) + + # 生成操作结果和依据条件 + if df is not None and len(df) > 0: + if name == 'Step4-异常月份处理': + # 操作结果:删除的月份 + if '年月' in df.columns: + result = '删除' + ','.join(df['年月'].astype(str).tolist()) + else: + result = '删除' + ','.join(df.iloc[:, 0].astype(str).tolist()) + # 依据条件:参数标准 + condition = f'坏样本数小于{min_ym_bad_sample}或总样本数小于{min_ym_sample}的月份将被剔除(独立执行)' + elif name == 'Step6-高缺失率处理': + # 操作结果:删除的变量数量 + if '变量' in df.columns: + result = f'删除{len(df)}个变量' + else: + result = f'删除{len(df)}个' + # 依据条件:参数标准 + condition = f'整体缺失率大于{missing_ratio}的变量将被剔除(独立执行)' + elif name == 'Step7-IV处理': + # 操作结果:删除的变量数量 + if '变量' in df.columns: + result = f'删除{len(df)}个变量' + else: + result = f'删除{len(df)}个' + # 依据条件:参数标准 + condition = f'整体IV小于{overall_iv_threshold}或在{max_org_threshold}个及以上机构上IV小于{org_iv_threshold}的变量将被剔除(独立执行)' + elif name == 'Step8-PSI处理': + # 操作结果:删除的变量数量 + if '变量' in df.columns: + result = f'删除{len(df)}个变量' + else: + result = f'删除{len(df)}个' + # 依据条件:参数标准 + condition = f'PSI阈值{psi_threshold},若某机构超过{max_months_ratio:.0%}月份PSI大于{psi_threshold}则该机构不稳定,若超过{max_orgs}个机构不稳定则剔除该变量(独立执行)' + elif name == 'Step9-null importance处理': + # 操作结果:删除的变量数量 + if '变量' in df.columns: + result = f'删除{len(df[df["状态"]=="去除"])}个变量' + else: + result = f'删除{len(df)}个' + # 依据条件:参数标准 + condition = f'反转前后gain值差别绝对值小于{gain_threshold}的变量将被判定为噪音并剔除(独立执行)' + elif name == 'Step10-高相关性剔除': + # 操作结果:删除的变量数量 + if '变量' in df.columns: + result = f'删除{len(df)}个变量' + else: + result = f'删除{len(df)}个' + # 依据条件:参数标准 + max_corr = params.get('max_corr', 0.9) + top_n_keep = params.get('top_n_keep', 20) + condition = f'相关性大于{max_corr}的变量将被剔除,保留原始gain排名前{top_n_keep}的变量(独立执行)' + else: + result = '删除' + str(len(df)) + '个' + condition = '' + else: + result = '空' + condition = '' + + ws.cell(4+step_num, 3, result) + ws.cell(4+step_num, 4, condition) + step_num += 1 + + # 计算最终去除的变量总数(取各步骤去除变量的并集) + all_dropped_vars = set() + for name, df in steps: + if name in filter_steps and df is not None and len(df) > 0 and '变量' in df.columns: + if name == 'Step9-null importance处理': + # null importance处理需要筛选状态为"去除"的变量 + dropped_vars = df[df['状态'] == '去除']['变量'].tolist() + else: + dropped_vars = df['变量'].tolist() + # 取并集(去重) + all_dropped_vars = all_dropped_vars.union(set(dropped_vars)) + + # 添加最终统计行 + final_step_num = step_num + ws.cell(4+final_step_num, 1, final_step_num) + ws.cell(4+final_step_num, 2, '最终去除变量统计') + ws.cell(4+final_step_num, 3, f'共去除{len(all_dropped_vars)}个变量(取各步骤去除变量的并集)') + ws.cell(4+final_step_num, 4, '各步骤独立执行,最终去除变量为各步骤去除变量的并集') + + # 各步骤详情(按步骤递进顺序创建) + # 定义sheet创建顺序 + sheet_order = [ + '机构样本统计', '分离OOS数据', 'Step4-异常月份处理', '缺失率明细', + 'Step5-有值率分布统计', 'Step6-高缺失率处理', 'Step7-IV明细', 'Step7-IV处理', + 'Step7-IV分布统计', 'Step8-PSI明细', 'Step8-PSI处理', 'Step8-PSI分布统计', + 'Step9-null importance处理', 'Step10-高相关性剔除' + ] + + # 按顺序创建sheet + for sheet_name in sheet_order: + # 在steps中查找对应的DataFrame + df = None + for name, step_df in steps: + if name == sheet_name: + df = step_df + break + + if df is not None: + if sheet_name in wb.sheetnames: + del wb[sheet_name] + ws_detail = wb.create_sheet(sheet_name) + + for j, col in enumerate(df.columns): + ws_detail.cell(1, j+1, col) + + for i, row in df.iterrows(): + for j, val in enumerate(row): + # 直接写入值,避免字符转义问题 + ws_detail.cell(i+2, j+1, val if val is not None else '') + + header_fill = PatternFill(start_color="366092", end_color="366092", fill_type="solid") + header_font = Font(color="FFFFFF", bold=True) + for cell in ws_detail[1]: + cell.fill = header_fill + cell.font = header_font + + wb.save(filepath) + print(f"报告已保存: {filepath}") diff --git a/skills/datanalysis-credit-risk/references/func.py b/skills/datanalysis-credit-risk/references/func.py new file mode 100644 index 000000000..8c1ad48cc --- /dev/null +++ b/skills/datanalysis-credit-risk/references/func.py @@ -0,0 +1,228 @@ +"""数据处理函数模块""" +import pandas as pd +import numpy as np +import toad +from typing import List, Dict, Tuple +import tqdm +from datetime import datetime + +try: + from openpyxl import Workbook + from openpyxl.styles import Font, PatternFill, Alignment + HAS_OPENPYXL = True +except: + HAS_OPENPYXL = False + + +def get_dataset(data_pth: str, date_colName: str, y_colName: str, + org_colName: str, data_encode: str, key_colNames: List[str], + drop_colNames: List[str] = None, + miss_vals: List[int] = None) -> pd.DataFrame: + """加载并格式化数据 + + Args: + data_pth: 数据路径 + date_colName: 日期列名 + y_colName: 标签列名 + org_colName: 机构列名 + data_encode: 数据编码 + key_colNames: 主键列(去重用) + drop_colNames: 指定删除的列 + miss_vals: 异常值列表(替换为NaN),默认[-1, -999, -1111] + """ + if drop_colNames is None: + drop_colNames = [] + if miss_vals is None: + miss_vals = [-1, -999, -1111] + + # 多格式读取 + for fmt, reader in [('parquet', pd.read_parquet), ('csv', pd.read_csv), + ('xlsx', pd.read_excel), ('pkl', pd.read_pickle)]: + try: + data = reader(data_pth) + break + except: + continue + + # 异常值替换为NaN + data.replace({v: np.nan for v in miss_vals}, inplace=True) + + # 去重与过滤 + data = data[data[y_colName].isin([0, 1])] + data = data.drop_duplicates(subset=key_colNames) + + # 删除无效列 + data.drop(columns=[c for c in drop_colNames if c in data.columns], errors='ignore') + data.drop(columns=[c for c in data.columns if data[c].nunique() <= 1], errors='ignore') + + # 重命名 + data.rename(columns={date_colName: 'new_date', y_colName: 'new_target', + org_colName: 'new_org'}, inplace=True) + data['new_date'] = data['new_date'].astype(str).str.replace('-', '', regex=False).str[:8] + data['new_date_ym'] = data['new_date'].str[:6] + + return data + + +def org_analysis(data: pd.DataFrame, oos_orgs: List[str] = None) -> pd.DataFrame: + """机构样本统计分析 + + Args: + data: 数据 + oos_orgs: 贷外机构列表,用于标识贷外样本 + """ + stat = data.groupby(['new_org', 'new_date_ym']).agg( + 单月坏样本数=('new_target', 'sum'), + 单月总样本数=('new_target', 'count'), + 单月坏样率=('new_target', 'mean') + ).reset_index() + + # 累计统计 + stat['总坏样本数'] = stat.groupby('new_org')['单月坏样本数'].transform('sum') + stat['总样本数'] = stat.groupby('new_org')['单月总样本数'].transform('sum') + stat['总坏样率'] = stat['总坏样本数'] / stat['总样本数'] + + # 标识是否为贷外机构 + if oos_orgs and len(oos_orgs) > 0: + stat['样本类型'] = stat['new_org'].apply(lambda x: '贷外' if x in oos_orgs else '建模') + else: + stat['样本类型'] = '建模' + + stat = stat.rename(columns={'new_org': '机构', 'new_date_ym': '年月'}) + + # 按样本类型排序(建模在前,贷外在后) + stat = stat.sort_values(['样本类型', '机构', '年月'], ascending=[True, True, True]) + stat = stat.reset_index(drop=True) + + return stat[['机构', '年月', '单月坏样本数', '单月总样本数', '单月坏样率', '总坏样本数', '总样本数', '总坏样率', '样本类型']] + + +def missing_check(data: pd.DataFrame, channel: Dict[str, List[str]] = None) -> Tuple[pd.DataFrame, pd.DataFrame]: + """计算缺失率 - 包含整体和机构级别的缺失率 + + Returns: + miss_detail: 缺失率明细(格式:变量,整体,机构1,机构2,...,机构n) + miss_ch: 整体缺失率(每个变量的整体缺失率) + """ + miss_vals = [-1, -999, -1111] + miss_ch = [] + + # 排除非变量列:record_id, target, org_info等 + exclude_cols = ['new_date', 'new_date_ym', 'new_target', 'new_org', 'record_id', 'target', 'org_info'] + cols = [c for c in data.columns if c not in exclude_cols] + + # 计算整体缺失率 + for col in tqdm.tqdm(cols, desc="缺失率"): + rate = ((data[col].isin(miss_vals)) | (data[col].isna())).mean() + miss_ch.append({'变量': col, '整体缺失率': round(rate, 4)}) + + miss_ch = pd.DataFrame(miss_ch) + + # 计算机构级别缺失率并转换为宽表格式 + orgs = sorted(data['new_org'].unique()) + miss_detail_dict = {'变量': []} + miss_detail_dict['整体'] = [] + + for org in orgs: + miss_detail_dict[org] = [] + + for col in cols: + miss_detail_dict['变量'].append(col) + # 整体缺失率 + overall_rate = ((data[col].isin(miss_vals)) | (data[col].isna())).mean() + miss_detail_dict['整体'].append(round(overall_rate, 4)) + + # 各机构缺失率 + for org in orgs: + org_data = data[data['new_org'] == org] + rate = ((org_data[col].isin(miss_vals)) | (org_data[col].isna())).mean() + miss_detail_dict[org].append(round(rate, 4)) + + miss_detail = pd.DataFrame(miss_detail_dict) + # 按整体缺失率降序排序 + miss_detail = miss_detail.sort_values('整体', ascending=False) + miss_detail = miss_detail.reset_index(drop=True) + + return miss_detail, miss_ch + + +def calculate_iv(data: pd.DataFrame, features: List[str], n_jobs: int = 4) -> pd.DataFrame: + """计算IV值 - 使用toad.transform.Combiner分箱,箱子数设为5,保留NaN值""" + import tqdm + from joblib import Parallel, delayed + + def _calc_iv(f): + try: + # 使用 toad.transform.Combiner 分箱,箱子数设为5 + c = toad.transform.Combiner() + data_temp = data[[f, 'new_target']].copy() + data_temp.columns = ['x', 'y'] + data_temp['x_bin'] = c.fit_transform(X=data_temp['x'], y=data_temp['y'], method='dt', n_bins=5, min_samples=0.05/5, empty_separate=True) + + # 使用分箱后的数据计算IV值 + iv_df = toad.quality(data_temp[['x_bin', 'y']], 'y', iv_only=True) + if 'iv' in iv_df.columns and len(iv_df) > 0: + iv_value = iv_df['iv'].iloc[0] + if not np.isnan(iv_value): + return {'变量': f, 'IV': round(iv_value, 4)} + return None + except Exception as e: + print(f" IV计算异常: 变量={f}, 错误={e}") + return None + + # 使用tqdm显示进度 + results = Parallel(n_jobs=n_jobs, verbose=0)( + delayed(_calc_iv)(f) for f in features + ) + iv_list = [r for r in results if r is not None] + + if len(iv_list) == 0: + print(f" IV计算结果为空,特征数={len(features)}") + return pd.DataFrame(columns=['变量', 'IV']) + + return pd.DataFrame(iv_list).sort_values('IV', ascending=False) + + +def calculate_corr(data: pd.DataFrame, features: List[str]) -> pd.DataFrame: + """计算相关性矩阵""" + corr = data[features].corr().abs() + return corr + + +def export_report_xlsx(filepath: str, data_name: str, data: pd.DataFrame, + sheet_name: str, description: str = ""): + """导出xlsx报告 - 支持追加""" + try: + from openpyxl import load_workbook + wb = load_workbook(filepath) + ws = wb.create_sheet(sheet_name) + except: + wb = Workbook() + ws = wb.active + ws.title = sheet_name + + # 写入描述 + ws['A1'] = f"数据: {data_name}" + ws['A2'] = f"时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}" + if description: + ws['A3'] = f"说明: {description}" + + # 写入数据 + start_row = 5 + for i, col in enumerate(data.columns): + ws.cell(start_row, i+1, col) + + for i, row in enumerate(data.values): + for j, val in enumerate(row): + ws.cell(start_row+1+i, j+1, val) + + # 样式 + header_fill = PatternFill(start_color="366092", end_color="366092", fill_type="solid") + header_font = Font(color="FFFFFF", bold=True) + for cell in ws[start_row]: + cell.fill = header_fill + cell.font = header_font + cell.alignment = Alignment(horizontal='center') + + wb.save(filepath) + print(f"[{sheet_name}] 已保存到 {filepath}") diff --git a/skills/datanalysis-credit-risk/scripts/example.py b/skills/datanalysis-credit-risk/scripts/example.py new file mode 100644 index 000000000..ea0081c93 --- /dev/null +++ b/skills/datanalysis-credit-risk/scripts/example.py @@ -0,0 +1,386 @@ +#!/usr/bin/env python3 +import os, sys +import time +import pandas as pd +from typing import Dict, List, Optional, Any, Callable +import numpy as np +import multiprocessing + +# ============================================================================= +# 系统配置 +# ============================================================================= +CPU_COUNT = multiprocessing.cpu_count() +N_JOBS = max(1, CPU_COUNT - 1) # 多进程并行数,保留1核给系统 + +def _ensure_references_on_path(): + script_dir = os.path.dirname(__file__) + cur = script_dir + for _ in range(8): + candidate = os.path.join(cur, 'references') + if os.path.isdir(candidate): + # add parent folder (which contains `references`) to sys.path + sys.path.insert(0, cur) + return + parent = os.path.dirname(cur) + if parent == cur: + break + cur = parent + # fallback: add a reasonable repo-root guess + sys.path.insert(0, os.path.abspath(os.path.join(script_dir, '..', '..', '..'))) + + +_ensure_references_on_path() + +from references.func import get_dataset, missing_check, org_analysis +from references.analysis import (drop_abnormal_ym, drop_highmiss_features, + drop_lowiv_features, drop_highcorr_features, + drop_highpsi_features, + drop_highnoise_features, + export_cleaning_report, + iv_distribution_by_org, + psi_distribution_by_org, + value_ratio_distribution_by_org) + +# ==================== 路径配置(可交互输入) ==================== +# 使用50列的测试数据作为默认值,支持在命令行交互修改 +default_data_path = r'c:\Users\jp341\Desktop\ai_2026\AutoModeling\data\sample_50cols.parquet' +default_output_dir = r'c:\Users\jp341\Desktop\ai_2026\AutoModeling\output' + +def _get_path_input(prompt, default): + try: + user_val = input(f"{prompt} (默认: {default}): ").strip() + except Exception: + user_val = '' + return user_val if user_val else default + +DATA_PATH = _get_path_input('请输入数据文件路径DATA_PATH', default_data_path) +OUTPUT_DIR = _get_path_input('请输入输出目录OUTPUT_DIR', default_output_dir) +REPORT_PATH = os.path.join(OUTPUT_DIR, '数据清洗报告.xlsx') + +# 数据列名配置(根据实际数据调整) +DATE_COL = _get_path_input('请输入数据中日期列名', 'apply_date') +Y_COL = _get_path_input('请输入数据中标签列名', 'target') +ORG_COL = _get_path_input('请输入数据中机构列名', 'org_info') + +# 支持多个主键列名输入(逗号或空格分隔) +def _get_list_input(prompt, default): + try: + user_val = input(f"{prompt} (默认: {default}): ").strip() + except Exception: + user_val = '' + if not user_val: + user_val = default + # 支持逗号或空格分隔 + parts = [p.strip() for p in user_val.replace(',', ' ').split() if p.strip()] + return parts + +KEY_COLS = _get_list_input('请输入数据中主键列名(多个列用逗号或空格分隔)', 'record_id') + +# ==================== 多进程配置信息 ==================== +print("=" * 60) +print("多进程配置") +print("=" * 60) +print(f" 本机CPU核心数: {CPU_COUNT}") +print(f" 当前使用进程数: {N_JOBS}") +print("=" * 60) + +# ==================== OOS机构配置(可交互输入) ==================== +# 默认贷外机构列表,用户可在交互时以逗号分隔形式输入自定义列表 +default_oos = [ + '外部机构A', '外部机构B', '外部机构C' +] + +try: + oos_input = input('请输入贷外机构列表,逗号分隔(按回车使用默认列表):').strip() +except Exception: + oos_input = '' +if oos_input: + OOS_ORGS = [s.strip() for s in oos_input.split(',') if s.strip()] +else: + OOS_ORGS = default_oos + +os.makedirs(OUTPUT_DIR, exist_ok=True) + +# ==================== 交互式输入超参数 ==================== +def get_user_input(prompt, default, dtype=float): + """获取用户输入,支持默认值和类型转换""" + while True: + try: + user_input = input(f"{prompt} (默认: {default}): ").strip() + if not user_input: + return default + return dtype(user_input) + except ValueError: + print(f" 输入无效,请输入{dtype.__name__}类型") + +# 记录清洗步骤 +steps = [] + +# 用于存储各步骤的参数 +params = {} + +# 计时装饰器 +def timer(step_name): + """计时装饰器""" + def decorator(func): + def wrapper(*args, **kwargs): + print(f"\n开始 {step_name}...") + start_time = time.time() + result = func(*args, **kwargs) + elapsed = time.time() - start_time + print(f" {step_name} 耗时: {elapsed:.2f}秒") + return result + return wrapper + return decorator + +# ==================== Step 1: 获取数据 ==================== +print("\n" + "=" * 60) +print("Step 1: 获取数据") +print("=" * 60) +step_start = time.time() +# 使用global_parameters中的配置 +data = get_dataset( + data_pth=DATA_PATH, + date_colName=DATE_COL, + y_colName=Y_COL, + org_colName=ORG_COL, + data_encode='utf-8', + key_colNames=KEY_COLS, + drop_colNames=[], + miss_vals=[-1, -999, -1111] +) +print(f" 原始数据: {data.shape}") +print(f" 异常值已替换为NaN: [-1, -999, -1111]") +print(f" Step 1 耗时: {time.time() - step_start:.2f}秒") + +# ==================== Step 2: 机构样本分析 ==================== +print("\n" + "=" * 60) +print("Step 2: 机构样本分析") +print("=" * 60) +step_start = time.time() +org_stat = org_analysis(data, oos_orgs=OOS_ORGS) +steps.append(('机构样本统计', org_stat)) +print(f" 机构数: {data['new_org'].nunique()}, 月份数: {data['new_date_ym'].nunique()}") +print(f" 贷外机构: {len(OOS_ORGS)}个") +print(f" Step 2 耗时: {time.time() - step_start:.2f}秒") + +# ==================== Step 3: 分离OOS数据 ==================== +print("\n" + "=" * 60) +print("Step 3: 分离OOS数据") +print("=" * 60) +step_start = time.time() +oos_data = data[data['new_org'].isin(OOS_ORGS)] +data = data[~data['new_org'].isin(OOS_ORGS)] +print(f" OOS样本: {oos_data.shape[0]}条") +print(f" 建模样本: {data.shape[0]}条") +print(f" OOS机构: {OOS_ORGS}") +print(f" Step 3 耗时: {time.time() - step_start:.2f}秒") +# 创建分离信息DataFrame +oos_info = pd.DataFrame({'变量': ['OOS样本', '建模样本'], '数量': [oos_data.shape[0], data.shape[0]]}) +steps.append(('分离OOS数据', oos_info)) + +# ==================== Step 4: 过滤异常月份(仅对建模数据) ==================== +print("\n" + "=" * 60) +print("Step 4: 过滤异常月份(仅对建模数据)") +print("=" * 60) +print(" 可直接按回车使用默认值") +print("=" * 60) +params['min_ym_bad_sample'] = int(get_user_input("坏样本数阈值", 10, int)) +params['min_ym_sample'] = int(get_user_input("总样本数阈值", 500, int)) +step_start = time.time() +data_filtered, abnormal_ym = drop_abnormal_ym(data.copy(), min_ym_bad_sample=params['min_ym_bad_sample'], min_ym_sample=params['min_ym_sample']) +steps.append(('Step4-异常月份处理', abnormal_ym)) +print(f" 过滤后: {data_filtered.shape}") +print(f" 参数: min_ym_bad_sample={params['min_ym_bad_sample']}, min_ym_sample={params['min_ym_sample']}") +if len(abnormal_ym) > 0: + print(f" 剔除月份: {abnormal_ym['年月'].tolist()}") + print(f" 去除条件: {abnormal_ym['去除条件'].tolist()}") +print(f" Step 4 耗时: {time.time() - step_start:.2f}秒") + +# ==================== Step 5: 计算缺失率 ==================== +print("\n" + "=" * 60) +print("Step 5: 计算缺失率") +print("=" * 60) +step_start = time.time() +orgs = data['new_org'].unique().tolist() +channel = {'整体': orgs} +miss_detail, miss_channel = missing_check(data, channel=channel) +# miss_detail: 缺失率明细(格式:变量,整体,机构1,机构2,...,机构n) +# miss_channel: 整体缺失率 +steps.append(('缺失率明细', miss_detail)) +print(f" 变量数: {len(miss_detail['变量'].unique())}") +print(f" 机构数: {len(miss_detail.columns) - 2}") # 减去'变量'和'整体'两列 +print(f" Step 5 耗时: {time.time() - step_start:.2f}秒") + +# ==================== Step 6: 剔除高缺失变量 ==================== +print("\n" + "=" * 60) +print("Step 6: 剔除高缺失变量") +print("=" * 60) +print(" 可直接按回车使用默认值") +print("=" * 60) +params['missing_ratio'] = get_user_input("缺失率阈值", 0.6) +step_start = time.time() +data_miss, dropped_miss = drop_highmiss_features(data.copy(), miss_channel, threshold=params['missing_ratio']) +steps.append(('Step6-高缺失率处理', dropped_miss)) +print(f" 剔除: {len(dropped_miss)}个") +print(f" 阈值: {params['missing_ratio']}") +if len(dropped_miss) > 0: + print(f" 剔除变量: {dropped_miss['变量'].tolist()[:5]}...") + print(f" 去除条件: {dropped_miss['去除条件'].tolist()[:5]}...") +print(f" Step 6 耗时: {time.time() - step_start:.2f}秒") + +# ==================== Step 7: 剔除低IV变量 ==================== +print("\n" + "=" * 60) +print("Step 7: 剔除低IV变量") +print("=" * 60) +print(" 可直接按回车使用默认值") +print("=" * 60) +params['overall_iv_threshold'] = get_user_input("整体IV阈值", 0.1) +params['org_iv_threshold'] = get_user_input("单机构IV阈值", 0.1) +params['max_org_threshold'] = int(get_user_input("最大容忍低IV机构数", 2, int)) +step_start = time.time() +# 获取特征列表(使用全部变量) +features = [c for c in data.columns if c.startswith('i_')] +data_iv, iv_detail, iv_process = drop_lowiv_features( + data.copy(), features, + overall_iv_threshold=params['overall_iv_threshold'], + org_iv_threshold=params['org_iv_threshold'], + max_org_threshold=params['max_org_threshold'], + n_jobs=N_JOBS +) +# iv_detail: IV明细(每个变量在每个机构上以及整体上的IV值) +# iv_process: IV处理表(不满足设定条件的变量) +steps.append(('Step7-IV处理', iv_process)) +print(f" 剔除: {len(iv_process)}个") +print(f" 参数: overall_iv_threshold={params['overall_iv_threshold']}, org_iv_threshold={params['org_iv_threshold']}, max_org_threshold={params['max_org_threshold']}") +if len(iv_process) > 0: + print(f" 剔除变量: {iv_process['变量'].tolist()[:5]}...") + print(f" 处理原因: {iv_process['处理原因'].tolist()[:5]}...") +print(f" Step 7 耗时: {time.time() - step_start:.2f}秒") + +# ==================== Step 8: 剔除高PSI变量 ==================== +print("\n" + "=" * 60) +print("Step 8: 剔除高PSI变量 (分机构+逐月份)") +print("=" * 60) +print(" 可直接按回车使用默认值") +print("=" * 60) +params['psi_threshold'] = get_user_input("PSI阈值", 0.1) +params['max_months_ratio'] = get_user_input("最大不稳定月份比例", 1/3) +params['max_orgs'] = int(get_user_input("最大不稳定机构数", 6, int)) +step_start = time.time() +# 获取PSI计算前的特征(使用全部变量) +features_for_psi = [c for c in data.columns if c.startswith('i_')] +data_psi, psi_detail, psi_process = drop_highpsi_features( + data.copy(), features_for_psi, + psi_threshold=params['psi_threshold'], + max_months_ratio=params['max_months_ratio'], + max_orgs=params['max_orgs'], + min_sample_per_month=100, + n_jobs=N_JOBS +) +# psi_detail: PSI明细(每个变量在每个机构每个月上的PSI值) +# psi_process: PSI处理表(不满足设定条件的变量) +steps.append(('Step8-PSI处理', psi_process)) +print(f" 剔除: {len(psi_process)}个") +print(f" 参数: psi_threshold={params['psi_threshold']}, max_months_ratio={params['max_months_ratio']:.2f}, max_orgs={params['max_orgs']}") +if len(psi_process) > 0: + print(f" 剔除变量: {psi_process['变量'].tolist()[:5]}...") + print(f" 处理原因: {psi_process['处理原因'].tolist()[:5]}...") +print(f" PSI明细: {len(psi_detail)}条") +print(f" Step 8 耗时: {time.time() - step_start:.2f}秒") + +# ==================== Step 9: Null Importance去噪 ==================== +print("\n" + "=" * 60) +print("Step 9: Null Importance去除高噪音变量") +print("=" * 60) +print(" 可直接按回车使用默认值") +print("=" * 60) +params['n_estimators'] = int(get_user_input("树的数量", 100, int)) +params['max_depth'] = int(get_user_input("树的最大深度", 5, int)) +params['gain_threshold'] = get_user_input("gain差值阈值", 50) +step_start = time.time() +# 获取特征列表(使用全部变量) +features = [c for c in data.columns if c.startswith('i_')] +data_noise, dropped_noise = drop_highnoise_features(data.copy(), features, n_estimators=params['n_estimators'], max_depth=params['max_depth'], gain_threshold=params['gain_threshold']) +steps.append(('Step9-null importance处理', dropped_noise)) +print(f" 剔除: {len(dropped_noise)}个") +print(f" 参数: n_estimators={params['n_estimators']}, max_depth={params['max_depth']}, gain_threshold={params['gain_threshold']}") +if len(dropped_noise) > 0: + print(f" 剔除变量: {dropped_noise['变量'].tolist()}") +print(f" Step 9 耗时: {time.time() - step_start:.2f}秒") + +# ==================== Step 10: 剔除高相关变量(基于Null Importance的原始gain) ==================== +print("\n" + "=" * 60) +print("Step 10: 剔除高相关变量(基于Null Importance的原始gain)") +print("=" * 60) +print(" 可直接按回车使用默认值") +print("=" * 60) +params['max_corr'] = get_user_input("相关性阈值", 0.9) +params['top_n_keep'] = int(get_user_input("保留原始gain排名前N的变量", 20, int)) +step_start = time.time() +# 获取特征列表(使用全部变量) +features = [c for c in data.columns if c.startswith('i_')] +# 从null importance结果中获取原始gain +if len(dropped_noise) > 0 and '原始gain' in dropped_noise.columns: + gain_dict = dict(zip(dropped_noise['变量'], dropped_noise['原始gain'])) +else: + gain_dict = {} +data_corr, dropped_corr = drop_highcorr_features(data.copy(), features, threshold=params['max_corr'], gain_dict=gain_dict, top_n_keep=params['top_n_keep']) +steps.append(('Step10-高相关性剔除', dropped_corr)) +print(f" 剔除: {len(dropped_corr)}个") +print(f" 阈值: {params['max_corr']}") +if len(dropped_corr) > 0: + print(f" 剔除变量: {dropped_corr['变量'].tolist()}") + print(f" 去除条件: {dropped_corr['去除条件'].tolist()[:5]}...") +print(f" Step 10 耗时: {time.time() - step_start:.2f}秒") + +# ==================== Step 11: 导出报告 ==================== +print("\n" + "=" * 60) +print("Step 11: 导出报告") +print("=" * 60) +step_start = time.time() + +# 计算IV分布统计 +print(" 计算IV分布统计...") +iv_distribution = iv_distribution_by_org(iv_detail, oos_orgs=OOS_ORGS) +print(f" IV分布统计: {len(iv_distribution)}条") + +# 计算PSI分布统计 +print(" 计算PSI分布统计...") +psi_distribution = psi_distribution_by_org(psi_detail, oos_orgs=OOS_ORGS) +print(f" PSI分布统计: {len(psi_distribution)}条") + +# 计算有值率分布统计(使用全部变量) +print(" 计算有值率分布统计...") +features_for_value_ratio = [c for c in data.columns if c.startswith('i_')] +value_ratio_distribution = value_ratio_distribution_by_org(data, features_for_value_ratio, oos_orgs=OOS_ORGS) +print(f" 有值率分布统计: {len(value_ratio_distribution)}条") + +# 添加明细和分布统计到steps列表 +steps.append(('Step7-IV明细', iv_detail)) +steps.append(('Step7-IV分布统计', iv_distribution)) +steps.append(('Step8-PSI明细', psi_detail)) +steps.append(('Step8-PSI分布统计', psi_distribution)) +steps.append(('Step5-有值率分布统计', value_ratio_distribution)) + +export_cleaning_report(REPORT_PATH, steps, + iv_detail=iv_detail, + iv_process=iv_process, + psi_detail=psi_detail, + psi_process=psi_process, + params=params, + iv_distribution=iv_distribution, + psi_distribution=psi_distribution, + value_ratio_distribution=value_ratio_distribution) +print(f" 报告: {REPORT_PATH}") +print(f" Step 11 耗时: {time.time() - step_start:.2f}秒") + +# ==================== 汇总 ==================== +print("\n" + "=" * 60) +print("数据清洗完成!") +print("=" * 60) +print(f" 原始数据: {data.shape[0]}条") +print(f" 原始变量: {len([c for c in data.columns if c.startswith('i_')])}个") +print(f" 清洗步骤(各步骤独立执行,不删除数据):") +for name, df in steps: + print(f" - {name}: 剔除{df.shape[0] if hasattr(df, 'shape') else len(df)}个") From 6109b7206f5d635f410531003783e7fd425f0f5c Mon Sep 17 00:00:00 2001 From: REAL-Madrid01 <3098711414@qq.com> Date: Thu, 26 Feb 2026 17:22:21 +0800 Subject: [PATCH 2/5] update skill datanalysis-credit-risk --- docs/README.agents.md | 12 ++++++------ docs/README.skills.md | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/README.agents.md b/docs/README.agents.md index 2e8bdccd2..83ca58c03 100644 --- a/docs/README.agents.md +++ b/docs/README.agents.md @@ -31,7 +31,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [Agent Governance Reviewer](../agents/agent-governance-reviewer.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fagent-governance-reviewer.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fagent-governance-reviewer.agent.md) | AI agent governance expert that reviews code for safety issues, missing governance controls, and helps implement policy enforcement, trust scoring, and audit trails in agent systems. | | | [Amplitude Experiment Implementation](../agents/amplitude-experiment-implementation.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Famplitude-experiment-implementation.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Famplitude-experiment-implementation.agent.md) | This custom agent uses Amplitude's MCP tools to deploy new experiments inside of Amplitude, enabling seamless variant testing capabilities and rollout of product features. | | | [API Architect](../agents/api-architect.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fapi-architect.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fapi-architect.agent.md) | Your role is that of an API architect. Help mentor the engineer by providing guidance, support, and working code. | | -| [Apify Integration Expert](../agents/apify-integration-expert.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fapify-integration-expert.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fapify-integration-expert.agent.md) | Expert agent for integrating Apify Actors into codebases. Handles Actor selection, workflow design, implementation across JavaScript/TypeScript and Python, testing, and production-ready deployment. | [apify](https://github.com/mcp/com.apify/apify-mcp-server)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=apify&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=apify&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D) | +| [Apify Integration Expert](../agents/apify-integration-expert.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fapify-integration-expert.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fapify-integration-expert.agent.md) | Expert agent for integrating Apify Actors into codebases. Handles Actor selection, workflow design, implementation across JavaScript/TypeScript and Python, testing, and production-ready deployment. | apify
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=apify&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=apify&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D) | | [Arch Linux Expert](../agents/arch-linux-expert.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Farch-linux-expert.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Farch-linux-expert.agent.md) | Arch Linux specialist focused on pacman, rolling-release maintenance, and Arch-centric system administration workflows. | | | [Arm Migration Agent](../agents/arm-migration.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Farm-migration.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Farm-migration.agent.md) | Arm Cloud Migration Assistant accelerates moving x86 workloads to Arm infrastructure. It scans the repository for architecture assumptions, portability issues, container base image and dependency incompatibilities, and recommends Arm-optimized changes. It can drive multi-arch container builds, validate performance, and guide optimization, enabling smooth cross-platform deployment directly inside GitHub. | custom-mcp
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=custom-mcp&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22--rm%22%2C%22-i%22%2C%22-v%22%2C%22%2524%257B%257B%2520github.workspace%2520%257D%257D%253A%252Fworkspace%22%2C%22--name%22%2C%22arm-mcp%22%2C%22armlimited%252Farm-mcp%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=custom-mcp&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22--rm%22%2C%22-i%22%2C%22-v%22%2C%22%2524%257B%257B%2520github.workspace%2520%257D%257D%253A%252Fworkspace%22%2C%22--name%22%2C%22arm-mcp%22%2C%22armlimited%252Farm-mcp%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22--rm%22%2C%22-i%22%2C%22-v%22%2C%22%2524%257B%257B%2520github.workspace%2520%257D%257D%253A%252Fworkspace%22%2C%22--name%22%2C%22arm-mcp%22%2C%22armlimited%252Farm-mcp%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D) | | [Atlassian Requirements to Jira](../agents/atlassian-requirements-to-jira.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fatlassian-requirements-to-jira.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fatlassian-requirements-to-jira.agent.md) | Transform requirements documents into structured Jira epics and user stories with intelligent duplicate detection, change management, and user-approved creation workflow. | | @@ -59,7 +59,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [Clojure Interactive Programming](../agents/clojure-interactive-programming.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fclojure-interactive-programming.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fclojure-interactive-programming.agent.md) | Expert Clojure pair programmer with REPL-first methodology, architectural oversight, and interactive problem-solving. Enforces quality standards, prevents workarounds, and develops solutions incrementally through live REPL evaluation before file modifications. | | | [Comet Opik](../agents/comet-opik.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcomet-opik.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcomet-opik.agent.md) | Unified Comet Opik agent for instrumenting LLM apps, managing prompts/projects, auditing prompts, and investigating traces/metrics via the latest Opik MCP server. | opik
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=opik&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22opik-mcp%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=opik&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22opik-mcp%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22opik-mcp%22%5D%2C%22env%22%3A%7B%7D%7D) | | [Context Architect](../agents/context-architect.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcontext-architect.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcontext-architect.agent.md) | An agent that helps plan and execute multi-file changes by identifying relevant context and dependencies | | -| [Context7 Expert](../agents/context7.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcontext7.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcontext7.agent.md) | Expert in latest library versions, best practices, and correct syntax using up-to-date documentation | [context7](https://github.com/mcp/io.github.upstash/context7)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=context7&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=context7&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D) | +| [Context7 Expert](../agents/context7.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcontext7.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcontext7.agent.md) | Expert in latest library versions, best practices, and correct syntax using up-to-date documentation | context7
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=context7&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=context7&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D) | | [Create PRD Chat Mode](../agents/prd.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fprd.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fprd.agent.md) | Generate a comprehensive Product Requirements Document (PRD) in Markdown, detailing user stories, acceptance criteria, technical considerations, and metrics. Optionally create GitHub issues upon user confirmation. | | | [Critical thinking mode instructions](../agents/critical-thinking.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcritical-thinking.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcritical-thinking.agent.md) | Challenge assumptions and encourage critical thinking to ensure the best possible solution and outcomes. | | | [Custom Agent Foundry](../agents/custom-agent-foundry.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcustom-agent-foundry.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcustom-agent-foundry.agent.md) | Expert at designing and creating VS Code custom agents with optimal configurations | | @@ -72,7 +72,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [DiffblueCover](../agents/diffblue-cover.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdiffblue-cover.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdiffblue-cover.agent.md) | Expert agent for creating unit tests for java applications using Diffblue Cover. | DiffblueCover
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=DiffblueCover&config=%7B%22command%22%3A%22uv%22%2C%22args%22%3A%5B%22run%22%2C%22--with%22%2C%22fastmcp%22%2C%22fastmcp%22%2C%22run%22%2C%22%252Fplaceholder%252Fpath%252Fto%252Fcover-mcp%252Fmain.py%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=DiffblueCover&config=%7B%22command%22%3A%22uv%22%2C%22args%22%3A%5B%22run%22%2C%22--with%22%2C%22fastmcp%22%2C%22fastmcp%22%2C%22run%22%2C%22%252Fplaceholder%252Fpath%252Fto%252Fcover-mcp%252Fmain.py%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22uv%22%2C%22args%22%3A%5B%22run%22%2C%22--with%22%2C%22fastmcp%22%2C%22fastmcp%22%2C%22run%22%2C%22%252Fplaceholder%252Fpath%252Fto%252Fcover-mcp%252Fmain.py%22%5D%2C%22env%22%3A%7B%7D%7D) | | [Droid](../agents/droid.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdroid.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdroid.agent.md) | Provides installation guidance, usage examples, and automation patterns for the Droid CLI, with emphasis on droid exec for CI/CD and non-interactive automation | | | [Drupal Expert](../agents/drupal-expert.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdrupal-expert.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdrupal-expert.agent.md) | Expert assistant for Drupal development, architecture, and best practices using PHP 8.3+ and modern Drupal patterns | | -| [Dynatrace Expert](../agents/dynatrace-expert.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdynatrace-expert.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdynatrace-expert.agent.md) | The Dynatrace Expert Agent integrates observability and security capabilities directly into GitHub workflows, enabling development teams to investigate incidents, validate deployments, triage errors, detect performance regressions, validate releases, and manage security vulnerabilities by autonomously analysing traces, logs, and Dynatrace findings. This enables targeted and precise remediation of identified issues directly within the repository. | [dynatrace](https://github.com/mcp/io.github.dynatrace-oss/Dynatrace-mcp)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=dynatrace&config=%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=dynatrace&config=%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D) | +| [Dynatrace Expert](../agents/dynatrace-expert.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdynatrace-expert.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdynatrace-expert.agent.md) | The Dynatrace Expert Agent integrates observability and security capabilities directly into GitHub workflows, enabling development teams to investigate incidents, validate deployments, triage errors, detect performance regressions, validate releases, and manage security vulnerabilities by autonomously analysing traces, logs, and Dynatrace findings. This enables targeted and precise remediation of identified issues directly within the repository. | dynatrace
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=dynatrace&config=%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=dynatrace&config=%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D) | | [Elasticsearch Agent](../agents/elasticsearch-observability.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Felasticsearch-observability.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Felasticsearch-observability.agent.md) | Our expert AI assistant for debugging code (O11y), optimizing vector search (RAG), and remediating security threats using live Elastic data. | elastic-mcp
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=elastic-mcp&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22mcp-remote%22%2C%22https%253A%252F%252F%257BKIBANA_URL%257D%252Fapi%252Fagent_builder%252Fmcp%22%2C%22--header%22%2C%22Authorization%253A%2524%257BAUTH_HEADER%257D%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=elastic-mcp&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22mcp-remote%22%2C%22https%253A%252F%252F%257BKIBANA_URL%257D%252Fapi%252Fagent_builder%252Fmcp%22%2C%22--header%22%2C%22Authorization%253A%2524%257BAUTH_HEADER%257D%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22mcp-remote%22%2C%22https%253A%252F%252F%257BKIBANA_URL%257D%252Fapi%252Fagent_builder%252Fmcp%22%2C%22--header%22%2C%22Authorization%253A%2524%257BAUTH_HEADER%257D%22%5D%2C%22env%22%3A%7B%7D%7D) | | [Electron Code Review Mode Instructions](../agents/electron-angular-native.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Felectron-angular-native.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Felectron-angular-native.agent.md) | Code Review Mode tailored for Electron app with Node.js backend (main), Angular frontend (render), and native integration layer (e.g., AppleScript, shell, or native tooling). Services in other repos are not reviewed here. | | | [Expert .NET software engineer mode instructions](../agents/expert-dotnet-software-engineer.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fexpert-dotnet-software-engineer.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fexpert-dotnet-software-engineer.agent.md) | Provide expert .NET software engineering guidance using modern software design patterns. | | @@ -100,7 +100,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [Kotlin MCP Server Development Expert](../agents/kotlin-mcp-expert.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fkotlin-mcp-expert.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fkotlin-mcp-expert.agent.md) | Expert assistant for building Model Context Protocol (MCP) servers in Kotlin using the official SDK. | | | [Kusto Assistant](../agents/kusto-assistant.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fkusto-assistant.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fkusto-assistant.agent.md) | Expert KQL assistant for live Azure Data Explorer analysis via Azure MCP server | | | [Laravel Expert Agent](../agents/laravel-expert-agent.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flaravel-expert-agent.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flaravel-expert-agent.agent.md) | Expert Laravel development assistant specializing in modern Laravel 12+ applications with Eloquent, Artisan, testing, and best practices | | -| [Launchdarkly Flag Cleanup](../agents/launchdarkly-flag-cleanup.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flaunchdarkly-flag-cleanup.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flaunchdarkly-flag-cleanup.agent.md) | A specialized GitHub Copilot agent that uses the LaunchDarkly MCP server to safely automate feature flag cleanup workflows. This agent determines removal readiness, identifies the correct forward value, and creates PRs that preserve production behavior while removing obsolete flags and updating stale defaults. | [launchdarkly](https://github.com/mcp/launchdarkly/mcp-server)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=launchdarkly&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=launchdarkly&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D) | +| [Launchdarkly Flag Cleanup](../agents/launchdarkly-flag-cleanup.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flaunchdarkly-flag-cleanup.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flaunchdarkly-flag-cleanup.agent.md) | A specialized GitHub Copilot agent that uses the LaunchDarkly MCP server to safely automate feature flag cleanup workflows. This agent determines removal readiness, identifies the correct forward value, and creates PRs that preserve production behavior while removing obsolete flags and updating stale defaults. | launchdarkly
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=launchdarkly&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=launchdarkly&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D) | | [Lingo.dev Localization (i18n) Agent](../agents/lingodotdev-i18n.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flingodotdev-i18n.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flingodotdev-i18n.agent.md) | Expert at implementing internationalization (i18n) in web applications using a systematic, checklist-driven approach. | lingo
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=lingo&config=%7B%22command%22%3A%22%22%2C%22args%22%3A%5B%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=lingo&config=%7B%22command%22%3A%22%22%2C%22args%22%3A%5B%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22%22%2C%22args%22%3A%5B%5D%2C%22env%22%3A%7B%7D%7D) | | [Markdown Accessibility Assistant](../agents/markdown-accessibility-assistant.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fmarkdown-accessibility-assistant.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fmarkdown-accessibility-assistant.agent.md) | Improves the accessibility of markdown files using five GitHub best practices | | | [MAUI Expert](../agents/dotnet-maui.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdotnet-maui.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdotnet-maui.agent.md) | Support development of .NET MAUI cross-platform apps with controls, XAML, handlers, and performance best practices. | | @@ -121,7 +121,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [Next.js Expert](../agents/expert-nextjs-developer.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fexpert-nextjs-developer.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fexpert-nextjs-developer.agent.md) | Expert Next.js 16 developer specializing in App Router, Server Components, Cache Components, Turbopack, and modern React patterns with TypeScript | | | [Octopus Release Notes With Mcp](../agents/octopus-deploy-release-notes-mcp.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Foctopus-deploy-release-notes-mcp.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Foctopus-deploy-release-notes-mcp.agent.md) | Generate release notes for a release in Octopus Deploy. The tools for this MCP server provide access to the Octopus Deploy APIs. | octopus
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=octopus&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%2540octopusdeploy%252Fmcp-server%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=octopus&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%2540octopusdeploy%252Fmcp-server%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%2540octopusdeploy%252Fmcp-server%22%5D%2C%22env%22%3A%7B%7D%7D) | | [OpenAPI to Application Generator](../agents/openapi-to-application.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fopenapi-to-application.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fopenapi-to-application.agent.md) | Expert assistant for generating working applications from OpenAPI specifications | | -| [PagerDuty Incident Responder](../agents/pagerduty-incident-responder.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fpagerduty-incident-responder.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fpagerduty-incident-responder.agent.md) | Responds to PagerDuty incidents by analyzing incident context, identifying recent code changes, and suggesting fixes via GitHub PRs. | [pagerduty](https://github.com/mcp/io.github.PagerDuty/pagerduty-mcp)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=pagerduty&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=pagerduty&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D) | +| [PagerDuty Incident Responder](../agents/pagerduty-incident-responder.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fpagerduty-incident-responder.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fpagerduty-incident-responder.agent.md) | Responds to PagerDuty incidents by analyzing incident context, identifying recent code changes, and suggesting fixes via GitHub PRs. | pagerduty
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=pagerduty&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=pagerduty&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D) | | [PHP MCP Expert](../agents/php-mcp-expert.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fphp-mcp-expert.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fphp-mcp-expert.agent.md) | Expert assistant for PHP MCP server development using the official PHP SDK with attribute-based discovery | | | [Pimcore Expert](../agents/pimcore-expert.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fpimcore-expert.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fpimcore-expert.agent.md) | Expert Pimcore development assistant specializing in CMS, DAM, PIM, and E-Commerce solutions with Symfony integration | | | [Plan Mode Strategic Planning & Architecture](../agents/plan.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fplan.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fplan.agent.md) | Strategic planning and architecture assistant focused on thoughtful analysis before implementation. Helps developers understand codebases, clarify requirements, and develop comprehensive implementation strategies. | | @@ -181,7 +181,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [Technical Content Evaluator](../agents/technical-content-evaluator.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Ftechnical-content-evaluator.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Ftechnical-content-evaluator.agent.md) | Elite technical content editor and curriculum architect for evaluating technical training materials, documentation, and educational content. Reviews for technical accuracy, pedagogical excellence, content flow, code validation, and ensures A-grade quality standards. | | | [Technical Debt Remediation Plan](../agents/tech-debt-remediation-plan.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Ftech-debt-remediation-plan.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Ftech-debt-remediation-plan.agent.md) | Generate technical debt remediation plans for code, tests, and documentation. | | | [Technical spike research mode](../agents/research-technical-spike.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fresearch-technical-spike.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fresearch-technical-spike.agent.md) | Systematically research and validate technical spike documents through exhaustive investigation and controlled experimentation. | | -| [Terraform Agent](../agents/terraform.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fterraform.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fterraform.agent.md) | Terraform infrastructure specialist with automated HCP Terraform workflows. Leverages Terraform MCP server for registry integration, workspace management, and run orchestration. Generates compliant code using latest provider/module versions, manages private registries, automates variable sets, and orchestrates infrastructure deployments with proper validation and security practices. | [terraform](https://github.com/mcp/io.github.hashicorp/terraform-mcp-server)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=terraform&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=terraform&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D) | +| [Terraform Agent](../agents/terraform.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fterraform.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fterraform.agent.md) | Terraform infrastructure specialist with automated HCP Terraform workflows. Leverages Terraform MCP server for registry integration, workspace management, and run orchestration. Generates compliant code using latest provider/module versions, manages private registries, automates variable sets, and orchestrates infrastructure deployments with proper validation and security practices. | terraform
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=terraform&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=terraform&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D) | | [Terraform IaC Reviewer](../agents/terraform-iac-reviewer.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fterraform-iac-reviewer.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fterraform-iac-reviewer.agent.md) | Terraform-focused agent that reviews and creates safer IaC changes with emphasis on state safety, least privilege, module patterns, drift detection, and plan/apply discipline | | | [Thinking Beast Mode](../agents/Thinking-Beast-Mode.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2FThinking-Beast-Mode.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2FThinking-Beast-Mode.agent.md) | A transcendent coding agent with quantum cognitive architecture, adversarial intelligence, and unrestricted creative freedom. | | | [TypeScript MCP Server Expert](../agents/typescript-mcp-expert.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Ftypescript-mcp-expert.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Ftypescript-mcp-expert.agent.md) | Expert assistant for developing Model Context Protocol (MCP) servers in TypeScript | | diff --git a/docs/README.skills.md b/docs/README.skills.md index e3c5e5fd8..9b583ca11 100644 --- a/docs/README.skills.md +++ b/docs/README.skills.md @@ -89,6 +89,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-skills) for guidelines on how to | [csharp-nunit](../skills/csharp-nunit/SKILL.md) | Get best practices for NUnit unit testing, including data-driven tests | None | | [csharp-tunit](../skills/csharp-tunit/SKILL.md) | Get best practices for TUnit unit testing, including data-driven tests | None | | [csharp-xunit](../skills/csharp-xunit/SKILL.md) | Get best practices for XUnit unit testing, including data-driven tests | None | +| [datanalysis-credit-risk](../skills/datanalysis-credit-risk/SKILL.md) | Credit risk data cleaning and variable screening pipeline for pre-loan modeling. Use when working with raw credit data that needs quality assessment, missing value analysis, or variable selection before modeling. it covers data loading and formatting, abnormal period filtering, missing rate calculation, high-missing variable removal,low-IV variable filtering, high-PSI variable removal, Null Importance denoising, high-correlation variable removal, and cleaning report generation. 适用场景:信用风险数据清洗、变量筛选、贷前建模预处理。关键词:缺失率、IV值、PSI、Null Importance、相关性剔除、数据质量报告。 | `references/__pycache__/analysis.cpython-313.pyc`
`references/__pycache__/func.cpython-313.pyc`
`references/analysis.py`
`references/func.py`
`scripts/example.py` | | [dataverse-python-advanced-patterns](../skills/dataverse-python-advanced-patterns/SKILL.md) | Generate production code for Dataverse SDK using advanced patterns, error handling, and optimization techniques. | None | | [dataverse-python-production-code](../skills/dataverse-python-production-code/SKILL.md) | Generate production-ready Python code using Dataverse SDK with error handling, optimization, and best practices | None | | [dataverse-python-quickstart](../skills/dataverse-python-quickstart/SKILL.md) | Generate Python SDK setup + CRUD + bulk + paging snippets using official patterns. | None | From 539861a90560addd2c2028a11a7813a9643de6cd Mon Sep 17 00:00:00 2001 From: REAL-Madrid01 <3098711414@qq.com> Date: Fri, 27 Feb 2026 14:18:38 +0800 Subject: [PATCH 3/5] fix plugin problem --- skills/datanalysis-credit-risk/SKILL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skills/datanalysis-credit-risk/SKILL.md b/skills/datanalysis-credit-risk/SKILL.md index 090a47c90..3b8a5ddf9 100644 --- a/skills/datanalysis-credit-risk/SKILL.md +++ b/skills/datanalysis-credit-risk/SKILL.md @@ -1,6 +1,6 @@ --- name: datanalysis-credit-risk -description: Credit risk data cleaning and variable screening pipeline for pre-loan modeling. Use when working with raw credit data that needs quality assessment, missing value analysis, or variable selection before modeling. it covers data loading and formatting, abnormal period filtering, missing rate calculation, high-missing variable removal,low-IV variable filtering, high-PSI variable removal, Null Importance denoising, high-correlation variable removal, and cleaning report generation. 适用场景:信用风险数据清洗、变量筛选、贷前建模预处理。关键词:缺失率、IV值、PSI、Null Importance、相关性剔除、数据质量报告。 +description: 'Credit risk data cleaning and variable screening pipeline for pre-loan modeling. Use when working with raw credit data that needs quality assessment, missing value analysis, or variable selection before modeling. it covers data loading and formatting, abnormal period filtering, missing rate calculation, high-missing variable removal,low-IV variable filtering, high-PSI variable removal, Null Importance denoising, high-correlation variable removal, and cleaning report generation. 适用场景:信用风险数据清洗、变量筛选、贷前建模预处理。关键词:缺失率、IV值、PSI、Null Importance、相关性剔除、数据质量报告' --- # 数据清洗与筛选 From f1fca760f502e581fccf0ce945258b049235809f Mon Sep 17 00:00:00 2001 From: REAL-Madrid01 <3098711414@qq.com> Date: Fri, 27 Feb 2026 15:47:02 +0800 Subject: [PATCH 4/5] re-run npm start --- docs/README.skills.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README.skills.md b/docs/README.skills.md index 9b583ca11..08a7b84c2 100644 --- a/docs/README.skills.md +++ b/docs/README.skills.md @@ -89,7 +89,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-skills) for guidelines on how to | [csharp-nunit](../skills/csharp-nunit/SKILL.md) | Get best practices for NUnit unit testing, including data-driven tests | None | | [csharp-tunit](../skills/csharp-tunit/SKILL.md) | Get best practices for TUnit unit testing, including data-driven tests | None | | [csharp-xunit](../skills/csharp-xunit/SKILL.md) | Get best practices for XUnit unit testing, including data-driven tests | None | -| [datanalysis-credit-risk](../skills/datanalysis-credit-risk/SKILL.md) | Credit risk data cleaning and variable screening pipeline for pre-loan modeling. Use when working with raw credit data that needs quality assessment, missing value analysis, or variable selection before modeling. it covers data loading and formatting, abnormal period filtering, missing rate calculation, high-missing variable removal,low-IV variable filtering, high-PSI variable removal, Null Importance denoising, high-correlation variable removal, and cleaning report generation. 适用场景:信用风险数据清洗、变量筛选、贷前建模预处理。关键词:缺失率、IV值、PSI、Null Importance、相关性剔除、数据质量报告。 | `references/__pycache__/analysis.cpython-313.pyc`
`references/__pycache__/func.cpython-313.pyc`
`references/analysis.py`
`references/func.py`
`scripts/example.py` | +| [datanalysis-credit-risk](../skills/datanalysis-credit-risk/SKILL.md) | Credit risk data cleaning and variable screening pipeline for pre-loan modeling. Use when working with raw credit data that needs quality assessment, missing value analysis, or variable selection before modeling. it covers data loading and formatting, abnormal period filtering, missing rate calculation, high-missing variable removal,low-IV variable filtering, high-PSI variable removal, Null Importance denoising, high-correlation variable removal, and cleaning report generation. 适用场景:信用风险数据清洗、变量筛选、贷前建模预处理。关键词:缺失率、IV值、PSI、Null Importance、相关性剔除、数据质量报告 | `references/__pycache__/analysis.cpython-313.pyc`
`references/__pycache__/func.cpython-313.pyc`
`references/analysis.py`
`references/func.py`
`scripts/example.py` | | [dataverse-python-advanced-patterns](../skills/dataverse-python-advanced-patterns/SKILL.md) | Generate production code for Dataverse SDK using advanced patterns, error handling, and optimization techniques. | None | | [dataverse-python-production-code](../skills/dataverse-python-production-code/SKILL.md) | Generate production-ready Python code using Dataverse SDK with error handling, optimization, and best practices | None | | [dataverse-python-quickstart](../skills/dataverse-python-quickstart/SKILL.md) | Generate Python SDK setup + CRUD + bulk + paging snippets using official patterns. | None | From 8218ad76efbca12f2358e3ce69620aa77031389f Mon Sep 17 00:00:00 2001 From: REAL-Madrid01 <3098711414@qq.com> Date: Fri, 27 Feb 2026 15:53:17 +0800 Subject: [PATCH 5/5] re-run npm start --- docs/README.agents.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/README.agents.md b/docs/README.agents.md index 83ca58c03..2e8bdccd2 100644 --- a/docs/README.agents.md +++ b/docs/README.agents.md @@ -31,7 +31,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [Agent Governance Reviewer](../agents/agent-governance-reviewer.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fagent-governance-reviewer.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fagent-governance-reviewer.agent.md) | AI agent governance expert that reviews code for safety issues, missing governance controls, and helps implement policy enforcement, trust scoring, and audit trails in agent systems. | | | [Amplitude Experiment Implementation](../agents/amplitude-experiment-implementation.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Famplitude-experiment-implementation.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Famplitude-experiment-implementation.agent.md) | This custom agent uses Amplitude's MCP tools to deploy new experiments inside of Amplitude, enabling seamless variant testing capabilities and rollout of product features. | | | [API Architect](../agents/api-architect.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fapi-architect.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fapi-architect.agent.md) | Your role is that of an API architect. Help mentor the engineer by providing guidance, support, and working code. | | -| [Apify Integration Expert](../agents/apify-integration-expert.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fapify-integration-expert.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fapify-integration-expert.agent.md) | Expert agent for integrating Apify Actors into codebases. Handles Actor selection, workflow design, implementation across JavaScript/TypeScript and Python, testing, and production-ready deployment. | apify
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=apify&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=apify&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D) | +| [Apify Integration Expert](../agents/apify-integration-expert.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fapify-integration-expert.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fapify-integration-expert.agent.md) | Expert agent for integrating Apify Actors into codebases. Handles Actor selection, workflow design, implementation across JavaScript/TypeScript and Python, testing, and production-ready deployment. | [apify](https://github.com/mcp/com.apify/apify-mcp-server)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=apify&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=apify&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.apify.com%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24APIFY_TOKEN%22%2C%22Content-Type%22%3A%22application%2Fjson%22%7D%7D) | | [Arch Linux Expert](../agents/arch-linux-expert.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Farch-linux-expert.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Farch-linux-expert.agent.md) | Arch Linux specialist focused on pacman, rolling-release maintenance, and Arch-centric system administration workflows. | | | [Arm Migration Agent](../agents/arm-migration.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Farm-migration.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Farm-migration.agent.md) | Arm Cloud Migration Assistant accelerates moving x86 workloads to Arm infrastructure. It scans the repository for architecture assumptions, portability issues, container base image and dependency incompatibilities, and recommends Arm-optimized changes. It can drive multi-arch container builds, validate performance, and guide optimization, enabling smooth cross-platform deployment directly inside GitHub. | custom-mcp
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=custom-mcp&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22--rm%22%2C%22-i%22%2C%22-v%22%2C%22%2524%257B%257B%2520github.workspace%2520%257D%257D%253A%252Fworkspace%22%2C%22--name%22%2C%22arm-mcp%22%2C%22armlimited%252Farm-mcp%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=custom-mcp&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22--rm%22%2C%22-i%22%2C%22-v%22%2C%22%2524%257B%257B%2520github.workspace%2520%257D%257D%253A%252Fworkspace%22%2C%22--name%22%2C%22arm-mcp%22%2C%22armlimited%252Farm-mcp%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22--rm%22%2C%22-i%22%2C%22-v%22%2C%22%2524%257B%257B%2520github.workspace%2520%257D%257D%253A%252Fworkspace%22%2C%22--name%22%2C%22arm-mcp%22%2C%22armlimited%252Farm-mcp%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D) | | [Atlassian Requirements to Jira](../agents/atlassian-requirements-to-jira.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fatlassian-requirements-to-jira.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fatlassian-requirements-to-jira.agent.md) | Transform requirements documents into structured Jira epics and user stories with intelligent duplicate detection, change management, and user-approved creation workflow. | | @@ -59,7 +59,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [Clojure Interactive Programming](../agents/clojure-interactive-programming.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fclojure-interactive-programming.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fclojure-interactive-programming.agent.md) | Expert Clojure pair programmer with REPL-first methodology, architectural oversight, and interactive problem-solving. Enforces quality standards, prevents workarounds, and develops solutions incrementally through live REPL evaluation before file modifications. | | | [Comet Opik](../agents/comet-opik.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcomet-opik.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcomet-opik.agent.md) | Unified Comet Opik agent for instrumenting LLM apps, managing prompts/projects, auditing prompts, and investigating traces/metrics via the latest Opik MCP server. | opik
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=opik&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22opik-mcp%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=opik&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22opik-mcp%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22opik-mcp%22%5D%2C%22env%22%3A%7B%7D%7D) | | [Context Architect](../agents/context-architect.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcontext-architect.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcontext-architect.agent.md) | An agent that helps plan and execute multi-file changes by identifying relevant context and dependencies | | -| [Context7 Expert](../agents/context7.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcontext7.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcontext7.agent.md) | Expert in latest library versions, best practices, and correct syntax using up-to-date documentation | context7
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=context7&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=context7&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D) | +| [Context7 Expert](../agents/context7.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcontext7.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcontext7.agent.md) | Expert in latest library versions, best practices, and correct syntax using up-to-date documentation | [context7](https://github.com/mcp/io.github.upstash/context7)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=context7&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=context7&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.context7.com%2Fmcp%22%2C%22headers%22%3A%7B%22CONTEXT7_API_KEY%22%3A%22%24%7B%7B%20secrets.COPILOT_MCP_CONTEXT7%20%7D%7D%22%7D%7D) | | [Create PRD Chat Mode](../agents/prd.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fprd.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fprd.agent.md) | Generate a comprehensive Product Requirements Document (PRD) in Markdown, detailing user stories, acceptance criteria, technical considerations, and metrics. Optionally create GitHub issues upon user confirmation. | | | [Critical thinking mode instructions](../agents/critical-thinking.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcritical-thinking.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcritical-thinking.agent.md) | Challenge assumptions and encourage critical thinking to ensure the best possible solution and outcomes. | | | [Custom Agent Foundry](../agents/custom-agent-foundry.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcustom-agent-foundry.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fcustom-agent-foundry.agent.md) | Expert at designing and creating VS Code custom agents with optimal configurations | | @@ -72,7 +72,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [DiffblueCover](../agents/diffblue-cover.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdiffblue-cover.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdiffblue-cover.agent.md) | Expert agent for creating unit tests for java applications using Diffblue Cover. | DiffblueCover
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=DiffblueCover&config=%7B%22command%22%3A%22uv%22%2C%22args%22%3A%5B%22run%22%2C%22--with%22%2C%22fastmcp%22%2C%22fastmcp%22%2C%22run%22%2C%22%252Fplaceholder%252Fpath%252Fto%252Fcover-mcp%252Fmain.py%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=DiffblueCover&config=%7B%22command%22%3A%22uv%22%2C%22args%22%3A%5B%22run%22%2C%22--with%22%2C%22fastmcp%22%2C%22fastmcp%22%2C%22run%22%2C%22%252Fplaceholder%252Fpath%252Fto%252Fcover-mcp%252Fmain.py%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22uv%22%2C%22args%22%3A%5B%22run%22%2C%22--with%22%2C%22fastmcp%22%2C%22fastmcp%22%2C%22run%22%2C%22%252Fplaceholder%252Fpath%252Fto%252Fcover-mcp%252Fmain.py%22%5D%2C%22env%22%3A%7B%7D%7D) | | [Droid](../agents/droid.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdroid.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdroid.agent.md) | Provides installation guidance, usage examples, and automation patterns for the Droid CLI, with emphasis on droid exec for CI/CD and non-interactive automation | | | [Drupal Expert](../agents/drupal-expert.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdrupal-expert.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdrupal-expert.agent.md) | Expert assistant for Drupal development, architecture, and best practices using PHP 8.3+ and modern Drupal patterns | | -| [Dynatrace Expert](../agents/dynatrace-expert.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdynatrace-expert.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdynatrace-expert.agent.md) | The Dynatrace Expert Agent integrates observability and security capabilities directly into GitHub workflows, enabling development teams to investigate incidents, validate deployments, triage errors, detect performance regressions, validate releases, and manage security vulnerabilities by autonomously analysing traces, logs, and Dynatrace findings. This enables targeted and precise remediation of identified issues directly within the repository. | dynatrace
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=dynatrace&config=%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=dynatrace&config=%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D) | +| [Dynatrace Expert](../agents/dynatrace-expert.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdynatrace-expert.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdynatrace-expert.agent.md) | The Dynatrace Expert Agent integrates observability and security capabilities directly into GitHub workflows, enabling development teams to investigate incidents, validate deployments, triage errors, detect performance regressions, validate releases, and manage security vulnerabilities by autonomously analysing traces, logs, and Dynatrace findings. This enables targeted and precise remediation of identified issues directly within the repository. | [dynatrace](https://github.com/mcp/io.github.dynatrace-oss/Dynatrace-mcp)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=dynatrace&config=%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=dynatrace&config=%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fpia1134d.dev.apps.dynatracelabs.com%2Fplatform-reserved%2Fmcp-gateway%2Fv0.1%2Fservers%2Fdynatrace-mcp%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24COPILOT_MCP_DT_API_TOKEN%22%7D%7D) | | [Elasticsearch Agent](../agents/elasticsearch-observability.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Felasticsearch-observability.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Felasticsearch-observability.agent.md) | Our expert AI assistant for debugging code (O11y), optimizing vector search (RAG), and remediating security threats using live Elastic data. | elastic-mcp
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=elastic-mcp&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22mcp-remote%22%2C%22https%253A%252F%252F%257BKIBANA_URL%257D%252Fapi%252Fagent_builder%252Fmcp%22%2C%22--header%22%2C%22Authorization%253A%2524%257BAUTH_HEADER%257D%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=elastic-mcp&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22mcp-remote%22%2C%22https%253A%252F%252F%257BKIBANA_URL%257D%252Fapi%252Fagent_builder%252Fmcp%22%2C%22--header%22%2C%22Authorization%253A%2524%257BAUTH_HEADER%257D%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22mcp-remote%22%2C%22https%253A%252F%252F%257BKIBANA_URL%257D%252Fapi%252Fagent_builder%252Fmcp%22%2C%22--header%22%2C%22Authorization%253A%2524%257BAUTH_HEADER%257D%22%5D%2C%22env%22%3A%7B%7D%7D) | | [Electron Code Review Mode Instructions](../agents/electron-angular-native.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Felectron-angular-native.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Felectron-angular-native.agent.md) | Code Review Mode tailored for Electron app with Node.js backend (main), Angular frontend (render), and native integration layer (e.g., AppleScript, shell, or native tooling). Services in other repos are not reviewed here. | | | [Expert .NET software engineer mode instructions](../agents/expert-dotnet-software-engineer.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fexpert-dotnet-software-engineer.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fexpert-dotnet-software-engineer.agent.md) | Provide expert .NET software engineering guidance using modern software design patterns. | | @@ -100,7 +100,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [Kotlin MCP Server Development Expert](../agents/kotlin-mcp-expert.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fkotlin-mcp-expert.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fkotlin-mcp-expert.agent.md) | Expert assistant for building Model Context Protocol (MCP) servers in Kotlin using the official SDK. | | | [Kusto Assistant](../agents/kusto-assistant.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fkusto-assistant.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fkusto-assistant.agent.md) | Expert KQL assistant for live Azure Data Explorer analysis via Azure MCP server | | | [Laravel Expert Agent](../agents/laravel-expert-agent.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flaravel-expert-agent.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flaravel-expert-agent.agent.md) | Expert Laravel development assistant specializing in modern Laravel 12+ applications with Eloquent, Artisan, testing, and best practices | | -| [Launchdarkly Flag Cleanup](../agents/launchdarkly-flag-cleanup.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flaunchdarkly-flag-cleanup.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flaunchdarkly-flag-cleanup.agent.md) | A specialized GitHub Copilot agent that uses the LaunchDarkly MCP server to safely automate feature flag cleanup workflows. This agent determines removal readiness, identifies the correct forward value, and creates PRs that preserve production behavior while removing obsolete flags and updating stale defaults. | launchdarkly
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=launchdarkly&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=launchdarkly&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D) | +| [Launchdarkly Flag Cleanup](../agents/launchdarkly-flag-cleanup.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flaunchdarkly-flag-cleanup.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flaunchdarkly-flag-cleanup.agent.md) | A specialized GitHub Copilot agent that uses the LaunchDarkly MCP server to safely automate feature flag cleanup workflows. This agent determines removal readiness, identifies the correct forward value, and creates PRs that preserve production behavior while removing obsolete flags and updating stale defaults. | [launchdarkly](https://github.com/mcp/launchdarkly/mcp-server)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=launchdarkly&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=launchdarkly&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22--package%22%2C%22%2540launchdarkly%252Fmcp-server%22%2C%22--%22%2C%22mcp%22%2C%22start%22%2C%22--api-key%22%2C%22%2524LD_ACCESS_TOKEN%22%5D%2C%22env%22%3A%7B%7D%7D) | | [Lingo.dev Localization (i18n) Agent](../agents/lingodotdev-i18n.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flingodotdev-i18n.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Flingodotdev-i18n.agent.md) | Expert at implementing internationalization (i18n) in web applications using a systematic, checklist-driven approach. | lingo
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=lingo&config=%7B%22command%22%3A%22%22%2C%22args%22%3A%5B%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=lingo&config=%7B%22command%22%3A%22%22%2C%22args%22%3A%5B%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22%22%2C%22args%22%3A%5B%5D%2C%22env%22%3A%7B%7D%7D) | | [Markdown Accessibility Assistant](../agents/markdown-accessibility-assistant.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fmarkdown-accessibility-assistant.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fmarkdown-accessibility-assistant.agent.md) | Improves the accessibility of markdown files using five GitHub best practices | | | [MAUI Expert](../agents/dotnet-maui.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdotnet-maui.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fdotnet-maui.agent.md) | Support development of .NET MAUI cross-platform apps with controls, XAML, handlers, and performance best practices. | | @@ -121,7 +121,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [Next.js Expert](../agents/expert-nextjs-developer.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fexpert-nextjs-developer.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fexpert-nextjs-developer.agent.md) | Expert Next.js 16 developer specializing in App Router, Server Components, Cache Components, Turbopack, and modern React patterns with TypeScript | | | [Octopus Release Notes With Mcp](../agents/octopus-deploy-release-notes-mcp.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Foctopus-deploy-release-notes-mcp.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Foctopus-deploy-release-notes-mcp.agent.md) | Generate release notes for a release in Octopus Deploy. The tools for this MCP server provide access to the Octopus Deploy APIs. | octopus
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=octopus&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%2540octopusdeploy%252Fmcp-server%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=octopus&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%2540octopusdeploy%252Fmcp-server%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%2540octopusdeploy%252Fmcp-server%22%5D%2C%22env%22%3A%7B%7D%7D) | | [OpenAPI to Application Generator](../agents/openapi-to-application.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fopenapi-to-application.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fopenapi-to-application.agent.md) | Expert assistant for generating working applications from OpenAPI specifications | | -| [PagerDuty Incident Responder](../agents/pagerduty-incident-responder.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fpagerduty-incident-responder.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fpagerduty-incident-responder.agent.md) | Responds to PagerDuty incidents by analyzing incident context, identifying recent code changes, and suggesting fixes via GitHub PRs. | pagerduty
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=pagerduty&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=pagerduty&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D) | +| [PagerDuty Incident Responder](../agents/pagerduty-incident-responder.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fpagerduty-incident-responder.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fpagerduty-incident-responder.agent.md) | Responds to PagerDuty incidents by analyzing incident context, identifying recent code changes, and suggesting fixes via GitHub PRs. | [pagerduty](https://github.com/mcp/io.github.PagerDuty/pagerduty-mcp)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=pagerduty&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=pagerduty&config=%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22url%22%3A%22https%3A%2F%2Fmcp.pagerduty.com%2Fmcp%22%2C%22headers%22%3A%7B%7D%7D) | | [PHP MCP Expert](../agents/php-mcp-expert.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fphp-mcp-expert.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fphp-mcp-expert.agent.md) | Expert assistant for PHP MCP server development using the official PHP SDK with attribute-based discovery | | | [Pimcore Expert](../agents/pimcore-expert.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fpimcore-expert.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fpimcore-expert.agent.md) | Expert Pimcore development assistant specializing in CMS, DAM, PIM, and E-Commerce solutions with Symfony integration | | | [Plan Mode Strategic Planning & Architecture](../agents/plan.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fplan.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fplan.agent.md) | Strategic planning and architecture assistant focused on thoughtful analysis before implementation. Helps developers understand codebases, clarify requirements, and develop comprehensive implementation strategies. | | @@ -181,7 +181,7 @@ See [CONTRIBUTING.md](../CONTRIBUTING.md#adding-agents) for guidelines on how to | [Technical Content Evaluator](../agents/technical-content-evaluator.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Ftechnical-content-evaluator.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Ftechnical-content-evaluator.agent.md) | Elite technical content editor and curriculum architect for evaluating technical training materials, documentation, and educational content. Reviews for technical accuracy, pedagogical excellence, content flow, code validation, and ensures A-grade quality standards. | | | [Technical Debt Remediation Plan](../agents/tech-debt-remediation-plan.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Ftech-debt-remediation-plan.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Ftech-debt-remediation-plan.agent.md) | Generate technical debt remediation plans for code, tests, and documentation. | | | [Technical spike research mode](../agents/research-technical-spike.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fresearch-technical-spike.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fresearch-technical-spike.agent.md) | Systematically research and validate technical spike documents through exhaustive investigation and controlled experimentation. | | -| [Terraform Agent](../agents/terraform.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fterraform.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fterraform.agent.md) | Terraform infrastructure specialist with automated HCP Terraform workflows. Leverages Terraform MCP server for registry integration, workspace management, and run orchestration. Generates compliant code using latest provider/module versions, manages private registries, automates variable sets, and orchestrates infrastructure deployments with proper validation and security practices. | terraform
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=terraform&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=terraform&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D) | +| [Terraform Agent](../agents/terraform.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fterraform.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fterraform.agent.md) | Terraform infrastructure specialist with automated HCP Terraform workflows. Leverages Terraform MCP server for registry integration, workspace management, and run orchestration. Generates compliant code using latest provider/module versions, manages private registries, automates variable sets, and orchestrates infrastructure deployments with proper validation and security practices. | [terraform](https://github.com/mcp/io.github.hashicorp/terraform-mcp-server)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code-0098FF?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscode?name=terraform&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-VS_Code_Insiders-24bfa5?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-vscodeinsiders?name=terraform&config=%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D)
[![Install MCP](https://img.shields.io/badge/Install-Visual_Studio-C16FDE?style=flat-square)](https://aka.ms/awesome-copilot/install/mcp-visualstudio/mcp-install?%7B%22command%22%3A%22docker%22%2C%22args%22%3A%5B%22run%22%2C%22-i%22%2C%22--rm%22%2C%22-e%22%2C%22TFE_TOKEN%253D%2524%257BCOPILOT_MCP_TFE_TOKEN%257D%22%2C%22-e%22%2C%22TFE_ADDRESS%253D%2524%257BCOPILOT_MCP_TFE_ADDRESS%257D%22%2C%22-e%22%2C%22ENABLE_TF_OPERATIONS%253D%2524%257BCOPILOT_MCP_ENABLE_TF_OPERATIONS%257D%22%2C%22hashicorp%252Fterraform-mcp-server%253Alatest%22%5D%2C%22env%22%3A%7B%7D%7D) | | [Terraform IaC Reviewer](../agents/terraform-iac-reviewer.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fterraform-iac-reviewer.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Fterraform-iac-reviewer.agent.md) | Terraform-focused agent that reviews and creates safer IaC changes with emphasis on state safety, least privilege, module patterns, drift detection, and plan/apply discipline | | | [Thinking Beast Mode](../agents/Thinking-Beast-Mode.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2FThinking-Beast-Mode.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2FThinking-Beast-Mode.agent.md) | A transcendent coding agent with quantum cognitive architecture, adversarial intelligence, and unrestricted creative freedom. | | | [TypeScript MCP Server Expert](../agents/typescript-mcp-expert.agent.md)
[![Install in VS Code](https://img.shields.io/badge/VS_Code-Install-0098FF?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Ftypescript-mcp-expert.agent.md)
[![Install in VS Code Insiders](https://img.shields.io/badge/VS_Code_Insiders-Install-24bfa5?style=flat-square&logo=visualstudiocode&logoColor=white)](https://aka.ms/awesome-copilot/install/agent?url=vscode-insiders%3Achat-agent%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fagents%2Ftypescript-mcp-expert.agent.md) | Expert assistant for developing Model Context Protocol (MCP) servers in TypeScript | |