| Crates.io | noslop |
| lib.rs | noslop |
| version | 0.1.2 |
| created_at | 2025-12-27 06:16:08.830883+00 |
| updated_at | 2025-12-28 18:25:14.041984+00 |
| description | A CLI tool to maintain high code and documentation quality in AI-assisted development |
| homepage | |
| repository | https://github.com/noslop-sh/noslop |
| max_upload_size | |
| id | 2006753 |
| size | 298,353 |
The missing context layer for coding agents.
Your team has knowledge that lives in people's heads:
__init__.py for Alembic"Agents don't know any of this. They'll write working code that misses every detail you care about. You catch it in review, leave comments, wait for fixes, repeat. Slop.
noslop surfaces what agents need to know, when they need to know it. They see what they missed and fix it themselves.
# .noslop.toml
[[assert]]
target = "migrations/versions/*.py"
message = "Generated with alembic revision --autogenerate?"
severity = "block"
[[assert]]
target = "models/**/*.py"
message = "Imported in models/__init__.py?"
severity = "block"
When an agent commits:
$ git commit -m "Add User model"
BLOCKED: 2 unattested assertions
[DB-1] models/user.py
Imported in models/__init__.py?
[DB-2] migrations/versions/abc123_add_user.py
Generated with alembic revision --autogenerate?
To proceed: noslop attest <id> -m "verification"
The agent sees the problem, fixes it, attests, and commits. No review round-trip.
# Quick install
curl -fsSL https://raw.githubusercontent.com/noslop-sh/noslop/main/scripts/install.sh | bash
# Or via cargo
cargo install noslop
cd your-project
noslop init
This creates .noslop.toml and installs git hooks.
Add assertions for patterns that trip up agents repeatedly:
# Database conventions
noslop assert add "migrations/versions/*.py" \
-m "Generated with alembic revision --autogenerate?" \
--severity block
noslop assert add "models/**/*.py" \
-m "Imported in models/__init__.py?" \
--severity block
# API conventions
noslop assert add "api/public/*_router.py" \
-m "Rate limiting decorator added?" \
--severity block
# Security requirements
noslop assert add "auth/**/*.py" \
-m "Security review ticket?" \
--severity block
git commitnoslop attest DB-1 -m "Added to __init__.py"Attestations are recorded as git trailers, visible in your commit history:
Add User model
Noslop-Attest: DB-1 | Added to __init__.py | claude-3-opus
Noslop-Attest: DB-2 | Generated with alembic | claude-3-opus
[[assert]]
target = "models/**/*.py"
message = "Imported in models/__init__.py?"
severity = "block"
tags = ["database"]
[[assert]]
target = "migrations/versions/*.py"
message = "Generated with alembic revision --autogenerate?"
severity = "block"
tags = ["database"]
Catches the classic mistake: agent creates a model, writes a migration by hand, but forgets the import that makes Alembic see the model.
[[assert]]
target = "api/public/*_router.py"
message = "Rate limiting decorator added?"
severity = "block"
tags = ["security"]
[[assert]]
target = "components/**/*.tsx"
message = "Using useQuery instead of raw fetch?"
severity = "warn"
tags = ["react"]
warn shows the convention but doesn't block. Good for best practices vs hard requirements.
target = "migrations/versions/*.py" # Files in directory
target = "auth/**/*.py" # Recursive
target = "*_router.py" # Suffix match
target = "config/prod.yaml" # Specific file
noslop init # Set up in repo
noslop assert add <target> -m <message> # Add convention
noslop assert list # List all
noslop assert remove <id> # Remove
noslop attest <id> -m <message> # Attest
noslop check # Check staged files
Slop is code that works but misses the point. It compiles, passes tests, and ignores everything your team knows. noslop is the fix.
MIT. See LICENSE.