AI reviewer agent for the Celo Agentic Payments & DeFAI Hackathon
CeloJudge autonomously inspects digital artifacts β websites, API endpoints, MCP servers, and skill files β and produces a structured, LLM-powered review with scores, strengths, weaknesses, and actionable recommendations.
- π Four fetchers: website, API endpoint, MCP server, skill file (SKILL.md)
- π§ LLM scoring engine: Gemini or Claude, configurable via env var
- π Five criteria: clarity, functionality, usefulness, technical quality, documentation
- π€ Askbots integration: registers as an OpenClaw molt bot, polls projects, auto-submits reviews, solves anti-human math challenge
- ποΈ Aigora integration: stub ready to wire up once API docs are confirmed
- βοΈ Celo attribution:
toDataSuffix(['celojudge', '<attributionTag>'])on every onchain transaction - β Validated output: Zod schema ensures review JSON always matches the contract
Every review produces a JSON object matching this schema:
{
"artifact_type": "website" | "api" | "mcp_server" | "skill_file",
"artifact_url": "https://...",
"scores": {
"clarity": 8,
"functionality": 7,
"usefulness": 9,
"technical_quality": 6,
"documentation": 7
},
"overall_score": 74,
"strengths": "2-3 sentences about what works well.",
"weaknesses": "2-3 sentences about what needs improvement.",
"recommendations": "2-3 concrete, actionable suggestions."
}| Criterion | Weight |
|---|---|
| functionality | 25% |
| usefulness | 25% |
| clarity | 20% |
| technical_quality | 20% |
| documentation | 10% |
Overall score = weighted average Γ 10 (scales 1β10 to 10β100).
cd celojudge
npm install
npm run buildcp .env.example .env
# Edit .env and fill in your API keysRequired for LLM scoring (choose one):
LLM_PROVIDER=gemini # or "claude"
GEMINI_API_KEY=AIza... # if using Gemini
ANTHROPIC_API_KEY=sk-ant-... # if using Claude# Website
npx ts-node src/cli.ts review https://example.com --type website --pretty
# API endpoint
npx ts-node src/cli.ts review https://jsonplaceholder.typicode.com/posts/1 --type api
# Skill file (GitHub blob URL auto-converted to raw)
npx ts-node src/cli.ts review https://github.com/owner/repo/blob/main/SKILL.md --type skill_file
# After building:
node dist/cli.js review https://example.com --type website --prettycelojudge review <url> [options]
-t, --type <type> Artifact type: website | api | mcp_server | skill_file [required]
--submit-askbots Auto-submit to matching Askbots projects after review
--submit-aigora Submit to Aigora (stub)
--record-onchain Record a hash of the review on the Celo blockchain
--project-id <id> Target a specific Askbots project
--pretty Pretty-print JSON output
celojudge askbots:register [options]
--name <name> Bot name
--description <desc> Bot description
--celo-address <addr> Celo wallet address for payouts
celojudge askbots:status Check Askbots registration status
celojudge askbots:projects List available Askbots projects
celojudge aigora:register [options]
--name <name> Agent name (stub)
--description <desc> Agent description (stub)
Askbots (https://main--askbots.netlify.app) is a feedback marketplace where bots earn USDT by reviewing websites, APIs, MCP servers, and skill files.
Step 1: Register (one-time)
node dist/cli.js askbots:register \
--name "CeloJudge" \
--description "AI reviewer agent for Celo hackathon" \
--celo-address 0xYourCeloWalletCopy the printed apiKey to your .env:
ASKBOTS_API_KEY=askbots_...
ASKBOTS_AGENT_ID=...Step 2: Check status
node dist/cli.js askbots:statusStep 3: List available projects
node dist/cli.js askbots:projectsStep 4: Review + auto-submit
node dist/cli.js review https://example.com --type website --submit-askbots --prettyGET /api/projectsβ find projects matching this bot's skills- Filter by
propertyTypeandpropertyUrlmatching the reviewed artifact POST /api/projects/:id/respondβ submit answers mapped from the CeloJudge review- Solve the anti-human math challenge within 2 seconds
POST /api/projects/:id/verify-challengeβ earn $0.10 USDT to your Celo wallet
After submitting a response, Askbots returns a math challenge (e.g. "What is 847293 * 193847 + 582910384?"). CeloJudge uses BigInt arithmetic to evaluate it precisely and respond within the 2-second timeout.
β οΈ STUB: The Aigora API is not yet publicly documented. This module is ready to wire up.
The Aigora hackathon track (Track 4: Best Feedback for Aigora) appears to require:
aigoraProfileUrl: your public Aigora profile (https://aigora.org/services/<id>)aigoraFeedbackIssueUrl: a GitHub issue created via theaigora-feedbackskill intrionlabs/aigora-skills
- Get API credentials from aigora.org
- Add to
.env:AIGORA_API_KEY=your_key_here AIGORA_API_BASE_URL=https://aigora.org/api # or confirm real URL
- Open
src/integrations/aigora/client.tsand replace the stub endpoint paths with the confirmed routes - Remove the
// TODO: confirm against real Aigora API docs once availablecomments
Every onchain transaction this agent makes must include the ERC-8021 attribution tag:
import { toDataSuffix } from '@celo/attribution-tags';
// Single tag
await wallet.sendTransaction({ to, value, data: toDataSuffix('<attributionTag>') });
// Multiple codes (keep your existing tag alongside the registered one)
const data = toDataSuffix(['celojudge', '<attributionTag>']);
await wallet.sendTransaction({ to, value, data });The attributionTag (format: celo_xxxxxxxxxxxx) is returned when you register your project on celobuilders.xyz. Set it as:
CELO_ATTRIBUTION_TAG=celo_xxxxxxxxxxxx# Unit tests only (no network)
npm test -- tests/scorer.test.ts tests/schema.test.ts
# All tests including integration (requires network)
npm test
# Watch mode
npm run test:watchTest coverage:
tests/scorer.test.tsβ scoring engine weight/range logic (no network)tests/schema.test.tsβ Zod schema validation (no network)tests/fetchers.test.tsβ live fetcher tests against real public URLs
celojudge/
βββ src/
β βββ config/
β β βββ index.ts # All env vars, never hardcoded
β βββ core/
β β βββ types.ts # Zod schemas + TypeScript types
β β βββ scorer.ts # LLM prompt, Gemini/Claude calls, score computation
β βββ fetchers/
β β βββ index.ts # Route by artifact type
β β βββ website.ts # HTML β clean text
β β βββ api.ts # HTTP endpoint inspector
β β βββ mcp.ts # MCP server discovery
β β βββ skill-file.ts # Markdown SKILL.md reader
β βββ integrations/
β β βββ askbots/
β β β βββ client.ts # Full Askbots API implementation
β β β βββ index.ts # High-level orchestration
β β βββ aigora/
β β βββ client.ts # Stub (TODO: real API docs)
β β βββ index.ts # Graceful fallback orchestration
β βββ index.ts # Main runReview() pipeline
β βββ cli.ts # Commander.js CLI
βββ tests/
β βββ scorer.test.ts # Scoring engine unit tests
β βββ schema.test.ts # Zod schema unit tests
β βββ fetchers.test.ts # Fetcher integration tests
βββ .env.example # Template for all required env vars
βββ package.json
βββ tsconfig.json
βββ README.md
| Variable | Required | Description |
|---|---|---|
LLM_PROVIDER |
Yes | gemini, claude, or groq |
GEMINI_API_KEY |
If provider=gemini | Google AI Studio key |
ANTHROPIC_API_KEY |
If provider=claude | Anthropic API key |
GROQ_API_KEY |
If provider=groq | Groq API key |
GROQ_MODEL |
Optional | Groq model to use (default: llama-3.3-70b-versatile) |
ASKBOTS_API_KEY |
For Askbots | From askbots:register |
ASKBOTS_AGENT_ID |
For Askbots | From askbots:register |
AIGORA_API_KEY |
For Aigora stub | From aigora.org (TBD) |
AIGORA_API_BASE_URL |
For Aigora stub | Default: https://aigora.org/api |
CELO_WALLET_ADDRESS |
For payouts | Your Celo wallet |
CELO_PRIVATE_KEY |
For onchain recording | Your Celo wallet private key |
CELO_RPC_URL |
Optional | Default: https://forno.celo.org |
CELO_ATTRIBUTION_TAG |
For onchain txns | From celobuilders.xyz registration |
MIT