Inspiration
Slack channels contain decisions, blockers, questions, and social signals, but most assistants wait passively for an explicit prompt. We wanted a teammate that feels present without becoming noisy—and that never turns shared context into opaque, centrally owned memory.
What it does
Chappy Tag is a proactive Slack teammate. It:
- reacts to meaningful ordinary messages with varied, context-appropriate emoji;
- offers concise help in the original thread when it detects a high-confidence blocker, question, or deadline;
- answers direct mentions in a real Slack thread;
- exposes Slack-native Plan and Task progress while it works, then replaces that same deterministic message with the final answer;
- turns recurring requests and consented Quiet Loops into privacy-safe Slack Task Work Objects with stable IDs, owner, status, due or next-run time, and controls;
- creates a user-owned, editable Slack Canvas as channel memory on first use;
- shows the exact model and reasoning level used;
- lets members configure model, reasoning, action frequency, response audience, and encrypted custom instructions in a native Slack modal; and
- keeps every participant's ChatGPT execution identity and personal settings separate.
The public experience is bilingual. Japanese is used only for Japanese browser locales; every other locale defaults to English.
How we built it
Slack Events and interactivity enter a Cloudflare Worker that verifies signatures and resolves the installation. Bounded jobs go through a Queue into a channel-scoped Durable Object for deduplication, membership checks, semantic reactions, settings, Quiet Loops, recurring tasks, and Canvas lifecycle.
Ordinary semantic reactions stay on the low-cost edge path and never wake a Codex container. Only direct requests or high-confidence opportunities to help can invoke an actor-scoped Runtime Cell. Runtime cells run Codex App Server inside a Cloudflare Sandbox, keep each user's encrypted ChatGPT identity separate, and scale to zero after thirty idle minutes. A global three-lease admission limit and usage guardrails keep the planned Cloudflare operating envelope below $100/month.
Slack's native Plan and Task blocks show four safe stages—understand the request, review channel-scoped context, do the required work, and prepare the response—without exposing private chain-of-thought. Slack Assistant API status, title, and suggested prompts improve the Agent DM/App Home surface. Channel replies continue to use threaded Slack messages, so the experience works where teams already collaborate.
Recurring-task and Quiet Loop notifications carry Slack Task Work Object metadata. Their public preview fields are intentionally privacy-safe: stable opaque ID, owner, status, dates, and a return URL—never the private task prompt, custom instructions, Canvas contents, or cross-channel context.
The Codex bridge exposes one schema-checked text operation. It does not expose shell, generic RPC, browser control, MCP, plugins, image generation, or subagents. Slack Connect and organization-shared channels fail closed to prevent cross-tenant context mixing.
How Codex and GPT-5.6 helped
Codex accelerated repository inspection, implementation, regression testing, Cloudflare deployment, live Slack verification, bilingual website work, threat-boundary review, and creation of the Remotion demo video. GPT-5.6 powers the product's bounded response turns, and Chappy displays the actual model and reasoning effort in Slack.
Human product decisions defined the boundaries: user-owned Canvas memory, per-user ChatGPT identity, proactive-but-bounded behavior, visible native progress, owner-controlled Work Objects, Slack-native settings, and the under-$100/month operating target.
Challenges
The hardest parts were not generating text. They were:
- keeping shared channel context separate from personal execution identity;
- reacting quickly without keeping expensive containers awake;
- deciding when proactive help is useful rather than distracting;
- making every response land in the correct Slack thread;
- preserving secure Device Code authentication without leaking one-time codes;
- making retries idempotent while one visible Plan evolves into the final answer; and
- designing Work Object metadata that remains useful without leaking private work.
Live testing in #openai-build-week-2026 caught custom-emoji false positives, thread-placement bugs, cold-start behavior, and model availability edge cases before submission.
What we learned
A useful workplace agent needs social timing, visible progress, durable work identity, clear controls, and explicit ownership as much as model quality. Cheap edge reactions plus selective reasoning turns create a more human feel while keeping the cost envelope predictable.
What's next
We will expand multi-workspace onboarding, richer Work Object previews, operator noise/cost monitoring, and more owner-controlled team rituals. The architecture already keeps installation, channel, user identity, and Slack Connect boundaries explicit.
Try it: https://chappy.lvnsk.jp
Built With
- assistant-api
- cloudflare
- codex
- durable
- durable-objects
- gpt-5.6
- javascript
- openai
- r2
- remotion
- slack
- slack-canvas
- typescript
- work-objects
Log in or sign up for Devpost to join the conversation.