Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 23 additions & 10 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ OP_SERVICE_ACCOUNT_TOKEN=
# Existing local encrypted vault files remain readable; no vault-writing API is provided.
BELL_VAULT_FILE=.bell/vault.enc.json
BELL_VAULT_MASTER_KEY=
# Personal 1Password Agentic Autofill for private Linq senders. See docs/onepassword.md.
# Personal 1Password Agentic Autofill for private Photon senders. See docs/onepassword.md.
# Keep disabled until Stagehand and 1Password can load together in a hosted session.
ONEPASSWORD_ENABLED=false
# Apply migrations/002_onepassword.sql and use a session-pooled PostgreSQL connection.
Expand All @@ -35,26 +35,39 @@ ONEPASSWORD_CLIENT_SECRET=
ONEPASSWORD_TOKEN_ENCRYPTION_KEY=
# Leave unset until hosted extension support is fixed. Setting this disables reusable Contexts.
BROWSERBASE_1PASSWORD_EXTENSION_ID=
# Optional Linq messaging. Keep tokens and your personal number in .env.local.
LINQ_API_KEY=
LINQ_WEBHOOK_SECRET=
# Your Linq receiving line in E.164 format, starting with + and country code.
BELL_LINQ_PHONE_NUMBER=
# Comma-separated E.164 numbers. Empty accepts nobody.
BELL_LINQ_ALLOWED_SENDERS=
# Optional Photon iMessage channel (Advanced gRPC). Set BELL_PHOTON_ENABLED=1 to run it.
# Builds work with it disabled. Keep secrets in .env.local.
BELL_PHOTON_ENABLED=false
# Stable Cloud project credentials for the managed iMessage line.
IMESSAGE_PROJECT_ID=
IMESSAGE_PROJECT_SECRET=
# The exact dedicated receiving line in E.164 format. Shared lines are rejected at startup.
BELL_PHOTON_PHONE_NUMBER=
# Comma-separated E.164 private allowlist. Empty accepts nobody and fails startup.
BELL_PHOTON_ALLOWED_SENDERS=
# Optional comma-separated iMessage email handles; empty denies email-origin input.
BELL_PHOTON_ALLOWED_EMAIL_SENDERS=
# Comma-separated admitted group chat GUIDs; empty keeps group ingress closed.
BELL_PHOTON_ALLOWED_GROUPS=
# Internal dispatch secret shared between the web app and the transport worker.
# At least 32 high-entropy bytes; never a provider token.
BELL_PHOTON_INTERNAL_SECRET=
# Private Eve origin the worker calls (loopback in production, e.g. http://127.0.0.1:4274).
# In development set the deterministic `eve dev` port or use EVE_BASE_URL's origin.
BELL_PHOTON_INTERNAL_ORIGIN=http://127.0.0.1:4274

# Baselayer sandbox. The principal must be current in the API key's organization.
BASELAYER_API_KEY=
BASELAYER_PRINCIPAL_REF=
BASELAYER_ALLOWED_ORIGINS=https://bell-stack-demo-site.vercel.app

# Optional database-free Link sandbox for one verified Linq principal.
# Optional database-free Link sandbox for one verified Photon principal.
# Inject the access token into the process environment; do not save it in this file.
LINK_SANDBOX=1
LINK_SANDBOX_ACCESS_TOKEN=
LINK_SANDBOX_PRINCIPAL_ID=

# Optional real Link OAuth for allowlisted Linq senders (LINK_SANDBOX=0).
# Optional real Link OAuth for allowlisted Photon senders (LINK_SANDBOX=0).
# Register <BELL_PUBLIC_URL>/api/link/oauth/callback with your Link OAuth client.
# Apply migrations/001_link_oauth.sql before connecting a wallet. See docs/link.md.
DATABASE_URL=
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,4 @@ coverage/
AGENT.md
AGENTS.md
CLAUDE.md
.photon-worker/
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
# BELL
# BELL · Photon

<p align="center"> <img width="128" height="128" alt="BELL" src="https://github.com/user-attachments/assets/f4c9363d-2ab0-4205-a3c7-7d7ad61ec6c6"/></p>

[BELL](https://www.browserbase.com/blog/bell-personal-assistant-stack) is a reference architecture and sample app for building personal AI assistants that execute tasks on your behalf.
This Photon edition of [BELL](https://www.browserbase.com/blog/bell-personal-assistant-stack) is a reference architecture and sample app for building personal AI assistants that execute tasks on your behalf, with native iMessage powered by Photon.

- Browserbase: Browser + Stagehand
- Eve by Vercel: Agent Framework
- Link by Stripe: Payments
- Linq: Messaging Infrastruture
- Photon: iMessage Infrastructure (Stable cloud, Advanced gRPC)
- 1Password: Authentication
- Baselayer: Identity

Expand All @@ -17,8 +17,8 @@
Requires Node.js 24, pnpm 10.33.4, and OpenAI and Browserbase API keys.

```sh
git clone https://github.com/browserbase/bell-stack.git
cd bell-stack
git clone https://github.com/tecxbro/bell-stack-photon.git
cd bell-stack-photon
pnpm install --frozen-lockfile
cp .env.example .env
```
Expand All @@ -36,8 +36,8 @@ pnpm dev
| --- | --- | --- |
| Browserbase + Stagehand | Browser sessions, automation, saved Contexts, and human handoff | [Browser runtime](docs/browser-runtime.md) |
| Eve by Vercel | Agent configuration, tools, conversation state, and channels | [Eve in Bell](docs/repository.md#eve-by-vercel) |
| Linq | iMessage and SMS through a signed webhook and sender allowlist | [Messaging setup](docs/linq.md) |
| Link by Stripe | Wallet authorization, spend approval, and checkout through Linq | [Sandbox and wallet setup](docs/link.md) |
| Photon | Native iMessage over a durable Advanced gRPC channel with a supervised transport worker | [Messaging setup](docs/photon.md) · [Capabilities](docs/photon-capabilities.md) |
| Link by Stripe | Wallet authorization, spend approval, and checkout through Photon | [Sandbox and wallet setup](docs/link.md) |
| 1Password | Operator credentials and OTP; personal Agentic Autofill is disabled by default | [Operator access](docs/browser-runtime.md#credentials-and-otp) · [Personal access status](docs/onepassword.md) |
| Baselayer | Verified access to approved merchants using short-lived credentials | [Merchant access](docs/baselayer.md) |

Expand Down
7 changes: 7 additions & 0 deletions agent/agent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,12 @@ export default defineAgent({
"pg",
],
},
experimental: {
workflow: {
// Keep finished-run data at the World default so the Photon output
// projector and incident recovery can re-read completed sessions.
retention: "default",
},
},
limits: { sessionTimeoutMs: 24 * 60 * 60 * 1_000 },
});
49 changes: 0 additions & 49 deletions agent/channels/linq.ts

This file was deleted.

Loading