Skip to content

Feature request: local lifecycle hooks / notification integration for tools like peon-ping #376

@KyloJorgensen

Description

@KyloJorgensen

Summary

I'd like T3 Code to expose a clean integration surface for external local notification/sound tools like peon-ping.

peon-ping repo: https://github.com/PeonPing/peon-ping

peon-ping is an open-source local notifier for coding agents: it plays sound packs / voice lines, updates tab titles, and shows desktop notifications/overlays when an agent finishes work, needs approval, errors, or hits resource limits. It already integrates with multiple agent tools via small adapters/hooks.

This request is not necessarily "bundle peon-ping into T3." The more important part is exposing a stable local lifecycle/hook surface so tools like peon-ping can integrate cleanly.

Why this seems feasible

I dug through a local checkout of t3code and T3 already appears to have almost everything needed internally:

  • Canonical runtime events already exist for things like:
    • session.started
    • turn.started
    • turn.completed
    • request.opened
    • user-input.requested
    • runtime.error
    • account.rate-limits.updated
  • T3 also already projects turn/session state and has a notion of when a turn is actually settled / completed from the user's point of view.

So the missing piece seems to be an external/local notification sink or hook API, not the event modeling itself.

Why this would help

This would let users plug in tools like peon-ping without T3 needing to own every sound pack / voice pack / overlay implementation itself.

It also keeps the integration generic enough for:

  • peon-ping
  • custom shell notifiers
  • desktop tray tools
  • accessibility helpers
  • future local automation / agent workflow tools

Suggested shape

A good minimal version would be one of these:

  1. A stable desktop/local lifecycle hook API for key agent events.
  2. A small notification integration interface that external tools can subscribe to.
  3. A built-in desktop-only local bridge for peon-ping / similar tools behind a setting.

Important design detail

Because sound playback / desktop notifications should happen on the user's local machine, this probably should live in the desktop/local runtime (for example Electron main process or another local-only integration path), not purely in the browser UI and not only in a possibly-remote server process.

Suggested event mapping

Something like this would make external sound tools work well:

  • session.started -> session start / greeting
  • turn.started -> task acknowledged / working
  • successful turn.completed -> task complete
  • approval-style request.opened -> input required / permission needed
  • user-input.requested -> question pending
  • failed turn.completed or runtime.error -> task error
  • compaction / rate-limit style events -> resource limit
  • session exit -> session end / cleanup

One important nuance

The final "done" signal should be based on the actual settled turn completion signal, not intermediate task events.

In other words: an integration should avoid firing completion sounds for internal progress/task markers that happen before the user-visible turn is truly complete.

Request

Would you be open to either:

  • adding a generic local hook/integration surface for lifecycle notifications, or
  • adding a desktop-only integration path that makes tools like peon-ping work cleanly?

If helpful, I can also put together a concrete proposed event contract / mapping for peon-ping-style integrations.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions