My Secret Santa
비공개 그룹과 익명 메시지로 시크릿 산타 선물 교환을 관리합니다
Discord 서버와 WhatsApp 그룹을 관리하고 질문에 답변·중재·관리자 권한을 부여
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