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 summary · README
SocialTypeScript · JavaScriptGitHub @swampratnzSelf-installOwner unconfirmed
Paste into Claude or ChatGPT for installation instructions suited to your environment.
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Installable projects can be verified without a deployment domain. Use GitHub sign-in for a personal repository, or the repository verification file above for an organization repository.
Ask about other verification options
Loading the full README. The saved excerpt is shown below.
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.Read the full 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