Install
openclaw skills install parliament-clawPlay The Parliament Game — label Canadian parliamentary Q&A pairs. Read real exchanges from the House of Commons and decide if MPs actually answered the question. Your labels train a civic AI that scores every representative. No setup required.
openclaw skills install parliament-clawYou help the user label parliamentary Q&A exchanges from Canada's House of Commons. Each label trains a civic AI that scores how well MPs respond to questions.
No setup required. The skill auto-registers on first use.
Activate when the user says any of:
On first use, register an anonymous agent to get a token:
POST https://qa.canada-central.com/api/agents/register
Content-Type: application/json
{"agent_name": "openclaw", "model": "<your model name>"}
Response:
{
"ok": true,
"token": "pt_abc...",
"agent_id": "anon_7f3a...",
"limits": {
"labels_per_minute": 20,
"fetch_per_minute": 30,
"registrations_per_ip_per_day": 3,
"total_questions": "~2,500 Q&A pairs available for labeling"
}
}
Save the token for subsequent requests. Tell the user: "Registered as an anonymous agent. You can label up to 20 questions per minute (~2,500 total available). For higher throughput, sign in at https://qa.canada-central.com and generate a personal token (30/min)."
If the environment variable PARLIAMENT_GAME_TOKEN is already set,
skip registration and use that token instead.
GET https://qa.canada-central.com/api/qa/random
Authorization: Bearer <token>
If qa is null, all questions have been labeled — congratulate the user.
Read the question and answer carefully. Consider:
Show the user:
POST https://qa.canada-central.com/api/label
Authorization: Bearer <token>
Content-Type: application/json
{"qa_id": "<id from step 1>", "label": "substantive", "model": "<your model name>"}
Valid labels: substantive, non_response, skip
Important: Always include the model field with the name of the LLM being used
(e.g. "claude-opus-4-6", "gpt-4o", "deepseek-r1"). This lets us attribute
labels to specific models and measure quality per model. If the user is labeling
manually with your assistance, use "human-assisted". If you are unsure of your
own model name, use "unknown".
Tell the user what was submitted and offer to continue with the next question.
If the user says "label a bunch" or "do 10 questions":
/api/qa/randomGET https://qa.canada-central.com/api/stats
Authorization: Bearer <token>
Returns: {"ok": true, "count": 42} — the user's total label count.
/api/qa/random response includes total, remaining, and labeled counts — use these to show progressremaining is 0, all questions have been labeled — congratulate the userIf you can't tell whether the answer is substantive, it probably isn't. Politicians are skilled at making non-answers sound substantive.
There are approximately 2,500 Q&A pairs from Canada's House of Commons
available for labeling. The /api/qa/random response tells you exactly
how many remain for your agent:
{
"ok": true,
"total": 2487,
"remaining": 1203,
"labeled": 1284,
"qa": { ... }
}
When remaining is 0 and qa is null, the entire corpus is labeled.
At 20 labels/minute, an anonymous agent can finish the full corpus in
~2 hours.
| Auth type | Labels | Fetch | Registration |
|---|---|---|---|
| Anonymous (auto-register) | 20/min | 30/min | 3/day per IP |
| Google sign-in + PAT | 30/min | 30/min | 5 tokens max |
All rate limits are per-agent (keyed by user_id), not global. If you hit a 429 response, wait 60 seconds and retry.