TreeMap
무료 오픈소스 디스크 사용량 시각화 도구로, 사각형 트리맵·중복 파일 탐색·디스크 가득 예측·정리 시 파일을 휴지통으로만 이동한다
Serain은 iMessage에 존재하고 자체 서버에서 실행되는 오픈소스 개인 AI 에이전트입니다
Serain is an open-source personal AI agent that lives in iMessage and runs on your own server. Mail, calendar, research and memory, with a confirmation before anything that cannot be undone.
생산성TypeScript · CSSGitHub @valewnrt온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A personal AI agent you text over iMessage. One owner, self-hosted, running 24/7 on your own server.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A personal AI agent you text over iMessage. One owner, self-hosted, running 24/7 on your own server. Serain writes like a friend, not like a chatbot: short, natural, in your language, a tapback instead of a message when that is enough.
Serain is a private project built with the care of a product. It is not a hosted service, has no multi-user mode, and you bring every account and key yourself. Read Legal and Costs before you start.README 전문 보기 ↗A personal AI agent you text over iMessage. One owner, self-hosted, running 24/7 on your own server. Serain writes like a friend, not like a chatbot: short, natural, in your language, a tapback instead of a message when that is enough.
serain.si · Connectors · Deutsche Fassung: README.de.md
Serain is a private project built with the care of a product. It is not a hosted service, has no multi-user mode, and you bring every account and key yourself. Read Legal and Costs before you start.
Serain answers in the language you write in: German in, German out; Turkish in, Turkish out. OWNER_LANGUAGE (default en) is only the starting point until Serain has seen your messages. Fixed texts such as previews and confirmation questions ship in English and German; for any other language they are translated once and cached. Content that matters, like the text and recipients of an email, is always shown verbatim. You confirm with 👍, whatever the language. Checks that read your words (a "yes" that confirms, a sender you named yourself) know English and German, plus the translated words of your current language where that is safe; in any other case Serain errs on the side of a preview.
Highlights:
Optional extras: a web interface (audit log, memory, a sealed vault for logins and files, connections), a Mac companion for Apple Calendar, Reminders and Contacts, a COROS watch, and read-only access to your own bank account.
Serain is a long-lived Node.js 22 process (TypeScript, strict) under systemd on a small Linux VM. iMessage arrives through Photon over an outbound gRPC stream, so the server opens no port except SSH. A chat model (Claude through the Claude Agent SDK, with pre-warmed processes for fast replies) talks to you and holds your personal data; an executor model does web research and browsing and never sees your mailbox or memory. Code runs in a Docker sandbox without network. State lives in Supabase Postgres: memory with pgvector, the append-only audit log, approvals, schedules and sealed credentials. The optional web interface is a Cloudflare Worker behind Cloudflare Access; the optional Mac companion is reachable only through an SSH reverse tunnel on loopback. Details and the reasoning behind each decision (the D numbers you will see in the code): docs/ARCHITECTURE.md.
Serain can send email and will eventually be allowed to spend money. Security is the first priority, ahead of style and autonomy.
read, write_reversible, irreversible or money. The tool registry refuses to register or run an irreversible or money tool without a confirmation spec. It fails closed.money never does.OWNER_PHONE) reaches the model. Group chats and unknown senders are dropped before any model call and before any tool.serain stop and all tools are locked, including approvals that were still pending, until you text serain resume. serain stop works whatever language you write in (the German serain stopp and serain weiter work too, and so do the words of your current language). serain revoke withdraws every standing approval. The words are matched by code outside the model and the state is stored in the database, so a restart cannot lift it; if the state cannot be read, Serain locks itself.--network none, read-only and without capabilities, started by a separate root-owned helper; the service user is not in the docker group. Outbound messages are rate limited.Found a way around any of this? See SECURITY.md.
| Component | What it unlocks | |
|---|---|---|
| Required | Supabase project (Free plan works) | Database: memory, audit log, approvals, schedules |
| Required | Linux VM with Docker (Ubuntu 24.04, ARM64 or x86-64, 4 GB RAM minimum, 8 GB recommended) | Runs Serain, the sandbox and the browser |
| Required | Photon account (Free plan, shared number) | The iMessage channel |
| Required | Claude access: an Anthropic API key (or your own subscription token, see Legal) | The chat and executor models |
| Required | An Apple device with iMessage for you | Talking to Serain |
| Optional | Web interface: Cloudflare account and your own domain | Audit log, memory editor, vault (logged-in sessions, files), connections |
| Optional | Mac companion (macOS with Xcode Command Line Tools) | Apple Calendar, Reminders, Contacts, a browser with your home IP |
| Optional | Google Cloud OAuth app (testing mode) | Gmail and Google Calendar |
| Optional | iCloud app-specific password | iCloud Calendar over CalDAV |
| Optional | Any IMAP/SMTP mailbox | Reading, cleaning up and sending mail |
| Optional | A separate mailbox for Serain | Serain writes as itself, never in your name |
| Optional | OpenRouter API key | Fallback model, semantic memory search (embeddings), videos (Gemini), a hosted voice for spoken replies |
| Optional | Tavily API key |
Only the code is free. Everything else is your own account with its own terms.
| Item | Cost |
|---|---|
| Serain | Free (AGPL-3.0) |
| Claude API | Pay per token; depends entirely on how much you use Serain. Serain counts it against its monthly cap (SERAIN_API_BUDGET_USD, default 20 $) and stops paid calls, the chat included, when the cap is reached (from 80 % it saves: no proactive check-ins, cheaper fallback models). Set the same limit in the Anthropic Console as a backstop. |
| Claude subscription (alternative) | Your existing personal plan, see Legal |
| Supabase | Free plan is enough for one user |
| Photon | Free plan with a shared number |
| Server | Oracle Cloud Always Free costs nothing but requires a credit card at sign-up; any other VPS with 4 GB RAM or more works too (typically a few euros a month) |
| Domain (only for the web interface) | Roughly 5 to 15 € a year; Cloudflare Workers, Access (up to 50 users) and Hyperdrive are free |
| OpenRouter (optional) | Pay per use. Counts against the same monthly cap; set a limit on the key itself too. An hour of YouTube costs about 0.17 $. |
| Tavily, Healthchecks.io, Enable Banking, Google Cloud | Free tiers are enough |
| Typesafe (optional) | Pay per use |
This is not legal advice. This section summarises what the author found when checking the terms of every service involved. You run your own instance and you are responsible for how you use it.
@anthropic-ai/claude-agent-sdk, which is proprietary ("All rights reserved") and governed by Anthropic's terms. It is installed from npm as a dependency, never vendored into this repository, and it is not covered by the AGPL.CLAUDE_CODE_OAUTH_TOKEN) is possible for strictly personal use, at your own risk. Never collect, share or forward anyone else's tokens.SERAIN_MEDIA_DOWNLOAD=1, at your own risk; the platforms' terms generally prohibit downloading. YouTube is never downloaded: Google AI Studio fetches the public URL itself. YouTube's terms prohibit downloads, and German case law (OLG Hamburg, 5 U 54/23) treats circumventing YouTube's technical protection as a violation of §95a UrhG. Serain does not bypass bot protection and does not log in to these platforms.This software is provided "as is", without warranty of any kind, as stated in sections 15 and 16 of the license. Serain acts on your behalf with real accounts: it reads your mail, sends messages, changes your calendar and may cause costs with third-party providers. You are responsible for configuring it, for every action you confirm, and for complying with the terms of every service you connect. The author is not liable for damages, costs, lost data, blocked accounts or legal consequences arising from its use.
The full guide, in dependency order, is docs/SETUP.md; pnpm setup:check shows at every step where you stand and what comes next. A coding agent such as Claude Code or Codex can walk you through it: it follows AGENTS.md, and your keys stay with you. In short:
supabase/migrations/ with psql.cp .env.example .dev.vars and fill in the required values (OWNER_NAME, OWNER_PHONE, OWNER_TIMEZONE, Photon, Supabase, Claude).deploy/provision.sh, copy the secrets, run pnpm db:password.SERAIN_ECHO_ONLY=1 pnpm dev, then roll out with ./deploy/deploy.sh.cp -r data.example data, write about yourself, pnpm memory:push --apply.pnpm install
pnpm typecheck # server, web worker and web client
pnpm test # unit, integration and fuzz tests (fixed seed)
pnpm fuzz # 2,000 fuzz cases
pnpm dev # run locally against your .dev.vars
SERAIN_ECHO_ONLY=1 pnpm dev # echo instead of the model: tests the channel at no cost
pnpm web:dev # web interface on http://localhost:8787
pnpm web:e2e # end-to-end test of the web interface (throwaway database)
pnpm eval --list # evals for prompts and models (real model calls, cost money)
Only one process may be connected to Photon at a time. If the service runs on the server, stop it (systemctl stop serain) before pnpm dev, otherwise both receive every message and you get two replies.
Tests never touch real accounts: vitest.config.ts sets dummy values for every credential. Evals play the invented owner "Alex" (eval/persona.ts) and call real models with your keys; changes to prompts or style need one. Code, comments and prompts are in English.
src/agent/ model layer (Claude Agent SDK, OpenRouter fallback), prompts, tools, turns
src/channel/ Channel interface and the Photon adapter
src/security/ allowlist, kill switch, approvals, untrusted content, link checks
src/db/ Supabase and Postgres access, audit log
src/memory/ facts, user model, embeddings, procedures
src/mail/ IMAP/SMTP and Gmail, cleanup, findings
src/calendar/ CalDAV and Google Calendar
src/executor/ the executor: web research and browsing
src/browser/ server-side Chrome
src/connectors/ connected services (catalog and drivers)
src/sandbox/ client for the Docker sandbox helper
src/scheduler/ reminders, scheduled tasks, watchers
src/health/ heartbeat, watchdog, dead man's switch
src/config/ environment, owner settings, models, limits
src/i18n/ languages: detection, catalog of fixed texts, words the code reads
web/ web interface (Cloudflare Worker and client)
site/ serain.si, the project's website and connector directory
companion/ Mac companion
deploy/ provisioning, deployment, systemd units, sandbox image
supabase/ migrations
test/ tests, including test/fuzz
eval/ evaluations for models and prompts
scripts/ setup and maintenance commands
instance/ your own additions, outside the repository (docs/INSTANCE.md)
data.example/ template for your own base knowledge (copy to data/, gitignored)
Serain is at an early stage. Every instance has exactly one owner. The agent speaks any language you write in. Its style prompt is in English; changes to it go through the chat eval (pnpm eval).
Roadmap:
Contributions are welcome within the project's scope: a self-hosted agent for one owner. Read CONTRIBUTING.md first. Security issues go through private reporting, see SECURITY.md. This project follows the Code of Conduct.
Copyright (C) 2026 Valentin Weinert
Serain is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License v3.0 only (AGPL-3.0-only) as published by the Free Software Foundation. It is distributed without any warranty; see the license for details. You may use, study, modify and share Serain. If you run a modified version as a network service for others, you must offer them its source code under the same license. The point: nobody can turn Serain into a closed hosted service.
Commercial licenses. If the AGPL's terms do not fit what you want to do, for example building Serain into a product or service without publishing your source code, the author offers commercial licenses. Contact details are in the imprint. Contributions are accepted under the Contributor License Agreement, which keeps both possible.
Not affiliated with Anthropic or Apple.
| Web search |
| Optional | Typesafe API key | Browser pilot for multi-step web tasks |
| Optional | Enable Banking app (needs the web interface) | Read-only access to your own bank account |
| Optional | COROS account (needs the web interface) | Sleep, HRV, training load from your COROS watch |
| Optional | Healthchecks.io check | An alarm outside iMessage when the server or the channel is down |