
Security News
Anthropic Identifies Biased Reasoning and Recklessness as Drivers of Claude’s PyPI Attack
Anthropic found biased reasoning and recklessness drove Claude Mythos 5 to publish malware on PyPI and compromise a security vendor.
@sudosandwich/limps-headless
Advanced tools
limps extension for headless UI contract extraction, semantic analysis, and drift detection
limps extension for headless UI contract extraction, semantic analysis, and drift detection.
npm install @sudosandwich/limps-headless
Peer Dependencies: Requires @sudosandwich/limps@^2.0.0.
Example limps.config.json:
{
"extensions": ["@sudosandwich/limps-headless"]
}
None.
You can use the standalone CLI for local workflows. Run from your project directory so that analyze can resolve file paths (paths are relative to the current working directory):
cd /path/to/your/react-app
limps-headless list --version latest
limps-headless extract dialog
limps-headless analyze src/components/ui/button.tsx
limps-headless audit --files src/components/ui/button.tsx src/components/ui/select.tsx # full audit; output in .limps-headless/reports
limps-headless diff <from-version> --to <to-version> # e.g. diff 1.0.0 --to latest
limps-headless check-updates --refresh
Audit output: limps-headless audit writes to .limps-headless/reports/ (override with -o): audit-report.md, audit-report.json, analysis.json, diff.json, updates.json.
Pass --json to any command for raw JSON output.
Tool reference: see docs/tools.md for detailed schemas and examples.
headless_list_primitivesList all available Radix UI primitives with package names and descriptions.
Input
{
"version": "latest",
"provider": "radix"
}
Output
{
"version": "1.1.2",
"primitives": [
{
"name": "dialog",
"package": "@radix-ui/react-dialog",
"description": "A modal dialog overlay"
},
{
"name": "popover",
"package": "@radix-ui/react-popover",
"description": "A popup that appears from a trigger"
}
]
}
headless_extract_primitiveExtract the behavioral contract for a single Radix primitive, including sub-components, prop metadata, and semantic classification.
Input
{
"primitive": "dialog",
"version": "latest",
"provider": "radix"
}
Output
{
"primitive": "Dialog",
"package": "@radix-ui/react-dialog",
"version": "1.1.2",
"behavior": {
"statePattern": "binary",
"compositionPattern": "compound",
"renderingPattern": "portal-conditional"
},
"subComponents": [
{
"name": "Root",
"props": [
{
"name": "open",
"type": "boolean",
"required": false,
"category": "state"
},
{
"name": "onOpenChange",
"type": "(open: boolean) => void",
"required": false,
"category": "event"
}
]
},
{
"name": "Trigger",
"props": [
{
"name": "asChild",
"type": "boolean",
"required": false,
"category": "composition"
}
]
}
],
"similarTo": ["AlertDialog", "Popover"],
"disambiguationRule": "Dialog has modal=true by default; AlertDialog requires action confirmation"
}
headless_analyze_componentAnalyze a local component file for legacy Radix matches to inform Base UI migration.
Input
{
"filePath": "src/components/MyDialog.tsx",
"radixVersion": "latest",
"threshold": 40,
"provider": "radix"
}
headless_diff_versionsPurpose: Answer “what will break or need attention if I upgrade Radix?” by comparing two Radix versions (not your code vs Radix). It diffs the public API contracts (props, subcomponents) of primitives between a from-version (e.g. your current) and a to-version (e.g. latest). Lists breaking changes, warnings, and info. Input: fromVersion, toVersion.
Input
{
"fromVersion": "1.0.0",
"toVersion": "latest",
"breakingOnly": false,
"provider": "radix"
}
headless_check_updatesCheck for a newer Radix version and show changes since the last check.
Input
{
"refreshCache": false,
"provider": "radix"
}
This package re-exports its core types, signatures, cache helpers, and tool definitions from src/index.ts.
ExtractedPrimitive — Raw extraction from Radix .d.ts files.BehaviorSignature — Semantic behavioral contract used for comparisons.PropDefinition — Prop metadata with semantic classification flags.SubComponentDefinition — Sub-component structure and prop list.RawProp — Raw prop before classification.PrimitiveInfo — Info used by primitive listings.PackageInfo — npm registry package metadata.StatePattern / CompositionPattern / RenderingPattern — Behavioral pattern enums.cache — File-based cache helpers for extracted data and signatures.signatures — Behavior signature generation utilities.providers — Provider registry for component libraries.tools — MCP tool definitions (headless_list_primitives, headless_extract_primitive, headless_analyze_component, headless_diff_versions, headless_check_updates).limps supports extension-specific config via a top-level key in limps.config.json.
{
"extensions": ["@sudosandwich/limps-headless"],
"limps-headless": {
"cacheDir": "~/Library/Application Support/limps-headless"
}
}
Options
cacheDir (optional): Base directory for the Radix cache. Defaults to ~/.limps-headless/cache.Input
{
"version": "1.1.2"
}
Output
{
"version": "1.1.2",
"primitives": [
{
"name": "dialog",
"package": "@radix-ui/react-dialog",
"description": "A modal dialog overlay"
},
{
"name": "popover",
"package": "@radix-ui/react-popover",
"description": "A popup that appears from a trigger"
}
]
}
Input
{
"primitive": "dialog",
"provider": "radix"
}
Output
{
"primitive": "Dialog",
"package": "@radix-ui/react-dialog",
"version": "1.1.2",
"behavior": {
"statePattern": "binary",
"compositionPattern": "compound",
"renderingPattern": "portal-conditional"
},
"subComponents": [
{
"name": "Root",
"props": [
{
"name": "open",
"type": "boolean",
"required": false,
"category": "state"
},
{
"name": "onOpenChange",
"type": "(open: boolean) => void",
"required": false,
"category": "event"
}
]
},
{
"name": "Trigger",
"props": [
{
"name": "asChild",
"type": "boolean",
"required": false,
"category": "composition"
}
]
}
],
"similarTo": ["AlertDialog", "Popover"],
"disambiguationRule": "Dialog has modal=true by default; AlertDialog requires action confirmation"
}
"Type definitions not found"
We fetch types from unpkg at dist/index.d.ts (individual packages) or dist/<primitive>.d.ts (unified). The error now includes the URL(s) tried, HTTP status, and a link to unpkg so you can confirm the package layout. Common causes:
radix-ui package is only used for 1.4.3+.limps-headless check-updates --refresh to refresh cache and prefer newer versions.Errors are descriptive: they list the paths and status codes tried, and a browse link to the package on unpkg.
radix-ui package is available for a version, the tools may return radix-ui as the package name instead of individual @radix-ui/react-* packages.MIT
FAQs
limps extension for headless UI contract extraction, semantic analysis, and drift detection
We found that @sudosandwich/limps-headless demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
Anthropic found biased reasoning and recklessness drove Claude Mythos 5 to publish malware on PyPI and compromise a security vendor.

Research
/Security News
Malicious Chrome and Firefox extensions target Axiom Trade and Padre users, stealing session tokens and wallet data.

Security News
GPT-6 Astra hits 100% on ExploitBench and finds zero-days autonomously, while independent tests reveal scope violations and monitoring gaps.