openclaw - 💡(How to fix) Fix [Feature]: [Feishu] Card header/footer customization: hide agent label, show elapsed time & completion status, support reply-to context [1 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#60748Fetched 2026-04-08 02:47:36
View on GitHub
Comments
0
Participants
1
Timeline
1
Reactions
0
Author
Participants
Timeline (top)
labeled ×1

Allow Feishu card header and footer to be customized: hide the static agent ID label, display response elapsed time and completion status, and optionally show reply-to context in the header.

Root Cause

Allow Feishu card header and footer to be customized: hide the static agent ID label, display response elapsed time and completion status, and optionally show reply-to context in the header.

Fix Action

Fix / Workaround

1. Card header: replace agent ID with reply-to context

Show a truncated quote of the user message being replied to, similar to native chat reply-to UI. Fallback options: custom display name or hidden entirely.

{
  channels: {
    feishu: {
      cardHeader: {
        mode: "reply-to" | "custom" | "hidden",
        customTitle: "My Bot"
      }
    }
  }
}
2. Card footer: wire up elapsed/status and allow hiding developer metadata
Actually render footer.elapsed and footer.status (already accepted by schema). Add toggles for each footer element:
{
  channels: {
    feishu: {
      footer: {
        elapsed: true,
        status: true,
        agent: false,
        model: false,
        provider: false
      }
    }
  }
}
3. Allow hiding header/footer entirely
{
  channels: {
    feishu: {
      cardHeader: { mode: "hidden" },
      footer: { enabled: false }
    }
  }
}
**Alternatives considered:**
Switch to renderMode: "text" to avoid header/footer entirely, but this loses card markdown formatting (tables, code blocks, etc.)
Manually patch the bundled JS to modify card rendering, but this breaks on every upgrade
RAW_BUFFERClick to expand / collapse

Summary

Allow Feishu card header and footer to be customized: hide the static agent ID label, display response elapsed time and completion status, and optionally show reply-to context in the header.

Problem to solve

In Feishu card mode (renderMode: "card"), the card header always shows the raw agent ID (e.g., "main") which is meaningless to end users. The footer displays developer-facing metadata (Agent / Model / Provider) that wastes card real estate. Meanwhile, the config keys channels.feishu.footer.elapsed and channels.feishu.footer.status are accepted by the schema validator in v2026.4.2 but have no actual rendering effect — they are silently ignored. Users want to see:

  1. Which message the bot is replying to (reply-to context in the header) instead of a static "main" label
  2. Completion status and elapsed time (e.g., "✅ Done · 3.2s") in the footer instead of Agent/Model/Provider
  3. The ability to hide header/footer entirely for a clean chat experience

Proposed solution

1. Card header: replace agent ID with reply-to context

Show a truncated quote of the user message being replied to, similar to native chat reply-to UI. Fallback options: custom display name or hidden entirely.

{
  channels: {
    feishu: {
      cardHeader: {
        mode: "reply-to" | "custom" | "hidden",
        customTitle: "My Bot"
      }
    }
  }
}
2. Card footer: wire up elapsed/status and allow hiding developer metadata
Actually render footer.elapsed and footer.status (already accepted by schema). Add toggles for each footer element:
{
  channels: {
    feishu: {
      footer: {
        elapsed: true,
        status: true,
        agent: false,
        model: false,
        provider: false
      }
    }
  }
}
3. Allow hiding header/footer entirely
{
  channels: {
    feishu: {
      cardHeader: { mode: "hidden" },
      footer: { enabled: false }
    }
  }
}
**Alternatives considered:**
Switch to renderMode: "text" to avoid header/footer entirely, but this loses card markdown formatting (tables, code blocks, etc.)
Manually patch the bundled JS to modify card rendering, but this breaks on every upgrade

### Alternatives considered

_No response_

### Impact

Affected: All Feishu DM and group chat users using card renderMode
Severity: Medium — does not block workflow but degrades daily UX
Frequency: Every single message — the useless header/footer appears on 100% of card replies
Consequence: Card header ("main") wastes space with no user value; footer shows developer metadata (Agent/Model/Provider) instead of actionable info like elapsed time and completion status. Users cannot distinguish which message is being replied to in long conversations. The existing footer.elapsed and footer.status config keys are silently ignored despite passing schema validation, creating a false sense of configurability.

### Evidence/examples

 Config `channels.feishu.footer.elapsed: true` and `channels.feishu.footer.status: true` pass `openclaw doctor` validation on v2026.4.2 but have zero rendering effect in the actual Feishu card
- Related issue: #56882 (footer config rejected by schema in older versions — now accepted but still not rendered)
- Comparable: Telegram and Discord channels show elapsed time; Feishu card mode does not
- Screenshot of current card showing static "main" header and "Agent: main | Model | Provider" footer attached

### Additional information

OpenClaw v2026.4.2, Feishu built-in plugin, renderMode: card, streaming: false
- Must remain backward-compatible with existing config keys
- Ideally the reply-to header mode could reuse the existing Feishu message reply_in_thread / root_id metadata already available in the inbound event payload

extent analysis

TL;DR

Implementing custom card header and footer configurations for Feishu, such as displaying reply-to context, elapsed time, and completion status, requires updating the rendering logic to respect the channels.feishu.cardHeader and channels.feishu.footer configuration options.

Guidance

  1. Update the card header rendering logic to support the mode option in channels.feishu.cardHeader, allowing it to display reply-to context, a custom title, or be hidden entirely.
  2. Implement the rendering of footer.elapsed and footer.status in the card footer, and add toggles for each footer element to control their visibility.
  3. Add support for hiding the header and footer entirely by introducing an enabled option in the channels.feishu.footer and channels.feishu.cardHeader configurations.
  4. Ensure backward compatibility with existing configuration keys to prevent disruptions to current users.
  5. Leverage existing Feishu metadata for reply-to context, such as reply_in_thread or root_id, to minimize additional data requirements.

Example

{
  "channels": {
    "feishu": {
      "cardHeader": {
        "mode": "reply-to",
        "customTitle": "My Bot"
      },
      "footer": {
        "elapsed": true,
        "status": true,
        "agent": false,
        "model": false,
        "provider": false,
        "enabled": true
      }
    }
  }
}

Notes

The implementation should be mindful of the versioning and compatibility, ensuring that the changes do not introduce breaking changes for users on older versions. Additionally, thorough testing should be conducted to verify that the new configurations behave as expected across different scenarios.

Recommendation

Apply the proposed workaround by implementing the necessary changes to support custom card headers and footers, ensuring that the solution is backward-compatible and leverages existing metadata when possible. This approach addresses the user's needs directly and provides a more user-friendly experience in Feishu card mode.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING