Problem
The plugin exports traces without any tags. In a shared Langfuse project that receives traces from multiple agent tools (Claude Code, OpenCode, Hermes, Codex...), there is no way to filter traces by which tool produced them.
Notably, the Claude Code plugin already hardcodes a claude-code trace tag on every trace, so traces from different tools are inconsistently filterable.
For example — we self-host Langfuse and aggregate traces from several coding agents into one project. Claude Code traces can be filtered by tag, OpenCode traces cannot:
| Tool |
Trace tags in UI |
| Claude Code plugin |
claude-code |
| OpenCode plugin |
(none) |
Proposed solution
Add an optional tags field to the credentials config (~/.config/opencode/opencode-langfuse.json):
{
"publicKey": "pk-lf-...",
"secretKey": "sk-lf-...",
"tags": ["opencode", "production"]
}
plus a LANGFUSE_TAGS env var (comma-separated) for env-only setups, mirroring the existing env-var pattern (LANGFUSE_USER_ID, LANGFUSE_SERVICE_NAME, ...).
Implementation: a makeTraceTagsSpanProcessor following the existing makeUserIdSpanProcessor pattern, setting the langfuse.trace.tags OTTL attribute on every span — @langfuse/core's OTEL endpoint maps this attribute to Langfuse trace tags.
Workaround currently in use
Manually patching dist/index.js in the opencode plugin cache to add one span.setAttribute("langfuse.trace.tags", ...) line. Works, but is wiped on every plugin update.
Use case: multi-agent observability rollouts where one Langfuse project serves a whole team's coding agents and dashboards/queries filter by agent type.
I have a PR ready implementing this (config file + env var, merged & de-duplicated, capped at 50 tags, README updated).
Problem
The plugin exports traces without any tags. In a shared Langfuse project that receives traces from multiple agent tools (Claude Code, OpenCode, Hermes, Codex...), there is no way to filter traces by which tool produced them.
Notably, the Claude Code plugin already hardcodes a
claude-codetrace tag on every trace, so traces from different tools are inconsistently filterable.For example — we self-host Langfuse and aggregate traces from several coding agents into one project. Claude Code traces can be filtered by tag, OpenCode traces cannot:
claude-codeProposed solution
Add an optional
tagsfield to the credentials config (~/.config/opencode/opencode-langfuse.json):{ "publicKey": "pk-lf-...", "secretKey": "sk-lf-...", "tags": ["opencode", "production"] }plus a
LANGFUSE_TAGSenv var (comma-separated) for env-only setups, mirroring the existing env-var pattern (LANGFUSE_USER_ID,LANGFUSE_SERVICE_NAME, ...).Implementation: a
makeTraceTagsSpanProcessorfollowing the existingmakeUserIdSpanProcessorpattern, setting thelangfuse.trace.tagsOTTL attribute on every span —@langfuse/core's OTEL endpoint maps this attribute to Langfuse trace tags.Workaround currently in use
Manually patching
dist/index.jsin the opencode plugin cache to add onespan.setAttribute("langfuse.trace.tags", ...)line. Works, but is wiped on every plugin update.Use case: multi-agent observability rollouts where one Langfuse project serves a whole team's coding agents and dashboards/queries filter by agent type.
I have a PR ready implementing this (config file + env var, merged & de-duplicated, capped at 50 tags, README updated).