{"id":"7e422d22-1cd9-4a7e-bd70-703901e9927e","entityType":"agent","slug":"clawhub-occupythemilkyway-argus-lite","name":"Argus Lite — Code Scanner (Free)","canonicalUrl":"https://www.xpersona.co/agent/clawhub-occupythemilkyway-argus-lite","canonicalPath":"/agent/clawhub-occupythemilkyway-argus-lite","generatedAt":"2026-10-11T20:59:03.749Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T16:03:25.664Z","emptyReason":null},"description":"Argus Lite â Code Scanner (Free). Scan a single Python file for the top 10 most critical security and bug patterns. A free preview of what Argus Pro does f... Skill: Argus Lite — Code Scanner (Free) Owner: occupythemilkyway Summary: Argus Lite â Code Scanner (Free). Scan a single Python file for the top 10 most critical security and bug patterns. A free preview of what Argus Pro does f... Tags: argus:1.0.0, code-review:1.0.0, debugging:1.0.0, free:1.0.0, latest:1.0.4, linter:1.0.0, lite:1.0.0, python:1.0.0, security:1.0.0 Version history: v1.0.4 | 2026-05-24T04:32:18.929","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s1757zbbgb226m951fdfmj4s6s860nkn:argus-lite","sourceUrl":"https://clawhub.ai/occupythemilkyway/argus-lite","homepage":"https://clawhub.ai/occupythemilkyway/skills/argus-lite","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/occupythemilkyway/argus-lite","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/occupythemilkyway/skills/argus-lite","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Argus Lite â Code Scanner (Free). Scan a single Python file for the top 10 most critical security and bug patterns. A free preview of what Argus Pro does f..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T16:03:25.664Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T16:03:25.664Z","emptyReason":null},"stars":null,"forks":null,"downloads":1032,"packageName":null,"latestVersion":"1.0.4","tractionLabel":"1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T16:03:25.651Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T16:03:25.664Z","lastCrawledAt":"2026-10-11T16:03:25.651Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T16:03:25.651Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.4","createdAt":"2026-05-24T04:32:18.929Z","changelog":"- Updated upgrade instructions with a new Argus Pro purchase link. - Added a bundle offer for all 5 Pro skills at a discounted price. - No code or functional changes.","fileCount":3,"zipByteSize":4607},{"version":"1.0.1","createdAt":"2026-05-17T00:15:00.973Z","changelog":"Version 1.0.1 - Version bump from 1.0.0 to 1.0.1. - No file or feature changes; content remains identical.","fileCount":2,"zipByteSize":3376},{"version":"1.0.0","createdAt":"2026-05-10T16:09:48.255Z","changelog":"Initial Lite release: 1 file, 10 critical rules, Python only, Pro upsell","fileCount":2,"zipByteSize":3377}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1757zbbgb226m951fdfmj4s6s860nkn:argus-lite","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-occupythemilkyway-argus-lite/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-occupythemilkyway-argus-lite/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-occupythemilkyway-argus-lite/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-occupythemilkyway-argus-lite/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-occupythemilkyway-argus-lite/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-occupythemilkyway-argus-lite/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T20:59:03.749Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-occupythemilkyway-argus-lite/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-occupythemilkyway-argus-lite/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-occupythemilkyway-argus-lite/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-occupythemilkyway-argus-lite/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T16:03:25.664Z","emptyReason":null},"readme":"Skill: Argus Lite — Code Scanner (Free)\n\nOwner: occupythemilkyway\n\nSummary: Argus Lite â Code Scanner (Free). Scan a single Python file for the top 10 most critical security and bug patterns. A free preview of what Argus Pro does f...\n\nTags: argus:1.0.0, code-review:1.0.0, debugging:1.0.0, free:1.0.0, latest:1.0.4, linter:1.0.0, lite:1.0.0, python:1.0.0, security:1.0.0\n\nVersion history:\n\nv1.0.4 | 2026-05-24T04:32:18.929Z | user\n\n- Updated upgrade instructions with a new Argus Pro purchase link.\n- Added a bundle offer for all 5 Pro skills at a discounted price.\n- No code or functional changes.\n\nv1.0.1 | 2026-05-17T00:15:00.973Z | user\n\nVersion 1.0.1\n\n- Version bump from 1.0.0 to 1.0.1.\n- No file or feature changes; content remains identical.\n\nv1.0.0 | 2026-05-10T16:09:48.255Z | user\n\nInitial Lite release: 1 file, 10 critical rules, Python only, Pro upsell\n\nArchive index:\n\nArchive v1.0.4: 3 files, 4607 bytes\n\nFiles: skill-card.md (2100b), SKILL.md (7162b), _meta.json (129b)\n\nFile v1.0.4:SKILL.md\n\n---\nname: argus-lite\ndescription: \"Argus Lite â Code Scanner (Free). Scan a single Python file for the top 10 most critical security and bug patterns. A free preview of what Argus Pro does for your full codebase.\"\nversion: \"1.0.4\"\nmetadata:\n  openclaw:\n    requires:\n      env: []\n      bins: [python3, pip3]\n    primaryEnv: \"SOURCE_PATH\"\n    homepage: https://clawhub.ai/occupythemilkyway/argus-lite\n    emoji: \"ð\"\n    tags: [debugging, security, code-review, python, free, lite, argus, linter]\n    envVars:\n      - name: SOURCE_PATH\n        required: false\n        description: \"Path to a single Python file to scan (Lite: one file at a time)\"\n        default: \".\"\n---\n\n# Argus Lite â Free Code Scanner\n\nScan one Python file against the top 10 critical security and bug rules.\n\n## Free vs Pro\n\n| Feature | Argus Lite (Free) | Argus Pro |\n|---------|------------------|-----------|\n| Files | **1 file only** | Full directory recursion |\n| Rules | **10 (critical/high)** | 40+ incl. performance |\n| Languages | Python only | Python + JavaScript |\n| JSON output | â | â CI-ready |\n| CI exit codes | â | â FAIL_ON_CRITICAL |\n| Ignore paths | â | â |\n| Deduplication | Basic | Smart cross-file |\n\nð **Upgrade:** `openclaw skills install argus-pro` â key at **ko-fi.com/s/8b27346505**\n\nð° **Bundle deal:** all 5 Pro skills for **$29** â **ko-fi.com/s/7625accf3f** (save $16)\n\n---\n\n## Step 1 â Install\n\n```bash\npip3 install rich --break-system-packages --quiet\n```\n\n---\n\n## Step 2 â Quick security scan (Lite)\n\n```python\nimport os, re\nfrom pathlib import Path\nfrom rich.console import Console\nfrom rich.table import Table\nfrom rich.panel import Panel\nfrom rich import box\n\nconsole = Console()\n\nSRC_PATH = os.environ.get(\"SOURCE_PATH\",\".\").strip()\nsrc      = Path(SRC_PATH)\n\n# Find a single Python file to scan\nif src.is_dir():\n    py_files = list(src.rglob(\"*.py\"))\n    if not py_files:\n        console.print(f\"[yellow]No .py files found in {SRC_PATH}[/yellow]\")\n        raise SystemExit(0)\n    target = py_files[0]\n    if len(py_files) > 1:\n        console.print(f\"[yellow]â¹ï¸  Lite scans 1 file at a time. Scanning: {target}\\n   (Upgrade to Pro to scan all {len(py_files)} files)[/yellow]\\n\")\nelif src.is_file():\n    target = src\nelse:\n    console.print(f\"[red]â Not found: {SRC_PATH}[/red]\")\n    raise SystemExit(1)\n\n# Top 10 critical/high rules only (Lite)\nRULES = [\n    (\"PY001\",\"critical\",\"security\", r\"\\beval\\s*\\(\",                           \"eval() executes arbitrary code â critical risk.\",         \"Use ast.literal_eval() for safe evaluation.\"),\n    (\"PY002\",\"critical\",\"security\", r\"\\bexec\\s*\\(\",                           \"exec() executes arbitrary strings as Python code.\",       \"Refactor to eliminate dynamic execution.\"),\n    (\"PY003\",\"critical\",\"security\", r\"\\bpickle\\.loads?\\s*\\(\",                 \"pickle.load() with untrusted data â code execution.\",     \"Use json.loads() instead.\"),\n    (\"PY004\",\"high\",\"security\",     r\"(?i)(password|secret|api_key|token)\\s*=\\s*['\\\"].+['\\\"]\",\"Hardcoded credential detected.\",          \"Move to environment variables.\"),\n    (\"PY005\",\"high\",\"security\",     r\"shell\\s*=\\s*True\",                      \"shell=True in subprocess â command injection risk.\",      \"Use list arguments: subprocess.run(['cmd','arg'])\"),\n    (\"PY006\",\"high\",\"security\",     r\"\\.execute\\s*\\(.*(%|\\.format\\(|f['\\\"])\", \"Potential SQL injection via string formatting.\",          \"Use parameterised queries: cursor.execute(sql,(val,))\"),\n    (\"PY009\",\"medium\",\"bug\",        r\"except\\s*:\",                            \"Bare except catches SystemExit and KeyboardInterrupt.\",   \"Use: except Exception: or catch specific types.\"),\n    (\"PY016\",\"medium\",\"security\",   r\"hashlib\\.(md5|sha1)\\s*\\(\",              \"MD5/SHA1 are cryptographically broken.\",                  \"Use hashlib.sha256() or bcrypt for passwords.\"),\n    (\"PY007\",\"medium\",\"bug\",        r\"def\\s+\\w+\\s*\\([^)]*=\\s*\\[\\s*\\]\",      \"Mutable default argument [] â shared across all calls.\",  \"Use None as default; init list inside function.\"),\n    (\"PY017\",\"high\",\"security\",     r\"\\brandom\\.(random|randint|choice)\\s*\\(\",\"random module is not cryptographically secure.\",          \"Use secrets module for security-sensitive values.\"),\n]\n\nconsole.print(Panel.fit(\n    f\"[bold red]ð Argus Lite â Quick Scan[/bold red]\\n\"\n    f\"File: [yellow]{target}[/yellow]\\n\"\n    f\"[dim]Lite: 1 file, 10 rules â upgrade to Pro for full codebase scanning[/dim]\",\n    border_style=\"red\"\n))\n\nfindings = []\ntry:\n    source = target.read_text(encoding=\"utf-8\", errors=\"replace\")\n    for lineno, line in enumerate(source.splitlines(), 1):\n        for rule_id, sev, category, pattern, message, fix in RULES:\n            if re.search(pattern, line):\n                findings.append({\"id\":rule_id,\"severity\":sev,\"category\":category,\n                                 \"line\":lineno,\"code\":line.strip()[:80],\"message\":message,\"fix\":fix})\nexcept Exception as e:\n    console.print(f\"[red]Error reading file: {e}[/red]\")\n    raise SystemExit(1)\n\n# Deduplicate\nseen, unique = set(), []\nfor f in findings:\n    key = (f[\"id\"],f[\"line\"])\n    if key not in seen:\n        seen.add(key)\n        unique.append(f)\n\nSEV_COLOUR = {\"critical\":\"red\",\"high\":\"orange3\",\"medium\":\"yellow\",\"low\":\"dim\"}\n\nif not unique:\n    console.print(Panel(\n        f\"[green]â No issues in {RULES.__len__()} rule scan![/green]\\n\"\n        f\"[dim]Pro scans 40+ rules including performance patterns â upgrade for full coverage.[/dim]\",\n        border_style=\"green\"\n    ))\nelse:\n    tbl = Table(title=f\"ð {len(unique)} Finding(s) in {target.name}\", box=box.ROUNDED, border_style=\"red\")\n    tbl.add_column(\"ID\",      width=7,  style=\"dim\")\n    tbl.add_column(\"Sev\",     width=9)\n    tbl.add_column(\"Line\",    width=6,  justify=\"right\", style=\"yellow\")\n    tbl.add_column(\"Issue\",   width=50)\n    for fi in unique:\n        sc = SEV_COLOUR.get(fi[\"severity\"],\"white\")\n        tbl.add_row(fi[\"id\"],f\"[{sc}]{fi['severity'].upper()}[/{sc}]\",str(fi[\"line\"]),fi[\"message\"][:48])\n    console.print(tbl)\n\n    for fi in [f for f in unique if f[\"severity\"] in (\"critical\",\"high\")]:\n        sc = SEV_COLOUR.get(fi[\"severity\"],\"white\")\n        console.print(Panel(\n            f\"[dim]Line {fi['line']}:[/dim] [italic]{fi['code']}[/italic]\\n\\n\"\n            f\"[white]{fi['message']}[/white]\\n\\n\"\n            f\"[green]Fix:[/green] {fi['fix']}\",\n            title=f\"[{sc}]{fi['severity'].upper()}[/{sc}] â {fi['id']}\",\n            border_style=sc\n        ))\n\nconsole.print()\nconsole.print(Panel(\n    f\"[bold yellow]ð Want more?[/bold yellow]\\n\\n\"\n    f\"Argus Pro scans [bold]your entire codebase[/bold] with [bold]40+ rules[/bold] across Python and JavaScript â \"\n    f\"including performance issues, memory leaks, and N+1 query patterns. \"\n    f\"Plus CI-ready JSON output and FAIL_ON_CRITICAL exit codes.\\n\\n\"\n    f\"[bold cyan]openclaw skills install argus-pro[/bold cyan]\\n\"\n    f\"Get your key â [bold]ko-fi.com/s/8b27346505[/bold]\",\n    title=\"Upgrade to Argus Pro\",\n    border_style=\"cyan\"\n))\n```\n\nFile v1.0.4:_meta.json\n\n{\n  \"ownerId\": \"kn7474wrtsjp988869sw7mygz1860n2v\",\n  \"slug\": \"argus-lite\",\n  \"version\": \"1.0.4\",\n  \"publishedAt\": 1779597138929\n}\n\nFile v1.0.4:skill-card.md\n\n## Description:\n\nArgus Lite scans a single Python file for ten critical and high-priority security and bug patterns.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[occupythemilkyway](https://clawhub.ai/user/occupythemilkyway)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers use Argus Lite to run a lightweight review of one Python file for common security issues and bug patterns before deeper review or scanning.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The security review verdict is suspicious because the install step and runtime behavior need review before use.\n\nMitigation: Review the skill before installing, run it in a virtual environment, and pin or verify the rich dependency.\n\nRisk: The default SOURCE_PATH value can scan the first Python file found from the current directory instead of an explicit target.\n\nMitigation: Set SOURCE_PATH to an explicit Python file before running the scan.\n\nRisk: The skill includes an upgrade and payment prompt that is advertising rather than scan output.\n\nMitigation: Treat Pro install and purchase links as promotional content and separate them from security findings.\n\n## Reference(s):\n\n- [ClawHub listing](https://clawhub.ai/occupythemilkyway/argus-lite)\n- [ClawHub skill page](https://clawhub.ai/occupythemilkyway/skills/argus-lite)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Shell commands, Code, Guidance]\n\n**Output Format:** [Markdown instructions with bash and Python code blocks; terminal text and table scan results when executed]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires python3, pip3, and the rich Python package; SOURCE_PATH selects the Python file or directory to scan.]\n\n## Skill Version(s):\n\n1.0.4 (source: frontmatter and server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.1: 2 files, 3376 bytes\n\nFiles: SKILL.md (7071b), _meta.json (129b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: argus-lite\ndescription: \"Argus Lite â Code Scanner (Free). Scan a single Python file for the top 10 most critical security and bug patterns. A free preview of what Argus Pro does for your full codebase.\"\nversion: \"1.0.1\"\nmetadata:\n  openclaw:\n    requires:\n      env: []\n      bins: [python3, pip3]\n    primaryEnv: \"SOURCE_PATH\"\n    homepage: https://clawhub.ai/occupythemilkyway/argus-lite\n    emoji: \"ð\"\n    tags: [debugging, security, code-review, python, free, lite, argus, linter]\n    envVars:\n      - name: SOURCE_PATH\n        required: false\n        description: \"Path to a single Python file to scan (Lite: one file at a time)\"\n        default: \".\"\n---\n\n# Argus Lite â Free Code Scanner\n\nScan one Python file against the top 10 critical security and bug rules.\n\n## Free vs Pro\n\n| Feature | Argus Lite (Free) | Argus Pro |\n|---------|------------------|-----------|\n| Files | **1 file only** | Full directory recursion |\n| Rules | **10 (critical/high)** | 40+ incl. performance |\n| Languages | Python only | Python + JavaScript |\n| JSON output | â | â CI-ready |\n| CI exit codes | â | â FAIL_ON_CRITICAL |\n| Ignore paths | â | â |\n| Deduplication | Basic | Smart cross-file |\n\nð **Upgrade:** `openclaw skills install argus-pro` â key at **ko-fi.com/occupythemilkyway**\n\n---\n\n## Step 1 â Install\n\n```bash\npip3 install rich --break-system-packages --quiet\n```\n\n---\n\n## Step 2 â Quick security scan (Lite)\n\n```python\nimport os, re\nfrom pathlib import Path\nfrom rich.console import Console\nfrom rich.table import Table\nfrom rich.panel import Panel\nfrom rich import box\n\nconsole = Console()\n\nSRC_PATH = os.environ.get(\"SOURCE_PATH\",\".\").strip()\nsrc      = Path(SRC_PATH)\n\n# Find a single Python file to scan\nif src.is_dir():\n    py_files = list(src.rglob(\"*.py\"))\n    if not py_files:\n        console.print(f\"[yellow]No .py files found in {SRC_PATH}[/yellow]\")\n        raise SystemExit(0)\n    target = py_files[0]\n    if len(py_files) > 1:\n        console.print(f\"[yellow]â¹ï¸  Lite scans 1 file at a time. Scanning: {target}\\n   (Upgrade to Pro to scan all {len(py_files)} files)[/yellow]\\n\")\nelif src.is_file():\n    target = src\nelse:\n    console.print(f\"[red]â Not found: {SRC_PATH}[/red]\")\n    raise SystemExit(1)\n\n# Top 10 critical/high rules only (Lite)\nRULES = [\n    (\"PY001\",\"critical\",\"security\", r\"\\beval\\s*\\(\",                           \"eval() executes arbitrary code â critical risk.\",         \"Use ast.literal_eval() for safe evaluation.\"),\n    (\"PY002\",\"critical\",\"security\", r\"\\bexec\\s*\\(\",                           \"exec() executes arbitrary strings as Python code.\",       \"Refactor to eliminate dynamic execution.\"),\n    (\"PY003\",\"critical\",\"security\", r\"\\bpickle\\.loads?\\s*\\(\",                 \"pickle.load() with untrusted data â code execution.\",     \"Use json.loads() instead.\"),\n    (\"PY004\",\"high\",\"security\",     r\"(?i)(password|secret|api_key|token)\\s*=\\s*['\\\"].+['\\\"]\",\"Hardcoded credential detected.\",          \"Move to environment variables.\"),\n    (\"PY005\",\"high\",\"security\",     r\"shell\\s*=\\s*True\",                      \"shell=True in subprocess â command injection risk.\",      \"Use list arguments: subprocess.run(['cmd','arg'])\"),\n    (\"PY006\",\"high\",\"security\",     r\"\\.execute\\s*\\(.*(%|\\.format\\(|f['\\\"])\", \"Potential SQL injection via string formatting.\",          \"Use parameterised queries: cursor.execute(sql,(val,))\"),\n    (\"PY009\",\"medium\",\"bug\",        r\"except\\s*:\",                            \"Bare except catches SystemExit and KeyboardInterrupt.\",   \"Use: except Exception: or catch specific types.\"),\n    (\"PY016\",\"medium\",\"security\",   r\"hashlib\\.(md5|sha1)\\s*\\(\",              \"MD5/SHA1 are cryptographically broken.\",                  \"Use hashlib.sha256() or bcrypt for passwords.\"),\n    (\"PY007\",\"medium\",\"bug\",        r\"def\\s+\\w+\\s*\\([^)]*=\\s*\\[\\s*\\]\",      \"Mutable default argument [] â shared across all calls.\",  \"Use None as default; init list inside function.\"),\n    (\"PY017\",\"high\",\"security\",     r\"\\brandom\\.(random|randint|choice)\\s*\\(\",\"random module is not cryptographically secure.\",          \"Use secrets module for security-sensitive values.\"),\n]\n\nconsole.print(Panel.fit(\n    f\"[bold red]ð Argus Lite â Quick Scan[/bold red]\\n\"\n    f\"File: [yellow]{target}[/yellow]\\n\"\n    f\"[dim]Lite: 1 file, 10 rules â upgrade to Pro for full codebase scanning[/dim]\",\n    border_style=\"red\"\n))\n\nfindings = []\ntry:\n    source = target.read_text(encoding=\"utf-8\", errors=\"replace\")\n    for lineno, line in enumerate(source.splitlines(), 1):\n        for rule_id, sev, category, pattern, message, fix in RULES:\n            if re.search(pattern, line):\n                findings.append({\"id\":rule_id,\"severity\":sev,\"category\":category,\n                                 \"line\":lineno,\"code\":line.strip()[:80],\"message\":message,\"fix\":fix})\nexcept Exception as e:\n    console.print(f\"[red]Error reading file: {e}[/red]\")\n    raise SystemExit(1)\n\n# Deduplicate\nseen, unique = set(), []\nfor f in findings:\n    key = (f[\"id\"],f[\"line\"])\n    if key not in seen:\n        seen.add(key)\n        unique.append(f)\n\nSEV_COLOUR = {\"critical\":\"red\",\"high\":\"orange3\",\"medium\":\"yellow\",\"low\":\"dim\"}\n\nif not unique:\n    console.print(Panel(\n        f\"[green]â No issues in {RULES.__len__()} rule scan![/green]\\n\"\n        f\"[dim]Pro scans 40+ rules including performance patterns â upgrade for full coverage.[/dim]\",\n        border_style=\"green\"\n    ))\nelse:\n    tbl = Table(title=f\"ð {len(unique)} Finding(s) in {target.name}\", box=box.ROUNDED, border_style=\"red\")\n    tbl.add_column(\"ID\",      width=7,  style=\"dim\")\n    tbl.add_column(\"Sev\",     width=9)\n    tbl.add_column(\"Line\",    width=6,  justify=\"right\", style=\"yellow\")\n    tbl.add_column(\"Issue\",   width=50)\n    for fi in unique:\n        sc = SEV_COLOUR.get(fi[\"severity\"],\"white\")\n        tbl.add_row(fi[\"id\"],f\"[{sc}]{fi['severity'].upper()}[/{sc}]\",str(fi[\"line\"]),fi[\"message\"][:48])\n    console.print(tbl)\n\n    for fi in [f for f in unique if f[\"severity\"] in (\"critical\",\"high\")]:\n        sc = SEV_COLOUR.get(fi[\"severity\"],\"white\")\n        console.print(Panel(\n            f\"[dim]Line {fi['line']}:[/dim] [italic]{fi['code']}[/italic]\\n\\n\"\n            f\"[white]{fi['message']}[/white]\\n\\n\"\n            f\"[green]Fix:[/green] {fi['fix']}\",\n            title=f\"[{sc}]{fi['severity'].upper()}[/{sc}] â {fi['id']}\",\n            border_style=sc\n        ))\n\nconsole.print()\nconsole.print(Panel(\n    f\"[bold yellow]ð Want more?[/bold yellow]\\n\\n\"\n    f\"Argus Pro scans [bold]your entire codebase[/bold] with [bold]40+ rules[/bold] across Python and JavaScript â \"\n    f\"including performance issues, memory leaks, and N+1 query patterns. \"\n    f\"Plus CI-ready JSON output and FAIL_ON_CRITICAL exit codes.\\n\\n\"\n    f\"[bold cyan]openclaw skills install argus-pro[/bold cyan]\\n\"\n    f\"Get your key â [bold]ko-fi.com/occupythemilkyway[/bold]\",\n    title=\"Upgrade to Argus Pro\",\n    border_style=\"cyan\"\n))\n```\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn7474wrtsjp988869sw7mygz1860n2v\",\n  \"slug\": \"argus-lite\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1778976900973\n}\n\nArchive v1.0.0: 2 files, 3377 bytes\n\nFiles: SKILL.md (7071b), _meta.json (129b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: argus-lite\ndescription: \"Argus Lite â Code Scanner (Free). Scan a single Python file for the top 10 most critical security and bug patterns. A free preview of what Argus Pro does for your full codebase.\"\nversion: \"1.0.0\"\nmetadata:\n  openclaw:\n    requires:\n      env: []\n      bins: [python3, pip3]\n    primaryEnv: \"SOURCE_PATH\"\n    homepage: https://clawhub.ai/occupythemilkyway/argus-lite\n    emoji: \"ð\"\n    tags: [debugging, security, code-review, python, free, lite, argus, linter]\n    envVars:\n      - name: SOURCE_PATH\n        required: false\n        description: \"Path to a single Python file to scan (Lite: one file at a time)\"\n        default: \".\"\n---\n\n# Argus Lite â Free Code Scanner\n\nScan one Python file against the top 10 critical security and bug rules.\n\n## Free vs Pro\n\n| Feature | Argus Lite (Free) | Argus Pro |\n|---------|------------------|-----------|\n| Files | **1 file only** | Full directory recursion |\n| Rules | **10 (critical/high)** | 40+ incl. performance |\n| Languages | Python only | Python + JavaScript |\n| JSON output | â | â CI-ready |\n| CI exit codes | â | â FAIL_ON_CRITICAL |\n| Ignore paths | â | â |\n| Deduplication | Basic | Smart cross-file |\n\nð **Upgrade:** `openclaw skills install argus-pro` â key at **ko-fi.com/occupythemilkyway**\n\n---\n\n## Step 1 â Install\n\n```bash\npip3 install rich --break-system-packages --quiet\n```\n\n---\n\n## Step 2 â Quick security scan (Lite)\n\n```python\nimport os, re\nfrom pathlib import Path\nfrom rich.console import Console\nfrom rich.table import Table\nfrom rich.panel import Panel\nfrom rich import box\n\nconsole = Console()\n\nSRC_PATH = os.environ.get(\"SOURCE_PATH\",\".\").strip()\nsrc      = Path(SRC_PATH)\n\n# Find a single Python file to scan\nif src.is_dir():\n    py_files = list(src.rglob(\"*.py\"))\n    if not py_files:\n        console.print(f\"[yellow]No .py files found in {SRC_PATH}[/yellow]\")\n        raise SystemExit(0)\n    target = py_files[0]\n    if len(py_files) > 1:\n        console.print(f\"[yellow]â¹ï¸  Lite scans 1 file at a time. Scanning: {target}\\n   (Upgrade to Pro to scan all {len(py_files)} files)[/yellow]\\n\")\nelif src.is_file():\n    target = src\nelse:\n    console.print(f\"[red]â Not found: {SRC_PATH}[/red]\")\n    raise SystemExit(1)\n\n# Top 10 critical/high rules only (Lite)\nRULES = [\n    (\"PY001\",\"critical\",\"security\", r\"\\beval\\s*\\(\",                           \"eval() executes arbitrary code â critical risk.\",         \"Use ast.literal_eval() for safe evaluation.\"),\n    (\"PY002\",\"critical\",\"security\", r\"\\bexec\\s*\\(\",                           \"exec() executes arbitrary strings as Python code.\",       \"Refactor to eliminate dynamic execution.\"),\n    (\"PY003\",\"critical\",\"security\", r\"\\bpickle\\.loads?\\s*\\(\",                 \"pickle.load() with untrusted data â code execution.\",     \"Use json.loads() instead.\"),\n    (\"PY004\",\"high\",\"security\",     r\"(?i)(password|secret|api_key|token)\\s*=\\s*['\\\"].+['\\\"]\",\"Hardcoded credential detected.\",          \"Move to environment variables.\"),\n    (\"PY005\",\"high\",\"security\",     r\"shell\\s*=\\s*True\",                      \"shell=True in subprocess â command injection risk.\",      \"Use list arguments: subprocess.run(['cmd','arg'])\"),\n    (\"PY006\",\"high\",\"security\",     r\"\\.execute\\s*\\(.*(%|\\.format\\(|f['\\\"])\", \"Potential SQL injection via string formatting.\",          \"Use parameterised queries: cursor.execute(sql,(val,))\"),\n    (\"PY009\",\"medium\",\"bug\",        r\"except\\s*:\",                            \"Bare except catches SystemExit and KeyboardInterrupt.\",   \"Use: except Exception: or catch specific types.\"),\n    (\"PY016\",\"medium\",\"security\",   r\"hashlib\\.(md5|sha1)\\s*\\(\",              \"MD5/SHA1 are cryptographically broken.\",                  \"Use hashlib.sha256() or bcrypt for passwords.\"),\n    (\"PY007\",\"medium\",\"bug\",        r\"def\\s+\\w+\\s*\\([^)]*=\\s*\\[\\s*\\]\",      \"Mutable default argument [] â shared across all calls.\",  \"Use None as default; init list inside function.\"),\n    (\"PY017\",\"high\",\"security\",     r\"\\brandom\\.(random|randint|choice)\\s*\\(\",\"random module is not cryptographically secure.\",          \"Use secrets module for security-sensitive values.\"),\n]\n\nconsole.print(Panel.fit(\n    f\"[bold red]ð Argus Lite â Quick Scan[/bold red]\\n\"\n    f\"File: [yellow]{target}[/yellow]\\n\"\n    f\"[dim]Lite: 1 file, 10 rules â upgrade to Pro for full codebase scanning[/dim]\",\n    border_style=\"red\"\n))\n\nfindings = []\ntry:\n    source = target.read_text(encoding=\"utf-8\", errors=\"replace\")\n    for lineno, line in enumerate(source.splitlines(), 1):\n        for rule_id, sev, category, pattern, message, fix in RULES:\n            if re.search(pattern, line):\n                findings.append({\"id\":rule_id,\"severity\":sev,\"category\":category,\n                                 \"line\":lineno,\"code\":line.strip()[:80],\"message\":message,\"fix\":fix})\nexcept Exception as e:\n    console.print(f\"[red]Error reading file: {e}[/red]\")\n    raise SystemExit(1)\n\n# Deduplicate\nseen, unique = set(), []\nfor f in findings:\n    key = (f[\"id\"],f[\"line\"])\n    if key not in seen:\n        seen.add(key)\n        unique.append(f)\n\nSEV_COLOUR = {\"critical\":\"red\",\"high\":\"orange3\",\"medium\":\"yellow\",\"low\":\"dim\"}\n\nif not unique:\n    console.print(Panel(\n        f\"[green]â No issues in {RULES.__len__()} rule scan![/green]\\n\"\n        f\"[dim]Pro scans 40+ rules including performance patterns â upgrade for full coverage.[/dim]\",\n        border_style=\"green\"\n    ))\nelse:\n    tbl = Table(title=f\"ð {len(unique)} Finding(s) in {target.name}\", box=box.ROUNDED, border_style=\"red\")\n    tbl.add_column(\"ID\",      width=7,  style=\"dim\")\n    tbl.add_column(\"Sev\",     width=9)\n    tbl.add_column(\"Line\",    width=6,  justify=\"right\", style=\"yellow\")\n    tbl.add_column(\"Issue\",   width=50)\n    for fi in unique:\n        sc = SEV_COLOUR.get(fi[\"severity\"],\"white\")\n        tbl.add_row(fi[\"id\"],f\"[{sc}]{fi['severity'].upper()}[/{sc}]\",str(fi[\"line\"]),fi[\"message\"][:48])\n    console.print(tbl)\n\n    for fi in [f for f in unique if f[\"severity\"] in (\"critical\",\"high\")]:\n        sc = SEV_COLOUR.get(fi[\"severity\"],\"white\")\n        console.print(Panel(\n            f\"[dim]Line {fi['line']}:[/dim] [italic]{fi['code']}[/italic]\\n\\n\"\n            f\"[white]{fi['message']}[/white]\\n\\n\"\n            f\"[green]Fix:[/green] {fi['fix']}\",\n            title=f\"[{sc}]{fi['severity'].upper()}[/{sc}] â {fi['id']}\",\n            border_style=sc\n        ))\n\nconsole.print()\nconsole.print(Panel(\n    f\"[bold yellow]ð Want more?[/bold yellow]\\n\\n\"\n    f\"Argus Pro scans [bold]your entire codebase[/bold] with [bold]40+ rules[/bold] across Python and JavaScript â \"\n    f\"including performance issues, memory leaks, and N+1 query patterns. \"\n    f\"Plus CI-ready JSON output and FAIL_ON_CRITICAL exit codes.\\n\\n\"\n    f\"[bold cyan]openclaw skills install argus-pro[/bold cyan]\\n\"\n    f\"Get your key â [bold]ko-fi.com/occupythemilkyway[/bold]\",\n    title=\"Upgrade to Argus Pro\",\n    border_style=\"cyan\"\n))\n```\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7474wrtsjp988869sw7mygz1860n2v\",\n  \"slug\": \"argus-lite\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1778429388255\n}","readmeExcerpt":"Skill: Argus Lite — Code Scanner (Free) Owner: occupythemilkyway Summary: Argus Lite â Code Scanner (Free). Scan a single Python file for the top 10 most critical security and bug patterns. A free preview of what Argus Pro does f... Tags: argus:1.0.0, code-review:1.0.0, debugging:1.0.0, free:1.0.0, latest:1.0.4, linter:1.0.0, lite:1.0.0, python:1.0.0, security:1.0.0 Version history: v1.0.4 | 2026-05-24T04:32:18.929","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"pip3 install rich --break-system-packages --quiet"},{"language":"python","snippet":"import os, re\nfrom pathlib import Path\nfrom rich.console import Console\nfrom rich.table import Table\nfrom rich.panel import Panel\nfrom rich import box\n\nconsole = Console()\n\nSRC_PATH = os.environ.get(\"SOURCE_PATH\",\".\").strip()\nsrc      = Path(SRC_PATH)\n\n# Find a single Python file to scan\nif src.is_dir():\n    py_files = list(src.rglob(\"*.py\"))\n    if not py_files:\n        console.print(f\"[yellow]No .py files found in {SRC_PATH}[/yellow]\")\n        raise SystemExit(0)\n    target = py_files[0]\n    if len(py_files) > 1:\n        console.print(f\"[yellow]â¹ï¸  Lite scans 1 file at a time. Scanning: {target}\\n   (Upgrade to Pro to scan all {len(py_files)} files)[/yellow]\\n\")\nelif src.is_file():\n    target = src\nelse:\n    console.print(f\"[red]â Not found: {SRC_PATH}[/red]\")\n    raise SystemExit(1)\n\n# Top 10 critical/high rules only (Lite)\nRULES = [\n    (\"PY001\",\"critical\",\"security\", r\"\\beval\\s*\\(\",                           \"eval() executes arbitrary code â critical risk.\",         \"Use ast.literal_eval() for safe evaluation.\"),\n    (\"PY002\",\"critical\",\"security\", r\"\\bexec\\s*\\(\",                           \"exec() executes arbitrary strings as Python code.\",       \"Refactor to eliminate dynamic execution.\"),\n    (\"PY003\",\"critical\",\"security\", r\"\\bpickle\\.loads?\\s*\\(\",                 \"pickle.load() with untrusted data â code execution.\",     \"Use json.loads() instead.\"),\n    (\"PY004\",\"high\",\"security\",     r\"(?i)(password|secret|api_key|token)\\s*=\\s*['\\\"].+['\\\"]\",\"Hardcoded credential detected.\",          \"Move to environment variables.\"),\n    (\"PY005\",\"high\",\"security\",     r\"shell\\s*=\\s*True\",                      \"shell=True in subprocess â command injection risk.\",      \"Use list arguments: subprocess.run(['cmd','arg'])\"),\n    (\"PY006\",\"high\",\"security\",     r\"\\.execute\\s*\\(.*(%|\\.format\\(|f['\\\"])\", \"Potential SQL injection via string formatting.\",          \"Use parameterised queries: cursor.execute(sql,(val,))\"),\n    (\"PY009\",\"medium\",\"bug\",        r\"except\\s*"},{"language":"bash","snippet":"pip3 install rich --break-system-packages --quiet"},{"language":"python","snippet":"import os, re\nfrom pathlib import Path\nfrom rich.console import Console\nfrom rich.table import Table\nfrom rich.panel import Panel\nfrom rich import box\n\nconsole = Console()\n\nSRC_PATH = os.environ.get(\"SOURCE_PATH\",\".\").strip()\nsrc      = Path(SRC_PATH)\n\n# Find a single Python file to scan\nif src.is_dir():\n    py_files = list(src.rglob(\"*.py\"))\n    if not py_files:\n        console.print(f\"[yellow]No .py files found in {SRC_PATH}[/yellow]\")\n        raise SystemExit(0)\n    target = py_files[0]\n    if len(py_files) > 1:\n        console.print(f\"[yellow]â¹ï¸  Lite scans 1 file at a time. Scanning: {target}\\n   (Upgrade to Pro to scan all {len(py_files)} files)[/yellow]\\n\")\nelif src.is_file():\n    target = src\nelse:\n    console.print(f\"[red]â Not found: {SRC_PATH}[/red]\")\n    raise SystemExit(1)\n\n# Top 10 critical/high rules only (Lite)\nRULES = [\n    (\"PY001\",\"critical\",\"security\", r\"\\beval\\s*\\(\",                           \"eval() executes arbitrary code â critical risk.\",         \"Use ast.literal_eval() for safe evaluation.\"),\n    (\"PY002\",\"critical\",\"security\", r\"\\bexec\\s*\\(\",                           \"exec() executes arbitrary strings as Python code.\",       \"Refactor to eliminate dynamic execution.\"),\n    (\"PY003\",\"critical\",\"security\", r\"\\bpickle\\.loads?\\s*\\(\",                 \"pickle.load() with untrusted data â code execution.\",     \"Use json.loads() instead.\"),\n    (\"PY004\",\"high\",\"security\",     r\"(?i)(password|secret|api_key|token)\\s*=\\s*['\\\"].+['\\\"]\",\"Hardcoded credential detected.\",          \"Move to environment variables.\"),\n    (\"PY005\",\"high\",\"security\",     r\"shell\\s*=\\s*True\",                      \"shell=True in subprocess â command injection risk.\",      \"Use list arguments: subprocess.run(['cmd','arg'])\"),\n    (\"PY006\",\"high\",\"security\",     r\"\\.execute\\s*\\(.*(%|\\.format\\(|f['\\\"])\", \"Potential SQL injection via string formatting.\",          \"Use parameterised queries: cursor.execute(sql,(val,))\"),\n    (\"PY009\",\"medium\",\"bug\",        r\"except\\s*"},{"language":"bash","snippet":"pip3 install rich --break-system-packages --quiet"},{"language":"python","snippet":"import os, re\nfrom pathlib import Path\nfrom rich.console import Console\nfrom rich.table import Table\nfrom rich.panel import Panel\nfrom rich import box\n\nconsole = Console()\n\nSRC_PATH = os.environ.get(\"SOURCE_PATH\",\".\").strip()\nsrc      = Path(SRC_PATH)\n\n# Find a single Python file to scan\nif src.is_dir():\n    py_files = list(src.rglob(\"*.py\"))\n    if not py_files:\n        console.print(f\"[yellow]No .py files found in {SRC_PATH}[/yellow]\")\n        raise SystemExit(0)\n    target = py_files[0]\n    if len(py_files) > 1:\n        console.print(f\"[yellow]â¹ï¸  Lite scans 1 file at a time. Scanning: {target}\\n   (Upgrade to Pro to scan all {len(py_files)} files)[/yellow]\\n\")\nelif src.is_file():\n    target = src\nelse:\n    console.print(f\"[red]â Not found: {SRC_PATH}[/red]\")\n    raise SystemExit(1)\n\n# Top 10 critical/high rules only (Lite)\nRULES = [\n    (\"PY001\",\"critical\",\"security\", r\"\\beval\\s*\\(\",                           \"eval() executes arbitrary code â critical risk.\",         \"Use ast.literal_eval() for safe evaluation.\"),\n    (\"PY002\",\"critical\",\"security\", r\"\\bexec\\s*\\(\",                           \"exec() executes arbitrary strings as Python code.\",       \"Refactor to eliminate dynamic execution.\"),\n    (\"PY003\",\"critical\",\"security\", r\"\\bpickle\\.loads?\\s*\\(\",                 \"pickle.load() with untrusted data â code execution.\",     \"Use json.loads() instead.\"),\n    (\"PY004\",\"high\",\"security\",     r\"(?i)(password|secret|api_key|token)\\s*=\\s*['\\\"].+['\\\"]\",\"Hardcoded credential detected.\",          \"Move to environment variables.\"),\n    (\"PY005\",\"high\",\"security\",     r\"shell\\s*=\\s*True\",                      \"shell=True in subprocess â command injection risk.\",      \"Use list arguments: subprocess.run(['cmd','arg'])\"),\n    (\"PY006\",\"high\",\"security\",     r\"\\.execute\\s*\\(.*(%|\\.format\\(|f['\\\"])\", \"Potential SQL injection via string formatting.\",          \"Use parameterised queries: cursor.execute(sql,(val,))\"),\n    (\"PY009\",\"medium\",\"bug\",        r\"except\\s*"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: argus-lite\ndescription: \"Argus Lite â Code Scanner (Free). Scan a single Python file for the top 10 most critical security and bug patterns. A free preview of what Argus Pro does for your full codebase.\"\nversion: \"1.0.4\"\nmetadata:\n  openclaw:\n    requires:\n      env: []\n      bins: [python3, pip3]\n    primaryEnv: \"SOURCE_PATH\"\n    homepage: https://clawhub.ai/occupythemilkyway/argus-lite\n    emoji: \"ð\"\n    tags: [debugging, security, code-review, python, free, lite, argus, linter]\n    envVars:\n      - name: SOURCE_PATH\n        required: false\n        description: \"Path to a single Python file to scan (Lite: one file at a time)\"\n        default: \".\"\n---\n\n# Argus Lite â Free Code Scanner\n\nScan one Python file against the top 10 critical security and bug rules.\n\n## Free vs Pro\n\n| Feature | Argus Lite (Free) | Argus Pro |\n|---------|------------------|-----------|\n| Files | **1 file only** | Full directory recursion |\n| Rules | **10 (critical/high)** | 40+ incl. performance |\n| Languages | Python only | Python + JavaScript |\n| JSON output | â | â CI-ready |\n| CI exit codes | â | â FAIL_ON_CRITICAL |\n| Ignore paths | â | â |\n| Deduplication | Basic | Smart cross-file |\n\nð **Upgrade:** `openclaw skills install argus-pro` â key at **ko-fi.com/s/8b27346505**\n\nð° **Bundle deal:** all 5 Pro skills for **$29** â **ko-fi.com/s/7625accf3f** (save $16)\n\n---\n\n## Step 1 â Install\n\n```bash\npip3 install rich --break-system-packages --quiet\n```\n\n---\n\n## Step 2 â Quick security scan (Lite)\n\n```python\nimport os, re\nfrom pathlib import Path\nfrom rich.console import Console\nfrom rich.table import Table\nfrom rich.panel import Panel\nfrom rich import box\n\nconsole = Console()\n\nSRC_PATH = os.environ.get(\"SOURCE_PATH\",\".\").strip()\nsrc      = Path(SRC_PATH)\n\n# Find a single Python file to scan\nif src.is_dir():\n    py_files = list(src.rglob(\"*.py\"))\n    if not py_files:\n        console.print(f\"[yellow]No .py files found in {SRC_PATH}[/yellow]\")\n        raise SystemExit(0)\n    target = py_files[0]\n    if len(py_files) > 1:\n        console.print(f\"[yellow]â¹ï¸  Lite scans 1 file at a time. Scanning: {target}\\n   (Upgrade to Pro to scan all {len(py_files)} files)[/yellow]\\n\")\nelif src.is_file():\n    target = src\nelse:\n    console.print(f\"[red]â Not found: {SRC_PATH}[/red]\")\n    raise SystemExit(1)\n\n# Top 10 critical/high rules only (Lite)\nRULES = [\n    (\"PY001\",\"critical\",\"security\", r\"\\beval\\s*\\(\",                           \"eval() executes arbitrary code â critical risk.\",         \"Use ast.literal_eval() for safe evaluation.\"),\n    (\"PY002\",\"critical\",\"security\", r\"\\bexec\\s*\\(\",                           \"exec() executes arbitrary strings as Python code.\",       \"Refactor to eliminate dynamic execution.\"),\n    (\"PY003\",\"critical\",\"security\", r\"\\bpickle\\.loads?\\s*\\(\",                 \"pickle.load() with untrusted data â code execution.\",     \"Use json.loads() instead.\"),\n    (\"PY004\",\"high\",\"security\",     r\"(?i)(password|secret|"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7474wrtsjp988869sw7mygz1860n2v\",\n  \"slug\": \"argus-lite\",\n  \"version\": \"1.0.4\",\n  \"publishedAt\": 1779597138929\n}"},{"path":"skill-card.md","content":"## Description:\n\nArgus Lite scans a single Python file for ten critical and high-priority security and bug patterns.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[occupythemilkyway](https://clawhub.ai/user/occupythemilkyway)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers use Argus Lite to run a lightweight review of one Python file for common security issues and bug patterns before deeper review or scanning.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The security review verdict is suspicious because the install step and runtime behavior need review before use.\n\nMitigation: Review the skill before installing, run it in a virtual environment, and pin or verify the rich dependency.\n\nRisk: The default SOURCE_PATH value can scan the first Python file found from the current directory instead of an explicit target.\n\nMitigation: Set SOURCE_PATH to an explicit Python file before running the scan.\n\nRisk: The skill includes an upgrade and payment prompt that is advertising rather than scan output.\n\nMitigation: Treat Pro install and purchase links as promotional content and separate them from security findings.\n\n## Reference(s):\n\n- [ClawHub listing](https://clawhub.ai/occupythemilkyway/argus-lite)\n- [ClawHub skill page](https://clawhub.ai/occupythemilkyway/skills/argus-lite)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Shell commands, Code, Guidance]\n\n**Output Format:** [Markdown instructions with bash and Python code blocks; terminal text and table scan results when executed]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires python3, pip3, and the rich Python package; SOURCE_PATH selects the Python file or directory to scan.]\n\n## Skill Version(s):\n\n1.0.4 (source: frontmatter and server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Argus Lite â Code Scanner (Free). Scan a single Python file for the top 10 most critical security and bug patterns. A free preview of what Argus Pro does f... Skill: Argus Lite — Code Scanner (Free) Owner: occupythemilkyway Summary: Argus Lite â Code Scanner (Free). Scan a single Python file for the top 10 most critical security and bug patterns. A free preview of what Argus Pro does f... Tags: argus:1.0.0, code-review:1.0.0, debugging:1.0.0, free:1.0.0, latest:1.0.4, linter:1.0.0, lite:1.0.0, python:1.0.0, security:1.0.0 Version history: v1.0.4 | 2026-05-24T04:32:18.929","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1104,"uniquenessScore":48,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T16:03:25.664Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T16:03:25.664Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T20:59:03.749Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}