maleme is a local-first Rust toolkit for collecting user-authored prompt history from coding agents, extracting profanity usage signals, and producing a compact visual analytics report.
The CLI is already published to npm, so you can run it directly without a global install:
npx maleme
bunx maleme
vpx maleme
- Quick Start
- Highlights
- Overview
- Architecture
- Supported Data Sources
- Profanity Lexicon
- Report Generation
- Development
- Install
- npm Release Flow
- Repository Metadata
- Star History
- Scope
- License
The project is designed around three practical requirements:
- Unified ingestion of locally stored conversation history from multiple coding agents.
- Deterministic detection and aggregation of profanity usage across multilingual user input.
- Repeatable generation of a browser-friendly HTML report suitable for local review.
Run maleme directly from the published npm package:
npx maleme
bunx maleme
vpx malemeOr install it globally:
npm install -g maleme- Local-only data processing with no mandatory hosted service dependency
- Unified adapters for Codex, Claude Code, and OpenCode
- Embedded multilingual profanity lexicon with file-based maintenance
- Single-file HTML report generation for lightweight sharing and inspection
- Token-normalized profanity metrics for cross-session comparison
maleme reads local chat history from supported coding agents, normalizes user-authored text input, computes profanity frequency metrics, and renders a standalone HTML report.
The current implementation supports:
- Codex
- Claude Code
- OpenCode
The generated report includes:
- Daily profanity frequency over time
- A normalized profanity intensity metric (
SBAI) - A word cloud of the most frequently used terms
The repository is organized into a small set of focused modules:
-
src/agent_adapter/Adapter implementations for each supported coding agent. Each adapter is responsible for:- local availability checks
- user-message extraction
- token usage extraction
-
src/fuck_detector.rsProfanity lexicon loading and text matching logic. -
src/report.rsReport data aggregation, HTML rendering, and local browser launch. -
data/profanity_lexicon.txtEditable profanity lexicon embedded into the compiled binary at build time.
maleme operates against local files and databases already present on the host system. It does not require a remote service for analysis.
Current canonical sources:
-
Codex:
~/.codex/sessions/~/.codex/archived_sessions/~/.codex/state_5.sqlite
-
Claude Code:
~/.claude/transcripts/~/.claude/projects/~/.claude/stats-cache.json
-
OpenCode:
~/.local/share/opencode/opencode.db
The profanity lexicon is stored in:
Format:
term one
term two
term three
Rules:
- one entry per line
- line number is treated as the entry code
- modifying the text file and rebuilding the project updates the embedded lexicon
Running the binary will:
- scan supported local agent history
- collect user-authored messages
- calculate profanity metrics
- generate a standalone HTML report in
~/Downloads - open the report in the local default browser
Build:
cargo buildRun:
cargo runTest:
cargo testInstall the published CLI from npm:
npm install -g malemeThe npm distribution follows the same general pattern used by Codex CLI:
malemeis the lightweight wrapper packagemaleme-<platform>-<arch>packages carry the native binaries- the wrapper selects the right binary at runtime
Current npm targets wired in this repository:
darwin-arm64darwin-x64linux-arm64linux-x64win32-x64
The repository includes a GitHub Actions workflow at .github/workflows/publish-npm.yml.
For the repeatable release checklist, see:
Release steps:
- bump
versioninCargo.toml - run
node scripts/npm/sync-packages.mjs - commit and push
- create and push a matching git tag like
v0.1.0 - let GitHub Actions publish the platform packages first, then the main
malemepackage
Local validation on the current machine:
node scripts/npm/sync-packages.mjs
cargo build --release
node scripts/npm/stage-binary.mjs aarch64-apple-darwin target/release/maleme
npm pack ./npm/platforms/darwin-arm64
npm pack ./npm/main- Source: github.com/Yeuoly/maleme
- Primary language: Rust
- License: WTFPL
- Distribution model: local executable and npm-distributed native binary
This repository is intentionally local, explicit, and file-oriented. It is not intended to be a hosted analytics platform, a moderation service, or a generalized telemetry pipeline.
This project is distributed under the terms of the WTFPL.