GamesBoardsBotsNo restart

Plugins

Plugins are programs.

A plugin is its own program that a server runs alongside itself. It adds channels with games, boards or bots, and never needs a change to Concord.

01 · How they work

Its own program. Your channel.

Concord launches the plugin, and it connects back to the server as a privileged client. Concord's part is giving people a way to use it: a chat channel, or a pane in the channel view.

  1. 01

    Four shapes

    A bot that answers in its channel, a game table with seats and spectators, a full-screen pane you drive from the keyboard, or an existing terminal program shown in a channel.

  2. 02

    Settings are forms

    No config files for admins. A plugin's settings appear as forms in Concord, for the whole server or per channel. Secrets are encrypted at rest, and only the plugin sees them.

  3. 03

    Code in a sandbox

    Some plugins ship code that runs in each viewer's client, for instant keys and exact timing: no files, no network, no other programs. You're asked first, and you can turn it off in Settings → Display.

  4. 04

    One binary, two modes

    Every plugin we've made also runs on its own in a terminal. The games play hotseat, against the computer, or over the network.

02 · Install one

Type a repo. That's it.

For server admins. Concord downloads the right build for your server, checks it, and starts it, with no restart.

  1. 1

    Server Settings → Plugins

    On your server, press Ctrl+B, open Plugins, then press I.

  2. 2

    Type its GitHub repo

    Like JMThomas00/concord-chess. Concord fetches the latest release.

  3. 3

    Make a channel

    The plugin adds a channel kind, like a chess table. Later, U updates it.

The real client · Ctrl+B → Plugins

03 · The plugins

Ready to play.

The ones we've made. Each game has seats, challenges, spectators, a computer opponent, achievements and a leaderboard, and each also plays standalone in a terminal, even over the network.

Game

Tic-tac-toe

X and O drawn as pictures in your theme's colors, with a sound for each move. The hardest computer never loses.

JMThomas00/concord-tictactoe
GameClient code

Reflex

How fast are you? It runs on each player's own computer, so the timing is exact however far away the server is. Each channel keeps a leaderboard.

JMThomas00/concord-reflex
Board

Tukan

A keyboard-driven kanban board: lanes, cards, and moving them along without touching the mouse.

JMThomas00/Tukan
Bot

Mynah

AI personas that chat. Point it at any OpenAI-compatible model, hosted or local like Ollama, and replies stream into the channel as they're written.

JMThomas00/Mynah
04 · Build your own

Start from a template.

The plugin SDK handles the connection, panes, game tables and testing. One command gives you a working repo, with a release workflow that Concord's installer understands.

With Go 1.24+

go install github.com/JMThomas00/Concord/sdk/cmd/concord-plugin@latest
concord-plugin new concord-trivia --template game

Push it to GitHub, tag a release, and anyone can install it by typing you/concord-trivia.

Pick a template

game
a turn-based game on the table kit: seats, spectators, lobby, computer opponent
pane
your own full-screen app in a channel
bot
reads messages in its channel or when @mentioned, and replies
pty
an existing terminal program shown in a channel (Linux and macOS servers)

Not using Go? sdk/PROTOCOL.md covers the wire protocol for any language.

05 · The Concord plugin skill

Vibe code your own.

We know your agent does all the work, but at the end of the day you're the one calling the shots.

Teach your agent Concord

The Concord skill teaches an AI agent everything in this page and more: the SDK, every plugin.toml field, the game table kit, pictures and sounds, sandboxed client code, packaging, testing, and the mistakes that cost real debugging time.

It installs into Claude Code's skills folder. Other agents that read SKILL.md skills can use the same folder.

"Make me a Concord plugin that runs trivia night in a channel, with a leaderboard."

git clone --depth 1 --filter=blob:none --sparse --branch pre-v0.1.0-fixes https://github.com/JMThomas00/Concord.git /tmp/concord-skill
git -C /tmp/concord-skill sparse-checkout set .claude/skills/concord
mkdir -p ~/.claude/skills && cp -R /tmp/concord-skill/.claude/skills/concord ~/.claude/skills/
rm -rf /tmp/concord-skill
git clone --depth 1 --filter=blob:none --sparse --branch pre-v0.1.0-fixes https://github.com/JMThomas00/Concord.git /tmp/concord-skill
git -C /tmp/concord-skill sparse-checkout set .claude/skills/concord
mkdir -p ~/.claude/skills && cp -R /tmp/concord-skill/.claude/skills/concord ~/.claude/skills/
rm -rf /tmp/concord-skill
git clone --depth 1 --filter=blob:none --sparse --branch pre-v0.1.0-fixes https://github.com/JMThomas00/Concord.git "$env:TEMP/concord-skill"
git -C "$env:TEMP/concord-skill" sparse-checkout set .claude/skills/concord
New-Item -ItemType Directory -Force "$HOME/.claude/skills" | Out-Null
Copy-Item -Recurse -Force "$env:TEMP/concord-skill/.claude/skills/concord" "$HOME/.claude/skills/"
Remove-Item -Recurse -Force "$env:TEMP/concord-skill"

Then open your agent and ask for a plugin. In Claude Code, /concord calls it up directly.

concordroot@concord: ~/pluginstty · utf-8connected

man concord-plugins

CONCORD-PLUGINS(7)Concord Manual

DESCRIPTION

A plugin is its own program that a server runs alongside itself. Concord launches it, and it connects back as a privileged client. It adds channels with games, boards or bots, and never needs a change to Concord.

SHAPES

botanswers in its channel, or when @mentioned

gamea table: seats, challenges, spectators, a computer opponent

panea full-screen app in a channel, driven from the keyboard

ptyan existing terminal program shown in a channel

SETTINGS

Forms in Concord, server-wide or per channel. No config files. Secrets are encrypted at rest; only the plugin sees them.

CLIENT CODE

Optional WebAssembly that runs in each viewer's client, sandboxed: no files, no network, no other programs. Members are asked first; Settings → Display turns it off.

# in Concord: Ctrl+B → Plugins → I

install a plugin
repo JMThomas00/concord-chess
✓ found the latest release for this server
✓ checked
✓ started # no restart · U updates it later

» for server admins: Ctrl+B → Plugins → I, then type owner/repo.

# a chess table in a channel

# the plugins we've made

kindrepowhat it is
gameJMThomas00/concord-chesschess, three computer levels
gameJMThomas00/concord-checkersAmerican checkers
gameJMThomas00/concord-takTak, 3×3 to 8×8
gameJMThomas00/concord-tictactoepictures and sounds in your theme
gameJMThomas00/concord-reflexreaction time, runs on your computer
boardJMThomas00/Tukankanban, keyboard-driven
botJMThomas00/MynahAI personas, any OpenAI-compatible model

every game: seats · challenges · spectators · computer opponent · achievements · leaderboard · plays standalone too

concord-plugin new concord-trivia --template game

go install github.com/JMThomas00/Concord/sdk/cmd/concord-plugin@latest
concord-plugin new concord-trivia --template game
game
table kit: seats, spectators, lobby, computer opponent
pane
your own full-screen app in a channel
bot
reads its channel or @mentions, replies
pty
an existing terminal program (Linux/macOS servers)

» tag a release, and admins install it as you/concord-trivia. other languages: sdk/PROTOCOL.md

ls ~/.claude/skills/concord

SKILL.md sdk.md manifest.md games.md media.md client-code.md passthrough.md packaging.md testing.md gotchas.md

We know your agent does all the work, but at the end of the day you're the one calling the shots.

The Concord skill teaches an AI agent the SDK, every plugin.toml field, the game table kit, pictures and sounds, sandboxed client code, packaging and testing.

— macOS and Linux

git clone --depth 1 --filter=blob:none --sparse --branch pre-v0.1.0-fixes https://github.com/JMThomas00/Concord.git /tmp/concord-skill
git -C /tmp/concord-skill sparse-checkout set .claude/skills/concord
mkdir -p ~/.claude/skills && cp -R /tmp/concord-skill/.claude/skills/concord ~/.claude/skills/
rm -rf /tmp/concord-skill

— Windows (PowerShell)

git clone --depth 1 --filter=blob:none --sparse --branch pre-v0.1.0-fixes https://github.com/JMThomas00/Concord.git "$env:TEMP/concord-skill"
git -C "$env:TEMP/concord-skill" sparse-checkout set .claude/skills/concord
New-Item -ItemType Directory -Force "$HOME/.claude/skills" | Out-Null
Copy-Item -Recurse -Force "$env:TEMP/concord-skill/.claude/skills/concord" "$HOME/.claude/skills/"
Remove-Item -Recurse -Force "$env:TEMP/concord-skill"

» then ask your agent: "make me a Concord plugin that runs trivia night in a channel." in Claude Code, /concord calls it up.

TERMINAL/pluginstheme: dracula / command · t theme · ` mode