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

Source: https://github.com/geeorgey/ChappyTag

Built With

Share this project:

Updates