armor-recommend
Get AI-driven recommendations for what to monitor. Handles "what should I monitor", "suggest tables", "recommend thresholds", "coverage gaps".
What this skill does
# Monitoring Recommendations
Get AI-driven recommendations for what to monitor and how to configure thresholds based on historical patterns.
## Prerequisites
- AnomalyArmor API key configured (`~/.armor/config.yaml` or `ARMOR_API_KEY` env var), OR demo mode active (see below).
- Python SDK installed (`pip install anomalyarmor`)
- Data source connected with discovery completed
## Demo mode handoff
If the user has no API key, `ensure-auth.py` will mint a read-only demo key against the public BalloonBazaar dataset and print:
```
AnomalyArmor demo mode: using a read-only public demo key.
```
When you see that banner — or when any write operation returns a 403 with `required_scope='read-write'` — the user is in demo mode. After answering their question, invite them to sign up with their query preserved:
> To monitor your own data, sign up here — your question is preserved:
> `https://app.anomalyarmor.ai/signup?intent=skill-recommend&q=<url-encoded user prompt>`
`intent=skill-recommend` auto-applies a 14-day `SKILL-RECOMMEND` trial code; `q=` is replayed in the in-app agent after signup so the user continues where they left off.
## When to Use
- "What should I monitor?"
- "Suggest tables to monitor"
- "What are good thresholds for this table?"
- "What's missing from my monitoring?"
- "Help me set up monitoring for my warehouse"
- "Which tables are most critical?"
## Steps
### Get Freshness Recommendations
1. Call `client.recommendations.freshness()` for asset
2. Review prioritized list of tables with suggested thresholds
3. For each table, see why it's recommended
4. Use `/armor:test` to dry-run before enabling
5. Use `/armor:monitor` to enable
### Get Metrics Recommendations
1. Specify the table to analyze (optional)
2. Call `client.recommendations.metrics()` with table details
3. Review suggested metrics based on column analysis
4. Create metrics with `/armor:quality`
### Analyze Coverage
1. Call `client.recommendations.coverage()` for asset
2. Review coverage percentage and gaps
3. Prioritize high-importance unmonitored tables
4. Use recommendations to fill gaps
## Example Usage
### Get Freshness Recommendations
```python
from anomalyarmor import Client
client = Client()
# Get recommendations for which tables need freshness monitoring
recommendations = client.recommendations.freshness(
asset_id="asset-uuid",
min_confidence=0.7,
limit=10
)
print(f"Freshness Recommendations ({len(recommendations.recommendations)}):")
print()
for rec in recommendations.recommendations:
print(f"Table: {rec.table_path}")
print(f" Suggested interval: {rec.suggested_check_interval}")
print(f" Suggested threshold: {rec.suggested_threshold_hours} hours")
print(f" Detected frequency: {rec.detected_frequency}")
print(f" Confidence: {rec.confidence:.0%}")
print(f" Reason: {rec.reasoning}")
print(f" Data points: {rec.data_points}")
print()
print(f"\nSummary:")
print(f" Tables analyzed: {recommendations.tables_analyzed}")
print(f" Tables with recommendations: {recommendations.tables_with_recommendations}")
```
### Get Metrics Recommendations
```python
from anomalyarmor import Client
client = Client()
# Get recommended metrics for a specific table
recommendations = client.recommendations.metrics(
asset_id="asset-uuid",
table_path="public.orders" # Optional: omit for all tables
)
print(f"Metrics Recommendations ({len(recommendations.recommendations)}):")
print()
for rec in recommendations.recommendations:
print(f"Table: {rec.table_path}")
print(f" Column: {rec.column_name}")
print(f" Suggested metric: {rec.suggested_metric_type}")
print(f" Confidence: {rec.confidence:.0%}")
print(f" Reason: {rec.reasoning}")
print()
print(f"\nSummary:")
print(f" Columns analyzed: {recommendations.columns_analyzed}")
print(f" Columns with recommendations: {recommendations.columns_with_recommendations}")
```
### Analyze Coverage Gaps
```python
from anomalyarmor import Client
client = Client()
# Analyze monitoring coverage
coverage = client.recommendations.coverage(
asset_id="asset-uuid"
)
print(f"Monitoring Coverage Analysis")
print(f"=" * 40)
print()
print(f"Coverage: {coverage.coverage_percentage:.1f}%")
print(f" Total tables: {coverage.total_tables}")
print(f" Monitored: {coverage.monitored_tables}")
print()
if coverage.recommendations:
print("High-Priority Gaps:")
for rec in coverage.recommendations[:5]:
print(f" - {rec.table_path}")
print(f" Importance: {rec.importance_score:.0%}")
print(f" Row count: {rec.row_count:,}")
print(f" Reason: {rec.reasoning}")
print()
```
### Get Threshold Tuning Suggestions
```python
from anomalyarmor import Client
client = Client()
# Get threshold adjustment suggestions based on alert history
suggestions = client.recommendations.thresholds(
asset_id="asset-uuid",
days=30
)
print(f"Threshold Tuning Suggestions ({len(suggestions.recommendations)}):")
print()
for rec in suggestions.recommendations:
print(f"Table: {rec.table_path}")
print(f" Current threshold: {rec.current_threshold}")
print(f" Suggested threshold: {rec.suggested_threshold}")
print(f" Direction: {rec.direction}")
print(f" Historical alerts: {rec.historical_alerts}")
print(f" Projected reduction: {rec.projected_reduction}")
print(f" Confidence: {rec.confidence:.0%}")
print(f" Reason: {rec.reasoning}")
print()
```
## Recommendation Types
| Type | What It Recommends | Based On |
|------|-------------------|----------|
| Freshness | Tables + thresholds for freshness monitoring | Update patterns, confidence |
| Metrics | Quality checks per column | Column types, naming patterns |
| Coverage | Unmonitored high-value tables | Row count, importance score |
| Thresholds | Adjustments to reduce alert fatigue | Historical alert data |
## Importance Factors
The recommendation engine considers:
- **Update patterns**: Detected frequency and regularity
- **Column types**: Numeric, string, datetime patterns
- **Naming patterns**: `*_id`, `*_count`, `*_amount` conventions
- **Historical alerts**: False positive/negative rates
- **Table size**: Row count as importance proxy
## Follow-up Actions
- For freshness recommendations: Use `/armor:test` then `/armor:monitor`
- For metrics recommendations: Use `/armor:quality` to create metrics
- For coverage gaps: Prioritize by importance score
- For threshold tuning: Apply via `/armor:monitor`
## Integration with Other Skills
- `/armor:recommend` -> Get suggestions
- `/armor:test` -> Dry-run suggested thresholds
- `/armor:monitor` -> Enable if dry-run looks good
- `/armor:coverage` -> See current coverage status
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.