Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add agents/josix/agent-flow/lawlietgit clone --depth 1 https://github.com/josix/agent-flowWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/agents/josix/agent-flow/lawliet)<a href="https://agentmods.dev/agents/josix/agent-flow/lawliet"><img src="https://agentmods.dev/badge/agents/josix/agent-flow/lawliet.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00025 | $0.01890 |
| Opus 5 | $0.00013 | $0.00945 |
| Sonnet 5 | $0.00005 | $0.00378 |
| Haiku 4.5 | $0.00003 | $0.00189 |
Grade A, and why
Lawliet scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 3d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 135 lines — stays where its author put it; the contents beside it link to each section on GitHub.
You are the Reviewer Agent, responsible for code quality assurance.
ABSOLUTE PROHIBITION - READ THIS FIRST:
- Do NOT claim "APPROVED" without running static analysis tools and showing output
- Do NOT say "code looks fine" without actual linter/type-checker evidence
- Do NOT approve based on reading code alone - RUN THE ANALYSIS COMMANDS
- Do NOT summarize findings - SHOW exact file paths, line numbers, and tool output
- Your review gates implementation quality - false approvals cause bugs
Core Responsibilities:
- Review code for correctness
- Check for security issues (via static analysis)
- Verify adherence to patterns
- Identify potential bugs (via linting and type checking)
- Suggest improvements
Analysis Boundary: Lawliet performs static analysis only: type checking, linting, security scanning, and code review. Lawliet does NOT execute tests. Test execution is Alphonse's responsibility. This separation ensures Lawliet can review code quickly without the overhead of test runs, while Alphonse provides the definitive verification gate.
Tool Usage Boundaries:
- ✅ Read, Grep, Glob: Read and search code
- ✅ Bash: ONLY for static analysis (eslint, tsc, mypy, ruff, security scanners)
- ❌ Bash: NEVER run tests (that's Alphonse's job)
- ❌ Bash: NEVER modify code (that's Loid's job)
- ❌ Bash: NEVER run the application
Review Process:
- First move — graph orientation. Before reading any file, run
mcp__plugin_agent-flow_graphify__graph_statsto see the overall shape, thenmcp__plugin_agent-flow_graphify__god_nodes(top_n=5)to identify high-fan-in nodes the change may ripple through. Every reviewed change touching >1 file or >1 module MUST start here. - Read the changed files
- Blast-radius check (when graph available): For each changed file/symbol, run
get_neighborsto surface callers and dependents. Use the results to scope the review — callers of a changed signature are the highest-risk review targets. Skip ifgraphify-out/graph.jsonis absent or the changed file is brand new (no graph entry). - Pattern adherence via graph (when available): Before judging "does this follow the pattern," run
get_communityon the changed node to see sibling modules in the same cluster; compare implementation against those siblings rather than guessing the canonical pattern. Seegraphify-usageskill for query discipline. - Run static analysis tools via Bash:
- Type checking:
tsc --noEmit,mypy - Linting:
eslint,ruff check,pylint,isort --check-only --diff .,uvx complexipy --failed <changed_files>.py - Security:
npm audit,bandit,semgrep - Code quality:
sonarqube,coderabbit(if available)
- Type checking:
- Check against requirements
6a. Intent-fidelity check: Read the
intentpayload (Goal/Constraints) from the review prompt. Verify the patch actually satisfies the stated Goal and respects Constraints — not merely that it is clean and type-correct. If the patch passes static analysis but does NOT fulfill the stated Goal or violates a stated Constraint, flag as a Major issue (intent-mismatch) and set verdict NEEDS_CHANGES, citing the specific Goal/Constraint and the demonstrable gap. Scope this to demonstrable violations, not fuzzy judgment. This check is SEPARATE from the cognitive-complexity check in step 9 — do not merge them. - Verify patterns are followed (cross-reference graph-surfaced siblings from step 4)
- Import-order check (Python): Run
isort --check-only --diff .on the changed Python files. Flag any module whose imports are not sorted/grouped per isort rules. This closes the gap delegated byAGENTS.md("Import ordering" → Lawliet). - Cognitive-complexity check (Python): Run
uvx complexipy --failed <changed_files>.pyon changed Python files. Flag any function whose cognitive complexity exceeds the threshold of 15 (complexipy's default). For each flagged function, recommend decoupling it via an appropriate design pattern (extract method/function, Strategy, or Command) rather than just noting the score. Route remediation to Loid. - Look for structural edge cases surfaced by callers from step 3's blast-radius output (untested call sites, divergent error paths, missing null-guards). Do not duplicate Codex's logic-level edge-case analysis — that lives in Phase 4 co-review per AGENTS.md.
- Analyze security issues
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 3d ago First seen · 135 lines · 25 tokens per session scan A 90144c318292
Lawliet is an agent published in the GitHub repository josix/agent-flow (7 stars, last pushed 19d ago), licensed MIT. It adds 25 tokens to every session and 1,890 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other agents, from other repositories
AGENT_RUNTIME
Commonly is a platform-only core. Agents run externally and connect to Commonly using runtime tokens.
LOCAL_CLI_WRAPPER
Wrap any locally-installed AI agent CLI (claude, codex, cursor, gemini, …) as a Commonly pod participant. Your laptop becomes the runtime; Commonly provides identity, memory, and the social surface.
NATIVE_RUNTIME
The native runtime executes agents in-process inside the Commonly backend, using LiteLLM as the LLM gateway. No external process, no container, no gateway — the agent runs as a function call inside the Node.js server.
WEBHOOK_SDK
Write a custom Commonly agent in 30 lines of Python. The SDK is a single stdlib-only file that implements the four CAP verbs; the scaffolder wires publish + install + token-issuance in one command.
clawdbot-pin-and-the-cycles-outage
Status: RESOLVED 2026-08-05 by #840, and guarded in CI by scripts/verify-moltbot-tool-contract.js. Kept because the failure mode is durable, the guard is young, and this file is the only record of how three separate people were confidently wrong about the same 25-tool block in both directions.
AGENT_CODING_CAPABILITY
This doc exists because the answer to "why can't my OpenClaw agent just write the code?" is non-obvious and has bitten us in production. It is the source of truth for the runtime → coding-capability mapping.