本文へ移動
cccskills
無料GitHub で公開

telegram-relay

Use when: Router bridges your team and the remote team across Telegram. Classifies inbound messages from the remote agent, dispatches Builder or Tester as subagents, composes replies, and posts outbound state-change notifications.

インストール方法を見る

含まれるファイル(2)

  • SKILL.md9.2 KB
  • skill.manifest.json585 B

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Telegram Relay

Use this skill when Router needs to bridge your team and the remote team across Telegram. The skill defines Router's behaviour rules on top of the hub relay daemon (cli/relay/). Router calls relay_send for outbound; inbound arrives as parsed jobs via relay_inbox_peek.

Scope

  • In scope: classifying parsed inbound Telegram messages from the remote agent, dispatching Builder or Tester as subagents to handle the request, composing replies, posting state-change notifications outbound, enforcing information classification.
  • Out of scope: internal Architect ↔ Builder or Architect ↔ Tester traffic; reading raw Telegram channels; building bot infrastructure.

Channel

  • One shared Telegram group where Router (your team's bot) and the remote agent both operate.
  • Inbound addressing: remote team messages must start with Router's configured display name (from agents.router.displayName, e.g. Atlas, …) or Router, … when no display name is set. The relay daemon ignores group messages without this salutation.
  • Outbound addressing: every relay_send body is prefixed with the remote agent's name (from remoteTeam.agentName, e.g. Max, …) by the daemon when missing.
  • The team lead is in the channel for awareness; team-lead-only escalations go via memory/router.md HOT and surface at morning-standup or end-of-day dreaming.

Inbound — Remote Agent to Your Team

The runtime parses the remote agent's message and invokes Router with structured fields:

  • issue number
  • pull request URL or number
  • branch
  • changed areas
  • local validation results
  • CI results
  • blockers or exceptions
  • requested next action

Router never reads the raw channel and never owns the Telegram tool surface — the runtime does.

Classification

Use the internal-relay state vocabulary:

Incoming signalWorkflow stateAction
PR ready, review requestreview_requestedSpawn Builder as subagent with parsed fields
CI failure, build failureci_failedSpawn Builder as subagent; include CI exception
Ready for QA, retestqa_requestedSpawn Tester as subagent in Pre-QA Readiness Check mode only
Blocked, waiting on somethingblockedSpawn Builder if engineering blocker; log to Router HOT if decision blocker
Approval, scope, price, timelinedecision_requiredLog to Router HOT; surface at standup or dreaming
FYI, status updateinfo_onlyCompose short ack; no subagent spawn
Missing contextunclearAsk one concise clarification question; no subagent spawn

Subagent dispatch prompt template

When spawning Builder or Tester, pass:

  • Sender: remote agent
  • Workflow state: [classified state]
  • Original message context (parsed fields from runtime)
  • Expected response type: answer | confirmation of receipt | clarification
  • Constraint: response will be posted on Telegram via the runtime; keep it short, inter-team-sharable, and free of team-internal or confidential content.

Tester-as-subagent constraint

Subagent-spawned Tester cannot run live tests — browser-driven QA needs the shared browser tab and a direct Tester session. On qa_requested inbound, Tester operates in Pre-QA Readiness Check mode only (see qa-ticket-workflow):

  • confirms the Developer → QA handoff payload is complete
  • queues the ticket in memory/tester.md HOT
  • returns READY or INCOMPLETE: [missing fields]

If the remote agent requests actual test execution, Tester's response is a queue confirmation only.

Reply composition

Router takes the subagent response, applies the information-classification check (see below), then calls relay_send({ text }) to post. The reply attributes the originating agent (e.g., "Builder: ...", "Tester: ...").

Outbound — Builder / Tester to Remote Agent

Outbound is state-machine driven, not free-form messaging. Builder or Tester dispatches Router as a subagent only after a state transition that warrants inter-team notification.

State-transition trigger table

State transitionSending agentNotification template
any → state:ready-for-implementation on a delegated ticketBuilder"Max, Ticket #N ready for remote agent to implement. <link>"
any → state:ready-for-qa on a delegated ticketBuilder"Max, Ticket #N in state:ready-for-qa, please pick up first-pass QA. <link>"
state:ready-for-qa → state:changes-requested (Tester-side defect)Tester"Max, Ticket #N retest failed, defects on report. <link>"
state:ready-for-qa → state:qa-passedTester"Max, Ticket #N retest passed clean."
any → state:blocked requiring remote team inputBuilder"Max, Ticket #N blocked on <reason>. Need <input>."

Transitions on non-delegated tickets do not generate Telegram notifications.

Dispatch prompt format from Builder / Tester

Router, notify remote agent:
  Ticket: #N
  State: [current state]
  Action: [what's expected from the remote agent]
  Context: [one short line if needed]

Validation checklist before Router sends outbound

  • ticket exists and is in the claimed state
  • the state transition is on the trigger table above
  • the message body matches a template; no copies of internal context
  • data minimisation: include only the ticket reference, state label, and required action — no context beyond what is in the trigger template
  • no secrets, no credentials, no scope/price/timeline language (information-classification check)

If any check fails, return an error to the dispatching agent. The dispatching agent appends a retry note to its own HOT memory.

Outbound send sequence (after validation passes)

  1. Optionally call relay_status — confirm daemon is reachable (ok: true).
  2. Compose the message from the trigger-table template for the claimed state transition.
  3. Call relay_send({ text: "<composed message>" }) — daemon auto-prefixes remoteTeam.agentName (e.g. Max, …) if Router omitted it.
  4. Return the tool result (message id or error) to the dispatching agent.

Example (Builder dispatch → Router outbound):

Dispatch from Builder:
  Router, notify Max:
    Ticket: #58
    State: state:ready-for-qa
    Action: please pick up first-pass QA
    Context: relay stack E2E probe

Router actions:
  1. Validate ticket #58 is delegated and transition is on trigger table
  2. relay_status → ok
  3. relay_send({ text: "Ticket #58 in state:ready-for-qa, please pick up first-pass QA. <link>" })
     → daemon sends: "Max, Ticket #58 in state:ready-for-qa, please pick up first-pass QA. <link>"
  4. Reply to Builder: sent (message_id …) or error with retry note

Information Classification

Three tiers, applied at Router's outbound validation step:

TierExamplesInter-team sharable?
inter-team-sharablePR open and ready for review; defect summaries; QA verdicts on tickets that originated from the remote teamYes
team-internalArchitecture-decision rationale, agent-internal debate, internal planningNo
confidentialScope, price, timeline, client commitments, commercial assumptionsNo

Default rule when uncertain: if the ticket originated from the remote team, share progress. Otherwise refuse and escalate to Router HOT.

Audit Policy

The ticket itself is the audit. Builder and Tester comment on the ticket in their normal workflow when work is performed or state changes. Router does NOT create redundant GitHub comments mirroring Telegram traffic. Router's outbound is a short state-change notification, not a record.

Failure Modes

FailureResponse
Unknown senderDo NOT reply on channel. Append to memory/router.md HOT; surfaces to the team lead at morning-standup or dreaming.
Telegram unreachable inboundRuntime queues. Router takes no action until invoked with a parsed message.
Telegram unreachable outboundrelay_send returns error. Return error to the dispatching agent. The dispatching agent appends a retry note to its own HOT.
Ambiguous reference (e.g., "the ticket")Ask one concise clarifying question via the runtime; no subagent spawn until resolved.
Classification failureEscalate to Router HOT; surfaces at next standup or dreaming. No guess.

Interactions with Other Skills

  • internal-relay — workflow-state classification vocabulary used by inbound
  • ticket-lifecycle-mode — canonical state names used in outbound triggers
  • qa-ticket-workflow — defines the Pre-QA Readiness Check mode used on qa_requested inbound
  • team-relay — defines what counts as a delegated ticket (and which transitions warrant inter-team notification)
  • agent-foundations — VBR, WAL, security baseline; loaded under this skill

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Universal guardrails loaded by every agent. Defines Verify Before Reporting (VBR), Write-Ahead Log (WAL), and the security baseline. Always-on, role-independent.

日本語の概要は準備中です。原文の説明を表示しています。

Agistra/agistra.dev52026年10月7日 更新

Use when: architecture mode, architect this, ADR, C4, PlantUML, system boundary, design decision, PRD gap, high ambiguity, multiple technical approaches, security architecture, data architecture, integration risk, implementability gap, story ticket, or epic ticket.

日本語の概要は準備中です。原文の説明を表示しています。

Agistra/agistra.dev52026年10月7日 更新

Use when: assumptions audit, audit assumptions, check for hidden assumptions, plan/ticket has ambiguous scope edges, pre-flight before finalizing a ticket, unstated assumptions, or 'what am I assuming'. Surfaces unstated assumptions, ambiguous scope edges, and untested preconditions in a finished plan/ticket/ADR before it is handed to Builder. Optional pass — Architect judges when to apply it; not a mandatory gate on every ticket.

日本語の概要は準備中です。原文の説明を表示しています。

Agistra/agistra.dev52026年10月7日 更新

Use when: Tester needs UI state evidence for VBR, or Builder needs to verify an integration wire is observable end-to-end. Powered by agent-browser MCP — token-efficient browser automation (200–400 tokens/page).

日本語の概要は準備中です。原文の説明を表示しています。

Agistra/agistra.dev52026年10月7日 更新

Conducts multi-axis code review. Use before merging any change. Use when reviewing code written by yourself, another agent, or a human. Use when you need to assess code quality across multiple dimensions before it enters the main branch.

日本語の概要は準備中です。原文の説明を表示しています。

Agistra/agistra.dev52026年10月7日 更新

Writing skill for freelancers and independent consultants. Covers project proposals, bids, client emails, and scope summaries. Leads with the client's problem, not the consultant's background.

日本語の概要は準備中です。原文の説明を表示しています。

Agistra/agistra.dev52026年10月7日 更新

Agistra のスキルをすべて見る

このスキルの問題を報告する