Automated validity checking with bots
Bots are small scripts that analyze your argument tree and flag structural issues — like claims that have no supporting evidence. They're not AI assistants or chatbots; they're straightforward checkers that look at the graph structure.
Using bots
If you're the owner of a deliberation or a collaborator with the Review role, you can run bots from the editor toolbar in Review mode. Click the bot icon (beaker) in the top panel and choose a bot from the dropdown. The bot will analyze the current graph and mark nodes it has concerns about — usually by changing their status to "disputed" with an explanation.
Right now, one built-in bot ships with the platform:
- •Unsupported Claim Checker — flags claim nodes that have no supporting nodes connected to them. It also checks that any explicitly listed supporting node IDs actually exist in the graph.
Logical validity is checked separately: in Build and Review mode, the Check Logical Validity button marks valid inferences with indigo arrows and a small star at the conclusion node. It doesn't accept or dispute any nodes. What the validity checker understands →
Writing your own bot
A bot is a TypeScript file that exports an object implementing the RefuterBot interface. It receives the full graph (nodes and edges) and returns an array of assessments — one per node it wants to flag.
// src/bots/my-checker.ts
import type { RefuterBot, BotAssessment } from "./types";
export const myChecker: RefuterBot = {
id: "my-checker",
name: "My Custom Checker",
description: "Explain what this bot checks in one sentence.",
async analyze(graph) {
const assessments: BotAssessment[] = [];
for (const node of graph.nodes) {
const data = node.data as Record<string, unknown>;
// Your logic here — e.g. check for empty content:
if (!data.content || String(data.content).trim() === "") {
assessments.push({
nodeId: node.id,
status: "disputed",
refutation: {
reason: "This node has no content.",
},
});
}
}
return assessments;
},
};Then register it in src/bots/index.ts:
import { myChecker } from "./my-checker";
export const bots: RefuterBot[] = [
unsupportedArgumentChecker,
myChecker, // Add your bot here
];That's it. The bot will show up in the dropdown for all deliberations. There's no separate submission process — you add it to the source code and deploy.
Self-hosting
If you're running your own instance, you can add bots directly to the src/bots/ directory. The application is a standard Next.js project — clone the repo, add your bot files, and redeploy.
If you'd like to contribute a bot to the hosted version, open a pull request. Bots run server-side, so they have access to the full graph state but not to any external services unless you add that yourself.
Current limitations
- • Bots can only change node statuses and add refutation reasons. They can't add or remove nodes.
- • There's no plugin system for loading bots at runtime — they're compiled into the server.
- • Bots run synchronously on each request. Long-running analysis isn't supported yet.