From anomalyarmor-agents
Profile tables and columns for statistics and distributions. Handles "profile this table", "show column stats", "data distribution", "table statistics", "cardinality analysis".
npx claudepluginhub anomalyarmor/agents --plugin armorThis skill uses the workspace's default tool permissions.
Analyze table and column statistics, distributions, and data characteristics.
Conducts multi-round deep research on GitHub repos via API and web searches, generating markdown reports with executive summaries, timelines, metrics, and Mermaid diagrams.
Dynamically discovers and combines enabled skills into cohesive, unexpected delightful experiences like interactive HTML or themed artifacts. Activates on 'surprise me', inspiration, or boredom cues.
Generates images from structured JSON prompts via Python script execution. Supports reference images and aspect ratios for characters, scenes, products, visuals.
Analyze table and column statistics, distributions, and data characteristics.
~/.armor/config.yaml or ARMOR_API_KEY env var)pip install anomalyarmor)from anomalyarmor import Client
client = Client()
# Get metrics summary
summary = client.metrics.summary("asset-uuid")
print(f"Total Metrics: {summary.total_metrics}")
print(f"Passing: {summary.passing_count}")
print(f"Failing: {summary.failing_count}")
# List all metrics
metrics = client.metrics.list("asset-uuid")
print("\nMetrics:")
for m in metrics:
print(f" {m.metric_type}: {m.name}")
print(f" Status: {m.status}")
if m.last_value is not None:
print(f" Last Value: {m.last_value}")
# List column-level metrics
column_metrics = client.metrics.list("asset-uuid", metric_type="null_rate")
print("Null Rates by Column:")
for m in column_metrics:
print(f" {m.column_name}: {m.last_value}%")
# Get distinct counts
distinct_metrics = client.metrics.list("asset-uuid", metric_type="distinct_count")
print("\nDistinct Counts:")
for m in distinct_metrics:
print(f" {m.column_name}: {m.last_value} unique values")
# Get metric snapshots (historical values)
snapshots = client.metrics.snapshots(
asset_id="asset-uuid",
metric_id="metric-uuid",
limit=30
)
print("Row Count Trend (last 30 days):")
for snapshot in snapshots:
print(f" {snapshot.captured_at}: {snapshot.value}")
# Add row count metric
row_metric = client.metrics.create(
asset_id="asset-uuid",
metric_type="row_count",
table_path="public.orders",
capture_interval="daily"
)
print(f"Created row count metric: {row_metric.id}")
# Add null rate metric for a column
null_metric = client.metrics.create(
asset_id="asset-uuid",
metric_type="null_rate",
table_path="public.orders",
column_name="customer_id",
capture_interval="daily"
)
print(f"Created null rate metric: {null_metric.id}")
# Add distinct count metric
distinct_metric = client.metrics.create(
asset_id="asset-uuid",
metric_type="distinct_count",
table_path="public.orders",
column_name="status",
capture_interval="daily"
)
print(f"Created distinct count metric: {distinct_metric.id}")
# Capture metrics now (don't wait for schedule)
result = client.metrics.capture("asset-uuid", "metric-uuid")
print(f"Captured value: {result['value']}")
print(f"Captured at: {result['captured_at']}")
=== Table Profile: warehouse.public.orders ===
Summary:
Total Metrics: 8
Passing: 7
Failing: 1
Table Metrics:
row_count: 1,234,567 rows
freshness: Updated 2 hours ago
Column Statistics:
order_id:
Null Rate: 0%
Distinct Count: 1,234,567 (100% unique)
customer_id:
Null Rate: 0.1%
Distinct Count: 45,678
status:
Null Rate: 0%
Distinct Count: 5 (enum-like)
created_at:
Null Rate: 0%
Min: 2023-01-01
Max: 2026-01-31
Row Count Trend (7 days):
Jan 25: 1,200,000
Jan 26: 1,210,000
Jan 27: 1,220,000
Jan 28: 1,225,000
Jan 29: 1,230,000
Jan 30: 1,232,000
Jan 31: 1,234,567
/armor:quality/armor:investigate/armor:alerts/armor:lineage