ChannelTerm
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| debug_bridge_closeA | Close the external RSP bridge AND its serial Session. Does not detach, kill a target, or claim shell restoration. Use debug_bridge_restore after externally ending RSP if the Session should be preserved. Idempotent. |
| debug_bridge_listA | List all unfinished external GDB bridges in this Host with bound addresses, ports, Session references, targets, and states. Includes disconnected/recovering bridges until finalization; excludes closed/failed/restored history. Read-only: no heartbeat renewal, target I/O, management owner, or connection secrets. Uses Host access authorization without a per-bridge owner. Does not scan OS ports or other Hosts. |
| debug_bridge_renewA | Renew the external RSP bridge's management heartbeat and internal lease, including while listening or disconnected. Current authenticated rsp-client connections renew automatically. The 60-second grace and 24-hour absolute maximum cannot be resurrected. Expiry closes the serial Session without claiming target restoration. |
| debug_bridge_reportA | Report actual externally executed GDB commands, results, or observed states as Codex reports, not a complete GDB audit. Publishes only independent Session events visible in attach/events; never executes commands, forwards RSP, verifies target state, or renews the heartbeat. Omit raw RSP and secrets. Reporting failure must not interrupt GDB: continue debugging; renewal is independent of reporting. Sequence increases per bridge (gaps allowed); retry only the latest identical report. |
| debug_bridge_restoreA | After external GDB disconnects and the target returns to its shell, explicitly confirm readiness and supply the pre-debug stty -g value. Applies and reads back that value, then verifies a fresh shell marker before releasing the lease. Never injects RSP detach. Failure or ten-second timeout closes the Session. |
| debug_bridge_startA | Bridge an already prepared serial Session to one authorized external GDB via pinned TLS/TCP. Does not start or control GDB/gdbserver or probe RSP. Target readiness cannot be inferred from silence: explicit acknowledgement is required after preparing the target. Returns a secret connection descriptor for channelterm rsp-client. Defaults to loopback; a specific non-loopback bind requires allowed_peer. Reuse owner/request_id and all parameters exactly for retries. Current rsp-client connections maintain the management lease automatically, even without RSP traffic. Renew every 30 seconds before connecting, after disconnect, or with legacy helpers. All bridges have a 24-hour maximum lifetime. Use debug_bridge_report for actual externally executed commands, results, and observed states (Codex reports, not a complete audit). |
| debug_bridge_statusA | Read external RSP bridge status without renewing its heartbeat or disclosing connection secrets. Disconnected retains exclusive ownership and does not mean the target or shell has recovered. |
| debug_commandA | Execute one supported GDB action, or renew the 60-second debug heartbeat. Reuse request_id and parameters unchanged after a lost response. Execution is asynchronous: consume debug_events for stops. Raw MI/console and multi-inferior control are unavailable. |
| debug_eventsA | Wait for ordered MI records and lifecycle events after a debug cursor; renews the client heartbeat. A stale cursor is an error, never silently skipped. Invalid UTF-8 MI values use explicit base64 objects. |
| debug_startA | Start native Linux user-space GDB/MI on an idle Bash Session using an exclusive managed lease. ChannelTerm, GDB, gdbserver, and ELF must share one Linux environment. PID omitted launches with isolated I/O; attach rejects controlling terminals, pipes, sockets, or shared character devices. Single inferior, multithreaded, all-stop only. Reuse owner and request_id unchanged to retry. |
| debug_stopA | End debugging, detach by default, wait for protocol completion, restore original terminal modes and confirm the shell with a unique harmless probe. terminate is allowed only for launched processes. Recovery failure closes the Session and returns an error. Safe to retry. |
| terminal_acquire_leaseA | Acquire one exclusive Session lease. Readers continue normally; other writers fail until release. |
| terminal_begin_file_transfer_cancelB | Begin cancellation confirmation only when a file-transfer lease is active on the Session. |
| terminal_closeA | Close the shared terminal Session for every attached client and release its transport; use terminal_session_detach to record only one client's departure without closing it. |
| terminal_enter_ubootA | Interrupt one U-Boot countdown on an existing serial Session and confirm entry using Host-side raw-byte matching. No skill installation is required. Select: use terminal_list_sessions if the intended Session is unknown. If current evidence already establishes an idle U-Boot prompt, use terminal_write for authorized commands, not this entry tool or Bash-only terminal_exec. An old buffered prompt alone does not establish current state. Prepare: inspect boot output with terminal_read (hex/base64 for non-UTF-8 bytes), supplied firmware configuration, or settings verified for this board and firmware. Select the literal markers and exact interrupt bytes from that evidence. An explicit any-key prompt permits a space; a generic countdown does not identify the required key or string. If a required setting is unknown, ask the user only for that missing detail before calling; reuse known answers. Do not guess or cycle through keys. The tool does not discover settings or ask questions during execution. Run: stay within the user's authorized hardware action; an explicit request to enter U-Boot need not be reconfirmed. Choose wait_reset for manual reset, or reboot only from a verified idle Bash prompt with an explicit command. Before calling, save the terminal_session_events cursor; in another request observe the matching OPERATION_STATE ready event before manual reset. Prepare before resetting rather than relying on model round trips during the countdown. The Host manages its lease and sends the interrupt at most once. Verify: only status entered confirms a fresh line-bound prompt after countdown; bytes_written alone does not. Check isError and structuredContent.result for partial evidence. boot_started means boot proceeded; timeout means entry was not confirmed, not that the key was wrong. On failure report evidence; do not automatically change keys or reboot again. Cancellation releases ownership without recovery keys or closing a healthy Session; a submitted reboot cannot be undone. Limits: a silent countdown or firmware-disabled interruption is not handled by this flow; request firmware details instead of inventing a trigger. There is no dedicated password/credential-protection workflow; do not solicit secrets in chat or treat tool arguments as protected credential storage. |
| terminal_execA | Execute one non-interactive command through an idle Bash prompt without adding it to Bash history; use terminal_write for raw keys or interactive programs. Never use this at a U-Boot prompt: use terminal_write for U-Boot commands, or terminal_enter_uboot to interrupt a fresh boot countdown. |
| terminal_export_diagnosticsA | Export a bounded ZIP snapshot of retained Session evidence. include_raw=true explicitly includes sensitive terminal/output/write bytes. Default exports metadata only. Returns ID, size and SHA256; download with terminal_read_diagnostic. Host memory retains at most four archives for 15 minutes, evicting oldest first. No filesystem path is exposed. |
| terminal_file_transfer_checkpointC | Check a file-transfer lease at a safe block boundary, waiting while cancellation confirmation is pending. |
| terminal_get_connection_decisionA | Evaluate the configured response to a discovered endpoint. After an appeared device event, call this before terminal_open_serial: action ask requires user approval, connect permits client-controlled opening, deny requires no action, and none requires no action. This tool never opens a session. |
| terminal_list_devicesA | List currently present devices detected by ChannelTerm without opening them or creating sessions. |
| terminal_list_serial_portsA | List serial ports currently detected by the operating system without opening them. |
| terminal_list_sessionsA | List active terminal sessions and their lifecycle states. |
| terminal_open_serialA | Open a serial terminal session from a profile and optional connection overrides. When opening after device discovery, call this only after user approval or a terminal_get_connection_decision action of connect; explicit user-requested connections remain allowed. |
| terminal_readA | Read retained terminal output immediately when cursor is omitted; use terminal_wait to wait for new bytes after a known cursor. For U-Boot entry, use this to inspect evidence and prepare terminal_enter_uboot; let that Host-side tool interrupt the countdown rather than polling and sending keys from the client. Retained prompts alone do not establish current device state. |
| terminal_read_activityA | Read retained Session activity immediately when cursor is omitted; use terminal_wait_activity to wait for events after a known activity cursor. |
| terminal_read_device_eventsA | Read retained device appearance and disappearance events immediately when cursor is omitted; use terminal_wait_device_event to wait after a known cursor. After an appeared event, call terminal_get_connection_decision before opening a serial session. |
| terminal_read_diagnosticA | Read up to 65536 ZIP bytes by diagnostic_id and archive byte offset as base64. This offset is not a Session cursor. Download before expiry/eviction; verify the exported SHA256. |
| terminal_release_leaseA | Release an exclusive Session lease owned by this operation. |
| terminal_renew_leaseA | Renew an exclusive Session lease owned by this operation before it expires. |
| terminal_report_file_transferA | Publish a file-transfer status event only for the caller-owned active file-transfer lease, without writing terminal output. |
| terminal_resolve_file_transfer_cancelA | Resolve a file-transfer cancellation confirmation; false resumes and true waits for safe cleanup and lease release. |
| terminal_session_attachA | Record one client attachment on the Session event stream without acquiring a lease or writing terminal bytes. |
| terminal_session_detachA | Record one client detachment on the Session event stream without closing it for other clients; use terminal_close only to close the shared Session for everyone. |
| terminal_session_eventsA | Read retained structured Session events, or wait for events after an event cursor. Events never include terminal output bytes. |
| terminal_waitA | Wait only for terminal output bytes after a known cursor; use terminal_read without cursor for an immediate snapshot. This does not return file-transfer status; use terminal_wait_file_transfer for transfer completion or cancellation. |
| terminal_wait_activityA | Wait for Session activity events after a known cursor; use terminal_read_activity without cursor for an immediate snapshot. |
| terminal_wait_device_eventA | Wait for a device appearance or disappearance event after a known cursor; use terminal_read_device_events without cursor for an immediate snapshot. After appeared, call terminal_get_connection_decision before terminal_open_serial. |
| terminal_wait_file_transferA | Wait for one transfer_id after an event cursor until the transfer completes, is cancelled, or fails and its file-transfer lease has been released. Completed transfers include source_path, requested_path, resolved_path, renamed, and optional sha256; use resolved_path as the saved file path. Use this instead of terminal_wait for file-transfer outcomes. |
| terminal_writeA | Write raw UTF-8, hexadecimal, or base64 bytes for keys or interactive programs; shell lines follow target history, so use terminal_exec at an idle Bash prompt. Use this for authorized commands at a verified idle U-Boot prompt; use terminal_enter_uboot for countdown interruption. Do not send an empty Enter merely to probe U-Boot: it may repeat the previous command. For files/ELFs use CLI channelterm file send/receive with --session and the owning --endpoint, then terminal_wait_file_transfer. Do not construct Base64/heredoc uploads with this tool. Run the CLI where the local file and Host are accessible; if unavailable, report the limitation. |
| terminal_write_leasedA | Write raw bytes through an active Session lease owned by a managed multi-step operation; normal terminal input must use terminal_write. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 40 tools
Descriptions are unusually explicit about boundaries and cross-reference the correct sibling tool, which rescues much of the set. However, there are several near-parallel families — terminal_read vs terminal_wait, terminal_read_activity vs terminal_wait_activity, terminal_read_device_events vs terminal_wait_device_event, terminal_session_events, terminal_read_diagnostic — plus terminal_write vs terminal_write_leased vs terminal_exec, and terminal_acquire_lease vs terminal_renew_lease vs terminal_release_lease, giving real misselection risk across 40 tools.
Consistent snake_case with predictable terminal_ / debug_ / debug_bridge_ prefixes that map to sub-domains, which is a sensible convention at this scale. Minor variance in element ordering (some verb-first like terminal_get_connection_decision and terminal_list_serial_ports, others noun-first like terminal_session_events, terminal_file_transfer_checkpoint) keeps it from a perfect score.
40 tools is well past the point of easy selection for an agent, and a substantial share are structural duplicates (paired immediate-read / wait variants) or lease bookkeeping rather than distinct capabilities. The domain is genuinely complex (serial sessions, U-Boot entry, GDB bridge, file transfer, diagnostics), but that breadth is used to justify a surface that is too large.
Lifecycle coverage is strong: session open/close/attach/detach, lease acquire/renew/release, read/write, device discovery and events, U-Boot entry, native debug start/stop/command/events, debug bridge start/status/renew/report/restore/close, plus file-transfer checkpoint/cancel and diagnostics export/download. Gaps are minor and documented — no tool to create or edit serial profiles (terminal_open_serial assumes one), and file upload/download is pushed to the CLI rather than the tool surface.