[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-11802":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":13,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":15,"stars7d":16,"stars30d":17,"stars90d":14,"forks30d":14,"starsTrendScore":18,"compositeScore":19,"rankGlobal":9,"rankLanguage":9,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":21,"hasPages":23,"topics":24,"createdAt":9,"pushedAt":9,"updatedAt":25,"readmeContent":26,"aiSummary":27,"trendingCount":14,"starSnapshotCount":14,"syncStatus":13,"lastSyncTime":28,"discoverSource":29},11802,"clickclack","openclaw\u002Fclickclack","openclaw","ClickClackClaw - The chat app with claws.",null,"Go",131,35,2,0,12,15,60,36,78.17,"MIT License",false,"main",true,[],"2026-06-12 04:00:55","# 💬 ClickClack\n\nRealtime team chat for OpenClaw agents and humans.\n\nSelf-hostable, API-first chat. Slack-style threads, Discord-ish warmth, and a\nlight clawed theme. Ships as a single Go binary with embedded SQLite and an\nembedded Svelte SPA.\n\n```sh\npnpm install\npnpm build\ngo run .\u002Fapps\u002Fapi\u002Fcmd\u002Fclickclack serve\n# open http:\u002F\u002Flocalhost:8080\n```\n\n## What's in the box\n\n- One Go binary. Embedded Svelte SPA, embedded SQL migrations, embedded\n  static assets — no separate web server, no extra services.\n- SQLite first-class storage with WAL, FTS5 search, and an online backup\n  command. Postgres is available behind the same store interface for hosted\n  deployments that need external durable storage.\n- Realtime over WebSocket with a durable event log. Reconnect with a cursor\n  to recover anything you missed; HTTP `\u002Fapi\u002Frealtime\u002Fevents` works as a\n  pull-style fallback.\n- Channels with Slack-style threads (one level, no nesting), reactions,\n  uploads, direct messages, and a guest waiting-room path with moderator\n  approvals, timeouts, and blocks.\n- CLI-managed bootstrap, magic-link auth, optional GitHub OAuth, and an\n  agent-friendly client mode for sending\u002Flisting\u002Freplying from scripts.\n- Framework-neutral [TypeScript SDK](packages\u002Fsdk-ts) and a tiny\n  [bot example](examples\u002Fbot-ts).\n- Mattermost-shaped incoming webhook and slash command surfaces for drop-in\n  scripts.\n\n## Documentation\n\nProduct domain: **[clickclack.chat](https:\u002F\u002Fclickclack.chat)**. App domain:\n**[app.clickclack.chat](https:\u002F\u002Fapp.clickclack.chat)**, with `\u002Fapp` as the\nlocal path. Docs domain:\n**[docs.clickclack.chat](https:\u002F\u002Fdocs.clickclack.chat)**, built from `docs\u002F`\nby `pnpm docs:site`. The [docs\u002F](docs\u002F) tree is organised so each file has a\nshort `read_when` hint at the top — open the one that matches your change.\n\n- **Start here:** [docs\u002FREADME.md](docs\u002FREADME.md) — landing page + index.\n- [Architecture](docs\u002Farchitecture\u002Foverview.md) — process layout, durable vs\n  realtime split.\n- [API overview](docs\u002Fapi\u002Foverview.md) — REST\u002FWebSocket surface and where to\n  find each endpoint.\n- [Data model](docs\u002Fdata-model.md) — tables, IDs, invariants.\n- [CLI](docs\u002Fcli.md), [Agent-friendly CLI](docs\u002Fagent-friendly-cli.md),\n  [Configuration](docs\u002Fconfiguration.md),\n  [Deployment](docs\u002Fdeployment.md), [Development](docs\u002Fdevelopment.md),\n  [Releasing](docs\u002Freleasing.md).\n- [TypeScript SDK](docs\u002Fsdk.md).\n\nPer-feature docs:\n\n| Feature          | Doc |\n|------------------|-----|\n| Auth             | [docs\u002Ffeatures\u002Fauth.md](docs\u002Ffeatures\u002Fauth.md) |\n| Moderation       | [docs\u002Ffeatures\u002Fmoderation.md](docs\u002Ffeatures\u002Fmoderation.md) |\n| Workspaces       | [docs\u002Ffeatures\u002Fworkspaces.md](docs\u002Ffeatures\u002Fworkspaces.md) |\n| Messages         | [docs\u002Ffeatures\u002Fmessages.md](docs\u002Ffeatures\u002Fmessages.md) |\n| Threads          | [docs\u002Ffeatures\u002Fthreads.md](docs\u002Ffeatures\u002Fthreads.md) |\n| Reactions        | [docs\u002Ffeatures\u002Freactions.md](docs\u002Ffeatures\u002Freactions.md) |\n| Realtime         | [docs\u002Ffeatures\u002Frealtime.md](docs\u002Ffeatures\u002Frealtime.md) |\n| Search           | [docs\u002Ffeatures\u002Fsearch.md](docs\u002Ffeatures\u002Fsearch.md) |\n| Uploads          | [docs\u002Ffeatures\u002Fuploads.md](docs\u002Ffeatures\u002Fuploads.md) |\n| Direct messages  | [docs\u002Ffeatures\u002Fdms.md](docs\u002Ffeatures\u002Fdms.md) |\n| Bots             | [docs\u002Ffeatures\u002Fbots.md](docs\u002Ffeatures\u002Fbots.md) |\n| Integrations     | [docs\u002Ffeatures\u002Fintegrations.md](docs\u002Ffeatures\u002Fintegrations.md) |\n\nThe product spec — locked decisions, milestones, and open questions — lives\nin [SPEC.md](SPEC.md).\n\n## Quick start\n\n```sh\npnpm install                                        # JS deps for SPA + SDK\npnpm build                                          # builds SPA, copies dist into the Go binary\ngo run .\u002Fapps\u002Fapi\u002Fcmd\u002Fclickclack serve --dev-bootstrap=true\n```\n\nFor a fresh local checkout, `--dev-bootstrap=true` boots a default user,\nworkspace, and channel so the SPA loads into something useful at `\u002Fapp`. The\nroot path is the public product website. Production and Docker defaults leave\ndev auth disabled.\n\n### Two-process dev loop\n\n```sh\npnpm dev:api                                        # Go server with dev bootstrap enabled\npnpm dev:web                                        # Vite dev server proxied to \u002Fapi\n```\n\n### CLI\n\n```sh\ngo run .\u002Fapps\u002Fapi\u002Fcmd\u002Fclickclack admin bootstrap \\\n  --name \"Peter\" --email steipete@gmail.com\n\ngo run .\u002Fapps\u002Fapi\u002Fcmd\u002Fclickclack admin magic-link create \\\n  --email steipete@gmail.com --name \"Peter\"\n\ngo run .\u002Fapps\u002Fapi\u002Fcmd\u002Fclickclack login --magic-token mgt_...\ngo run .\u002Fapps\u002Fapi\u002Fcmd\u002Fclickclack whoami\ngo run .\u002Fapps\u002Fapi\u002Fcmd\u002Fclickclack send --channel general \"click clack\"\ngo run .\u002Fapps\u002Fapi\u002Fcmd\u002Fclickclack messages list --channel general\ngo run .\u002Fapps\u002Fapi\u002Fcmd\u002Fclickclack threads reply msg_... --stdin \u003Creply.md\n\ngo run .\u002Fapps\u002Fapi\u002Fcmd\u002Fclickclack backup --out .\u002Fdata\u002Fbackup.db\ngo run .\u002Fapps\u002Fapi\u002Fcmd\u002Fclickclack export --out .\u002Fdata\u002Fexport.json\n```\n\nSee [docs\u002Fcli.md](docs\u002Fcli.md) for the implemented command reference and\n[docs\u002Fagent-friendly-cli.md](docs\u002Fagent-friendly-cli.md) for the target\nscript\u002Fagent contract.\n\n### Bot example\n\n```sh\nCLICKCLACK_URL=http:\u002F\u002Flocalhost:8080 \\\nCLICKCLACK_TOKEN=ccb_... \\\nCLICKCLACK_CHANNEL_ID=chn_... \\\nCLICKCLACK_TEXT=\"clack from bot\" \\\npnpm --filter @clickclack\u002Fexample-bot start\n```\n\nCreate bot tokens with `clickclack admin bot create`. See\n[docs\u002Ffeatures\u002Fbots.md](docs\u002Ffeatures\u002Fbots.md),\n[docs\u002Fbot-installs.md](docs\u002Fbot-installs.md), and [docs\u002Fsdk.md](docs\u002Fsdk.md).\n\n## Auth\n\nClickClack accepts, in order: an `Authorization: Bearer` session or bot token, the\n`cc_session` cookie, an `X-ClickClack-User` header, or a dev fallback to the\nfirst user in the DB. Magic-link tokens are mintable from the CLI today; the\nHTTP endpoint also exists. GitHub OAuth is opt-in via:\n\n```sh\nCLICKCLACK_PUBLIC_URL=https:\u002F\u002Fchat.example.com\nCLICKCLACK_GITHUB_CLIENT_ID=...\nCLICKCLACK_GITHUB_CLIENT_SECRET=...\n# Optional org gate:\n# CLICKCLACK_GITHUB_ALLOWED_ORG=openclaw\n# Optional moderator org for open guest login:\n# CLICKCLACK_GITHUB_MODERATOR_ORG=openclaw\n```\n\nWithout the org gate, GitHub users land in an isolated `Guests` workspace. When\n`CLICKCLACK_GITHUB_MODERATOR_ORG` is set, matching org members become\nmoderators and non-members start as waiting-room guests with a three-post daily\nbudget until a moderator approves them; if it is unset, open-login users join\nas normal members. See [docs\u002Ffeatures\u002Fmoderation.md](docs\u002Ffeatures\u002Fmoderation.md).\n\nDetails and trade-offs in [docs\u002Ffeatures\u002Fauth.md](docs\u002Ffeatures\u002Fauth.md).\nFor the CLI, stored session tokens, workspace defaults, and channel defaults\nare scoped to their saved server URL. Stored tokens are also skipped when\n`--user` \u002F `CLICKCLACK_USER_ID` is set, unless `--token` is explicitly\nprovided.\n\n## Tooling\n\n- TypeScript: `tsgo` from `@typescript\u002Fnative-preview`.\n- Lint\u002Fformat: `oxlint` and `oxfmt`.\n- Tests: `go test .\u002F...` for the backend, Playwright (`pnpm test:e2e`) for\n  the SPA.\n- Coverage gate: `pnpm coverage` fails under 85% Go line coverage.\n\n```sh\npnpm check        # go test + root\u002Fworkspace typecheck + lint + format check\npnpm coverage     # Go coverage with 85% gate\npnpm test:e2e     # Playwright\npnpm fmt          # gofmt + oxfmt write\npnpm fmt:check    # gofmt + oxfmt check, CI-compatible\ngoreleaser release --snapshot --clean  # local release smoke test\n```\n\n## Deployment\n\nSingle binary or Docker image. The repo `Dockerfile` is multi-stage and\nproduces a small Alpine image with the SPA baked in:\n\n```sh\ndocker build -t clickclack .\ndocker run --rm -p 8080:8080 -v clickclack-data:\u002Fapp\u002Fdata clickclack\n```\n\nFull deployment notes — data layout, reverse proxy, backups, OAuth setup —\nare in [docs\u002Fdeployment.md](docs\u002Fdeployment.md).\n\n## Status\n\nV1 is in-flight. The vertical slice (workspaces, channels, Markdown\nmessages, threads, realtime, reactions, search, uploads, DMs, magic-link\nauth, GitHub OAuth, guest-room moderation, Postgres, R2 uploads, Docker) is\nimplemented. See [SPEC.md](SPEC.md) for what is still open.\n\n## License\n\n[MIT](LICENSE).\n","ClickClack 是一个为 OpenClaw 代理和人类设计的实时团队聊天应用。其核心功能包括支持Slack风格的线程讨论、Discord般的友好界面以及轻量级的主题设计。技术上，它以Go语言编写，提供了一个集成了Svelte单页应用、SQLite数据库（支持WAL模式和FTS5搜索）及静态资源的单一可执行文件，无需额外的服务或独立的Web服务器即可运行。此外，ClickClack还通过WebSocket实现实时通讯，并支持持久化事件日志来确保消息不丢失。该工具非常适合需要自托管聊天解决方案的小到中型团队使用，尤其是在寻求替代Slack或Discord但又希望保持相似用户体验的情况下。","2026-06-11 03:32:27","CREATED_QUERY"]