feat(hands): improve 6 lower-scoring hands — system prompts and SKILL.md depth

- browser: 5→7 phases, SPA detection, error recovery decision tree, 3 new settings
- strategist: framework integration methodology, 7 anti-patterns, uncertainty quantification
- lead: remove clip language, add BANT/MEDDIC qualification, 3 new settings + CRM export
- researcher: CRAAP→CRAAP+, 7-step conflict resolution, 6-item cognitive bias audit
- collector: concrete change classification (structural/content/metadata), 5-factor scoring, 2 new settings
- apitester: OWASP Top 10 checklist, 4 load test profiles, contract testing phase, GraphQL/Webhook patterns
This commit is contained in:
Evan Hu committed 2026-03-23 00:31:13 +09:00
1 parent 33d279889c
commit ed595230cf
12 files changed
+1663 -375

No files matched your search

+131 -12
View File
@@ -182,6 +182,60 @@ description = "Analyze and track sentiment trends over time"
setting_type = "toggle"
default = "false"
[[settings]]
key = "source_reliability_threshold"
label = "Source Reliability Threshold"
description = "Minimum source tier required to include a data point (lower tiers are discarded unless they are the sole source for a structural change)"
setting_type = "select"
default = "tier_3"
[[settings.options]]
value = "tier_1"
label = "Tier 1 only (official/primary sources)"
[[settings.options]]
value = "tier_2"
label = "Tier 2+ (institutional and above)"
[[settings.options]]
value = "tier_3"
label = "Tier 3+ (professional and above)"
[[settings.options]]
value = "tier_4"
label = "Tier 4+ (community and above)"
[[settings.options]]
value = "tier_5"
label = "All sources (no filtering)"
[[settings]]
key = "change_significance_threshold"
label = "Change Significance Threshold"
description = "Minimum significance score (0-100) for a change to be classified as IMPORTANT. Changes below this threshold are classified as MINOR."
setting_type = "select"
default = "60"
[[settings.options]]
value = "40"
label = "40 (more sensitive — more alerts)"
[[settings.options]]
value = "50"
label = "50 (balanced)"
[[settings.options]]
value = "60"
label = "60 (default)"
[[settings.options]]
value = "70"
label = "70 (stricter — fewer alerts)"
[[settings.options]]
value = "80"
label = "80 (very strict — only critical-level)"
# ─── Agent configuration ─────────────────────────────────────────────────────
[agent]
@@ -288,23 +342,40 @@ Relation types:
Compare current collection against previous state:
1. Load `collector_knowledge_base.json` (previous snapshot)
2. Identify CHANGES:
- New entities not in previous snapshot
- Changed attributes (e.g., person changed company, new funding round)
- New relationships between known entities
- Disappeared entities (no longer mentioned)
3. Score each change by significance (critical/important/minor):
- Critical: leadership change, acquisition, major funding, product launch
- Important: new partnership, hiring surge, pricing change, competitor move
- Minor: blog post, minor update, mention in article
2. Classify each difference into one of three change categories:
- **Structural change**: entity appeared/disappeared, relationship added/removed, organizational restructure (e.g., new subsidiary, person left company, product deprecated)
- **Content change**: attribute value updated on an existing entity (e.g., funding amount increased, role title changed, version number bumped, pricing modified)
- **Metadata change**: source count changed, confidence level shifted, last_seen timestamp updated, but the core fact is unchanged
If `alert_on_changes` is enabled and critical changes found:
- event_publish with change summary
3. Deduplicate cross-source overlaps before scoring:
- Normalize entity names (strip legal suffixes, lowercase, expand abbreviations)
- If 2+ sources report the same fact about the same entity, merge into one data point with the highest confidence and list all source URLs
- If sources conflict on a fact (e.g., different funding amounts), keep both entries and flag as "conflicting — requires resolution"
4. Compute a significance score (0-100) for each change using this algorithm:
- **Base score by category**: structural = 60, content = 40, metadata = 5
- **Source reliability modifier**: Tier 1 (official/primary) = +20, Tier 2 (institutional) = +10, Tier 3 (professional) = +5, Tier 4-5 = +0
- **Source freshness modifier**: published within 24h = +10, within 7d = +5, older than 30d = -10
- **Corroboration modifier**: confirmed by 2+ independent sources = +10, single source only = +0, contradicted by another source = -15
- **Focus area relevance**: change directly matches `focus_area` = +10, tangentially related = +0
- Cap final score at 100, floor at 0
5. Map significance score to alert tier using `change_significance_threshold` (default 60):
- Score >= 80: CRITICAL — leadership change, acquisition, major funding (>$10M), product discontinuation, regulatory action
- Score >= threshold (default 60): IMPORTANT — new product launch, partnership, hiring surge (>5 roles), pricing change, significant competitor move
- Score < threshold: MINOR — blog post, minor update, conference mention, individual job posting
6. Filter sources by `source_reliability_threshold` (default "tier_3"):
- Discard data points where ALL supporting sources fall below the configured threshold tier
- Exception: if a below-threshold source is the ONLY source for a structural change, keep it but downgrade confidence to "low" and flag for corroboration in the next cycle
If `alert_on_changes` is enabled and any change scores CRITICAL:
- event_publish with change summary including: entity name, change category, significance score, top source URL
If `track_sentiment` is enabled:
- Classify each source as positive/negative/neutral toward the target
- Track sentiment trend vs previous cycle
- Note significant sentiment shifts in the report
- Note significant sentiment shifts (score delta > 2 in one cycle) in the report
---
@@ -435,6 +506,14 @@ description = "每次采集扫描处理的最大来源数量"
label = "情感追踪"
description = "分析并追踪随时间变化的情感趋势"
[i18n.zh.settings.source_reliability_threshold]
label = "来源可靠性阈值"
description = "纳入数据点所需的最低来源等级(低于阈值的来源将被丢弃,除非它是某一结构性变更的唯一来源)"
[i18n.zh.settings.change_significance_threshold]
label = "变更显著性阈值"
description = "变更被归类为「重要」的最低显著性分数(0-100),低于此阈值的变更归类为「次要」"
# ─── Japanese (日本語) ────────────────────────────────────────────────────
[i18n.ja]
@@ -474,6 +553,14 @@ description = "各収集スキャンで処理するソースの最大数"
label = "センチメント追跡"
description = "時間の経過に伴うセンチメントの傾向を分析・追跡する"
[i18n.ja.settings.source_reliability_threshold]
label = "ソース信頼性しきい値"
description = "データポイントを採用するために必要な最低ソースティア(しきい値以下のソースは、構造的変更の唯一のソースでない限り除外されます)"
[i18n.ja.settings.change_significance_threshold]
label = "変更重要度しきい値"
description = "変更を「重要」に分類するための最低重要度スコア(0~100)。このしきい値以下の変更は「軽微」に分類されます"
# ─── Spanish (Español) ────────────────────────────────────────────────────
[i18n.es]
@@ -513,6 +600,14 @@ description = "Número máximo de fuentes a procesar por barrido de recopilació
label = "Seguimiento de sentimiento"
description = "Analizar y rastrear las tendencias de sentimiento a lo largo del tiempo"
[i18n.es.settings.source_reliability_threshold]
label = "Umbral de fiabilidad de fuentes"
description = "Nivel mínimo de fuente requerido para incluir un dato (las fuentes por debajo del umbral se descartan, salvo que sean la única fuente de un cambio estructural)"
[i18n.es.settings.change_significance_threshold]
label = "Umbral de significancia de cambios"
description = "Puntuación mínima de significancia (0-100) para clasificar un cambio como IMPORTANTE. Los cambios por debajo se clasifican como MENORES."
# ─── French (Français) ────────────────────────────────────────────────────
[i18n.fr]
@@ -552,6 +647,14 @@ description = "Nombre maximum de sources à traiter par cycle de collecte"
label = "Suivi du sentiment"
description = "Analyser et suivre les tendances de sentiment au fil du temps"
[i18n.fr.settings.source_reliability_threshold]
label = "Seuil de fiabilité des sources"
description = "Niveau minimum de source requis pour inclure un point de données (les sources en dessous du seuil sont ignorées, sauf si elles sont la seule source d'un changement structurel)"
[i18n.fr.settings.change_significance_threshold]
label = "Seuil de significativité des changements"
description = "Score minimum de significativité (0-100) pour qu'un changement soit classé comme IMPORTANT. Les changements en dessous sont classés comme MINEURS."
# ─── German (Deutsch) ────────────────────────────────────────────────────
[i18n.de]
@@ -591,6 +694,14 @@ description = "Maximale Anzahl der pro Sammlungszyklus zu verarbeitenden Quellen
label = "Stimmungsverfolgung"
description = "Stimmungstrends im Zeitverlauf analysieren und verfolgen"
[i18n.de.settings.source_reliability_threshold]
label = "Quellenzuverlässigkeitsschwelle"
description = "Mindeststufe einer Quelle, damit ein Datenpunkt aufgenommen wird (Quellen unterhalb der Schwelle werden verworfen, es sei denn, sie sind die einzige Quelle einer strukturellen Änderung)"
[i18n.de.settings.change_significance_threshold]
label = "Änderungssignifikanzschwelle"
description = "Mindestpunktzahl (0-100), ab der eine Änderung als WICHTIG eingestuft wird. Änderungen unterhalb werden als GERINGFÜGIG eingestuft."
# ─── Korean (한국어) ────────────────────────────────────────────────────
[i18n.ko]
@@ -629,3 +740,11 @@ description = "수집 스캔당 처리할 최대 소스 수"
[i18n.ko.settings.track_sentiment]
label = "감성 추적"
description = "시간에 따른 감성 추세 분석 및 추적"
[i18n.ko.settings.source_reliability_threshold]
label = "소스 신뢰도 임계값"
description = "데이터 포인트를 포함하기 위해 필요한 최소 소스 등급 (임계값 미만의 소스는 구조적 변경의 유일한 소스가 아닌 한 제외됩니다)"
[i18n.ko.settings.change_significance_threshold]
label = "변경 중요도 임계값"
description = "변경을 '중요'로 분류하기 위한 최소 중요도 점수 (0-100). 이 임계값 미만의 변경은 '경미'로 분류됩니다"
+69 -32
View File
@@ -150,45 +150,82 @@ site:sec.gov "[company]"
## Change Detection Methodology
### Snapshot Comparison
1. Store the current state of all entities as a JSON snapshot
2. On next collection cycle, compare new state against previous snapshot
3. Classify changes:
### Change Classification
| Change Type | Significance | Example |
|-------------|-------------|---------|
| Entity appeared | Varies | New competitor enters market |
| Entity disappeared | Important | Company goes quiet, product deprecated |
| Attribute changed | Critical-Minor | CEO changed (critical), address changed (minor) |
| New relation | Important | New partnership, acquisition, hiring |
| Relation removed | Important | Person left company, partnership ended |
| Sentiment shift | Important | Positive→Negative media coverage |
Every difference between the current snapshot and the previous one falls into exactly one category:
| Category | Definition | Examples |
|----------|-----------|---------|
| **Structural** | Entity appeared/disappeared, relationship added/removed | New competitor enters market, person left company, product deprecated, new partnership formed |
| **Content** | Attribute value changed on an existing entity | CEO changed, funding amount updated, version number bumped, pricing modified |
| **Metadata** | Supporting data changed but core fact is the same | New source confirms existing fact, confidence upgraded, last_seen timestamp refreshed |
### Cross-Source Deduplication
Before scoring, deduplicate overlapping data points:
1. **Normalize** entity names: strip legal suffixes (Inc, LLC, Corp), lowercase, expand common abbreviations
2. **Merge** when 2+ sources report the same fact about the same entity — keep highest confidence, list all source URLs
3. **Flag conflicts** when sources disagree on a fact (e.g., different funding amounts) — record both, mark as "conflicting — requires resolution"
### Significance Scoring Algorithm
Compute a numeric score (0-100) for each change:
### Significance Scoring
```
CRITICAL (immediate alert):
- Leadership change (CEO, CTO, board)
- Acquisition or merger
- Major funding round (>$10M)
- Product discontinuation
- Legal action or regulatory issue
Base score (by category):
Structural change = 60
Content change = 40
Metadata change = 5
IMPORTANT (include in next report):
- New product launch
- New partnership or integration
- Hiring surge (>5 roles)
- Pricing change
- Competitor move
- Major customer win/loss
Source reliability modifier (best source tier for this data point):
Tier 1 (official/primary) = +20
Tier 2 (institutional) = +10
Tier 3 (professional) = +5
Tier 4-5 (community/anon) = +0
MINOR (note in report):
- Blog post or press mention
- Minor update or patch
- Social media activity spike
- Conference appearance
- Job posting (individual)
Source freshness modifier (publication age):
Within 24 hours = +10
Within 7 days = +5
Within 30 days = +0
Older than 30 days = -10
Corroboration modifier:
Confirmed by 2+ independent sources = +10
Single source only = +0
Contradicted by another source = -15
Focus area relevance:
Directly matches configured focus_area = +10
Tangentially related = +0
Final score = clamp(base + reliability + freshness + corroboration + relevance, 0, 100)
```
### Alert Tier Mapping
Map the computed significance score to an action tier using `change_significance_threshold` (configurable, default 60):
```
Score >= 80 → CRITICAL (immediate alert via event_publish)
Examples: leadership change (CEO/CTO/CFO), acquisition or merger,
major funding round (>$10M), product discontinuation,
regulatory action, data breach
Score >= threshold → IMPORTANT (include in next report)
Examples: new product launch, new partnership, hiring surge (>5 roles),
pricing change, significant competitor move, major customer win/loss
Score < threshold → MINOR (note in report)
Examples: blog post, minor update or patch, conference appearance,
individual job posting, social media activity within normal range
```
### Source Reliability Filtering
Apply the configured `source_reliability_threshold` (default: tier_3) to filter low-quality data:
- **Discard** data points where ALL supporting sources fall below the threshold tier
- **Exception**: if a below-threshold source is the ONLY source for a structural change, keep it but downgrade confidence to "low" and flag for corroboration in the next cycle
---
## Sentiment Analysis Heuristics