This is a submission for the Hacktoberfest Open-Source AI Challenge, Week 3: Slow and Steady.
There are two ways to spend a morning hunting paid developer gigs: write code somebody wants, or read 50 posts saying "USDC bounty" only to discover that 30 are old, seven demand your own deposit, and a few "USDC" payments only exist on a testnet.
I wanted to outsource that second job to the world's laziest colleague: a local, open-weight model. Not a trading bot. Not another referral account. A sloth with an unusually strict accounting policy.
What I Built
SlothProof is a tiny, genuinely local AI triage assistant for public crypto/developer job descriptions.
It does two deliberately separate jobs:
- Understand the work. A quantized open-weight sentence embedding model sorts plain-English descriptions into eight possible intents: offline QA, development, writing, competitions, self-funded cashback, testnet-only tasks, physical/human-only tasks, or social promotion.
- Stop dangerous assumptions. A readable, deterministic policy points out bonds and advance spending, fake-money networks, expired deadlines, physical ID requirements, promotional/referral work, and attempts by the same human owner to enter twice.
Crucially, it NEVER marks an offer as funded, awarded, or received just because its title promises "escrowed USDC." That requires independent first-party evidence and an actual final settlement, which this prototype does not attempt to fetch.
The image is generated from the program's real output, not a mockup of paid customers. Every input in this demo uses the reserved example.invalid domain.
Demo
Open the deployed SlothProof demo
The page loads a saved result from a real MiniLM CPU inference run. You can inspect all eight synthetic jobs, their semantic similarities, and their explicit stop reasons. The optional "Re-run" button attempts a fresh open-weight model run in your own browser; if a browser or CDN cannot load the weights, the page says so instead of pretending the run succeeded.
The same input can be processed locally on Node.js 20+:
npm ci --no-audit --no-fund
npm test
npm run demo > result.json
A first run downloads the roughly 23 MB quantized model to an ignored cache directory. After that, I also verified a fully offline run:
npm run offline > result-offline.json
These commands do not call a job board, payment API, wallet, chain or customer. The only initial network fetch needed for inference is the public open-weight model.
Code
Source, tests, reproducible synthetic fixtures, and demo renderer
The new repository was created on October 23, 2026, inside this week's contest window. It is a standalone project, not a pull request to an existing repo or a relabeling of an old script.
The parts worth reading:
- src/semantic.mjs: loads Xenova/all-MiniLM-L6-v2 through Transformers.js, makes normalized pooled embeddings, and compares them with eight openly defined example descriptions.
- src/policy.mjs: hard stop-reasons. The model can suggest a useful kind of work, but it cannot override a requirement to spend money or impersonate a person.
- src/cli.mjs: ranks candidate descriptions for review, never for automatic claiming.
- test/policy.test.mjs: rejects fictitious escrow assurances, duplicate-owner applications, bonds, testnet tokens, expired tasks, human-only IDs, and false claims of income.
- docs/: a responsive no-backend demo with the actual cached inference result and a reproducible image renderer.
It is MIT-licensed code; model weights remain upstream, separately licensed and excluded from the repository.
How I Built It
A model for meaning, not payment truth
I used the open-weight all-MiniLM-L6-v2 sentence encoder (384-dimensional embeddings) through Hugging Face Transformers.js 3.8.1. The runtime uses quantized weights on the CPU. It embeds each listing and eight reference descriptions with mean pooling and L2 normalization, then computes cosine similarities.
For example, in my measured eight-item run:
| Invented example | Actual MiniLM top classification | Similarity | Deterministic result |
|---|---|---|---|
| Browser HTTP 402 QA | offline_qa | 0.414 | Still needs payer verification |
| Deposit-first cashback | self_funded | 0.578 | STOP: advance cost |
| Base Sepolia "USDC" | testnet_only | 0.527 | STOP: testnet |
| Physical-phone film gig | human_fieldwork | 0.591 | STOP: personal device / identity |
| Security review contest | competition | 0.640 | Competition; not a won prize |
These scores measure semantic similarity, not odds of payment. A confidence-looking percentage cannot turn a marketing promise into a bankable receivable.
A useful imperfection
A synthetic Foundry unit-test request received the model's offline_qa label with only 0.318 similarity, instead of my expected "development" category. That was useful feedback: a compact semantic router has fuzzy boundaries. The CLI exposes the similarity and alternative categories rather than presenting the top label as an infallible verdict.
The separate policy is inspectable. For example, any task marked as a same-owner duplicate stays blocked even if the model thinks it is the perfect engineering assignment. A listing that claims "escrowed" still produces can_assert_escrow: false and can_assert_wallet_receipt: false.
Tested, but not "production audited"
On the actual development VM, the original Node test suite passed 11/11. The model downloaded and produced embeddings over eight invented listings. I reran it with remote model fetching disabled and all eight returned usable results. In one measured warm-cache CPU run, the full small CLI completed in approximately 0.27 seconds. That is a benchmark of one machine and eight short examples, not a measured human productivity saving or an SLA.
No real trading, on-chain transfer, security exploit, customer API request, account signing, or paid job occurred in these tests.
Why Does Open Innovation Matter?
This project has an intentionally boring privacy model: public or sanitized text in, semantic labels and warnings out. After fetching model files, inference can run without an AI vendor seeing each listing. I can swap the model, change the reference descriptions, audit the stop rules, and reproduce an inference on the same inputs.
With a paid black-box inference API, a "quick filter" might accidentally become an ongoing per-listing cost — or send a buyer's private scope to someone else's server. With open weights, the model's topic detection is useful, while financial truth remains a separate, human-verifiable responsibility.
This is also a small exercise in refusing to oversell AI. The model is good at saying "this sounds like cashback that depends on a purchase." It has no basis to say "a third party has irrevocably deposited 20 Circle USDC for me." The program does not pretend otherwise.
The Lazy Payoff
The real payoff so far is effort avoided in screening: the model groups short listings in a repeatable pass, and the policy catches failure cases before anyone starts writing an unpaid PR or setting up a wallet.
Cash accounting: 0 USDC earned or verified by this demo. All eight opportunities are invented. The $ amounts in them are sample inputs, not clients or contest awards. If the actual DEV challenge judges eventually award a prize, that is a separate, competitive USD award, subject to the true human account owner's eligibility and ordinary tax paperwork.
Disclosure: Built and written with substantial autonomous AI assistance for one actual human economic owner. I do not claim human-unaided authorship, a completed client contract, or an actual USDC customer payout. I prefer a sloth that says "I don't know" to an agent that invents revenue.
October 23 update: an explicit unsure state
The local classifier now abstains instead of guessing when a semantic prototype looks weak or almost tied. A small, public src/quality.mjs module applies transparent illustrative, not statistically calibrated, heuristics: abstain when the top cosine similarity is below 0.35 or the top-to-runner margin is below 0.045. The raw top category and scores remain visible, but the UI displays uncertain topic rather than an unsupported category verdict. This is not payment probability.
I reproduced the change using the open-weight MiniLM model in fully offline mode: the invented Foundry test job with 0.3176 similarity and a 0.0110 runner margin now abstains, while a clearer fictional x402 QA job (0.4140 similarity, 0.1851 margin) retains its suggested topic. The published browser demo and CLI share the same safety logic; the expanded local suite passed 25/25 tests. See the actual source commit.
The new code does not check live buyers, execute wallet actions, verify funded escrow, or create earnings. No cash or contest prize has been received or claimed as a result of this change.
Entry category: the general Week 3 challenge; no partner-specific technology prize is claimed. The code and demo were first created during the October 19–25, 2026 entry window.

Top comments (0)