My Secret Santa
Organize your Secret Santa gift exchange with private groups and anonymous messaging
翻译准备中
Manage a Discord server and WhatsApp group, answer questions, moderate, and grant admin powers
翻译准备中
AI 摘要 · README
社交TypeScript · JavaScriptGitHub @swampratnz自行安装运营者未确认
试用过了吗? 点一下就好,无需登录。
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
安装型项目无需部署域名也可验证。个人仓库可通过 GitHub 登录验证,组织仓库可使用上方的仓库验证文件。
正在加载完整 README。 以下为已保存的摘录。
Dave — a Claude-powered assistant that manages the NZ Claude Community
Discord server and a dedicated WhatsApp number from a single Ubuntu service.
It answers questions grounded in Anthropic's official docs and a curated
knowledge base, remembers past discussions (Postgres + pgvector), moderates, and
gives admins community-management powers that normal members don't have.
Built with the Claude Agent SDK,
authenticated with a Claude subscription (no per-token API billing). The repo
also runs a self-improving development pipeline (see below) that proposes,
reviews, and builds its own features.查看完整 README ↗Dave — a Claude-powered assistant that manages the NZ Claude Community Discord server and a dedicated WhatsApp number from a single Ubuntu service. It answers questions grounded in Anthropic's official docs and a curated knowledge base, remembers past discussions (Postgres + pgvector), moderates, and gives admins community-management powers that normal members don't have.
Built with the Claude Agent SDK, authenticated with a Claude subscription (no per-token API billing). The repo also runs a self-improving development pipeline (see below) that proposes, reviews, and builds its own features.
The framework is a package. The turn engine, router spine, platform adapters, storage, RBAC and config live in
@swampratnz/agent-baseand are consumed as a dependency. What is in this repo issrc/module/— this community's tools, prose, personas, skills, jobs and integrations — plussrc/index.ts, which handssrc/module/agentModule.ts's manifest to the package'screateAgent. Paths spelled@swampratnz/agent-base/…below name a module inside that package, not a file here.
Answers & knowledge
platform.claude.com/llms.txt) into the
knowledge base as trusted RAG chunks, refreshed weekly by content diff; an
opt-in daily refresh researches fast-moving Claude/Anthropic topics.save_knowledge, candidate review queue).check_status: reports Anthropic's live service status (its official
status page) so "is it me or an incident?" gets an authoritative answer.whats_new / catch_up: what changed in the bot lately (from the
changelog) and what the community discussed while you were away.AGENT_SKILLS_ENABLED): six bundled skills the
model loads only when a turn needs one — reviewing a member's prompt or tool
schema, critiquing an agent/pipeline design, walking through Claude Code
setup, choosing a model or plan, sequencing a learning path, and handling
project showcases. Enabling it also moves the prompt-review checklist out of
the always-on system prompt and into a skill loaded only when needed, so the
per-turn cached prefix shrinks for the majority of turns that never invoke
it.Community & members
/kb, /whois, /projects,
/guidelines — zero-model-call, ephemeral lookups.share_project, who_is_into), and opt into a helper pool the bot can
match askers to (find_helper).my_data shows what's stored about you;
forget_me deletes it. Cross-platform identity linking is member-initiated.Community tools (admins)
suggest_issue (files a
GitHub issue from chat) and dev_team_dispatch (sends an assess/deliver
job to a remote build service).Member feedback loops
Platform-agnostic core — Discord and WhatsApp are pluggable adapters; every privileged action is RBAC-gated, CONFIRM-guarded where destructive, and audited.
| Concern | Choice |
|---|---|
| Runtime | TypeScript on Node 22+ (Node 24 LTS in production) |
| Agent | @anthropic-ai/claude-agent-sdk (subscription auth) |
| Discord | discord.js v14 |
| Baileys (dedicated number) or the official Meta Cloud API | |
| Memory | PostgreSQL + pgvector, local embeddings (transformers.js) |
| Service | systemd on Ubuntu |
The framework — agent kernel and prompt spine, router spine, platform
adapters, storage, RBAC, config, the notice mechanism, jobs, alert/health
infra — is the @swampratnz/agent-base
package, not a directory here. What this repo holds is the deployment:
src/
index.ts composition root — the only file that may call createAgent
migrate.ts npm run migrate: base schema fragments, then this module's
module/ the NZ Claude Community module
agentModule.ts THE manifest — every extension point this deployment fills
routerWiring.ts the router's deps, assembled from module + package pieces
commands.ts the community command set
agent/ tool registry (tools/), prompt sections, personas, skills bundle
platforms/ adapter factories, adapter text packs, Discord slash commands
jobs/ the job registry (pinned start order) + community jobs
storage/ this deployment's schema fragments + policy keys
strings/ the notice pack (ids, axes, entries)
moderation/ the community bad-word list
context/ offline context builder, docs ingest, export, knowledge refresh
media/ image generation (Grok Build CLI)
status/ Anthropic status-page checker
github/ GitHub issue filing (suggest_issue)
devTeam/ remote dev-team build-service client
scripts/ CI gate helpers (security-test floor, context pack, imports, labels)
tests/ Node test-runner suites (SECURITY: invariants, knowledge eval, …)
deploy/ Ubuntu provisioning script + systemd unit
docs/ ARCHITECTURE, SECURITY, DEPLOYMENT, VISION, PIPELINE, PERSONAS, …
Three composition rules are enforced by npm run imports:check (CI's lint job)
and, for the last two, by an eslint rule scoped to src/module/**: src/base/
must not exist — a local copy of the framework forks the package silently;
src/module/ may never import the composition root; and only the composition
root may call createAgent, because the registration order is precisely what
createAgent exists to own. A module contributes a manifest and nothing else:
there are no side-effect imports in index.ts. See
docs/ARCHITECTURE.md → "The framework package, this
module, and the composition root".
npm install
cp .env.example .env # fill in tokens + DATABASE_URL
npm run migrate # create schema (needs Postgres + pgvector)
npm run whatsapp:link # scan QR with the bot's WhatsApp (one-time)
npm run dev # run with hot reload
Production deployment on Ubuntu: see docs/DEPLOYMENT.md.
Most features beyond the core Q&A are opt-in and off by default — enable them
per your community's needs via .env (see .env.example); the privacy-affecting
ones (ambient archiving, docs/context export) require a community notice first
(see SECURITY.md).
Three tiers with gated access by default: only registered members get
replies; admins add members (add_member); super admins (env-configured via
SUPER_ADMIN_*) grant admins and control policies. Admin data access is
scoped to conversations the admin actually participates in, destructive
actions require an out-of-band CONFIRM reply, and everything privileged is
audited + alerted. Set ACCESS_MODE_DISCORD=open later to let non-members ask
basic questions. See docs/SECURITY.md and
docs/ARCHITECTURE.md for the full tool matrix.
A multi-loop development pipeline proposes, hardens, and builds the bot's own
features, coordinated entirely through GitHub issues + labels: a research
loop files proposals, an adversarial loop reviews them against
VISION.md, a build loop (GitHub Actions) implements
approved ones on a branch and opens a PR, and an automated review loop
vets it. Bounded support loops keep PRs moving without a human in the loop
(one free CI rerun, CI-failure autofix, merge-conflict resolution,
review-response revisions, zombie-state cleanup), and a deterministic,
tightly gated auto-merge loop lands fully-vetted bot PRs — anything
touching governance, CI, or the loops' own guardrails still requires a
human merge, and branch protection on main is the backstop. See
docs/PIPELINE.md.
WHATSAPP_PROVIDER=cloud to use the official Meta Cloud API
adapter instead (see docs/ARCHITECTURE.md "Switching WhatsApp providers").docs/agents/module-map.md and the code