Skip to content

feat: message footer redesign β€” πŸ“‚ project indicator, ambient trigger emojis, drop 🏷 #295

@nathanschram

Description

Summary

Redesign the message footer for clarity and space efficiency. Three changes:

1. Replace 🏷 dir: <project> with πŸ“‚ <project>

Before: 🏷 dir: claude-test | opus 4.6 (1M) · plan
After: πŸ“‚ claude-test | opus 4.6 (1M) Β· plan

  • Drop the 🏷 (label) emoji β€” it's decorative with no semantic meaning
  • Replace dir: text prefix with πŸ“‚ emoji β€” saves 5 characters, more scannable
  • πŸ“‚ (open file folder, U+1F4C2) is universally recognised on all platforms
  • When no project context exists (DM chats), the line starts with model info directly

2. Ambient trigger indicators on human-initiated runs

When a chat has active crons or webhooks, show bare emoji indicators in the footer even on normal (non-trigger) runs:

Human run in chat WITH crons: πŸ“‚ myapp | opus 4.6 (1M) Β· plan Β· ⏰
Human run in chat WITH webhooks: πŸ“‚ myapp | opus 4.6 (1M) Β· plan Β· ⚑
Human run in chat WITH both: πŸ“‚ myapp | opus 4.6 (1M) Β· plan Β· ⏰ ⚑
Trigger-initiated run (full label stays): πŸ“‚ myapp | codex-mini Β· ⏰ cron:daily-review
Webhook-initiated run: πŸ“‚ myapp | codex-mini Β· ⚑ webhook:github-push

The bare emoji signals "triggers are active here" without cluttering every message with labels. The full ⏰ cron:<id> / ⚑ webhook:<id> label is reserved for runs that were actually caused by a trigger.

3. Separate emojis for crons vs webhooks

  • ⏰ = crons (time-based, scheduled)
  • ⚑ = webhooks (event-based, on-demand)

These become the universal Untether emojis for these concepts β€” used consistently across /ping, footers, /config, and startup messages.

Implementation

Files to modify:

  • src/untether/directives.py:150-151 β€” format_context_line(): change f"dir: {alias}" to f"πŸ“‚ {alias}"
  • src/untether/markdown.py:392 β€” _format_footer(): remove \N{LABEL} prefix, lead with context_line or meta_line directly
  • src/untether/markdown.py:312-328 β€” format_meta_line(): add ambient trigger indicator logic (query TriggerManager for active crons/webhooks in the chat)
  • src/untether/runner_bridge.py β€” pass chat_id context to ProgressTracker so it can query active triggers

Tests to update:

  • test_meta_line.py β€” update 54 tests for new footer format
  • test_exec_bridge.py β€” footer rendering tests

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions