DSH Hub

Ephemeral-AI-Lab/mayfly

mayfly-root

ToolTerminal22 GitHub stars· updated 2026-10-22

Mayfly terminal UI bundle for DeepSeek Harness

Install

npx @deepseek-ai/dsh plugin --profile mayfly add @ephemeral-ai/mayfly

Restart `dsh web` after install. Bundle APIs can change during the developer preview.

README badge

mayfly-root DSH Hub badge
[![DSH Hub](https://dshhub.dev/badge/mayfly.svg)](https://dshhub.dev/plugins/mayfly)

Paste this into your README. The star count updates with every catalog sync.

From the README

Excerpt from Ephemeral-AI-Lab/mayfly, cleaned of badges and images.

Mayfly

English | 中文

Mayfly is an interactive terminal UI for DeepSeek Harness (dsh) — an out-of-tree Cordis bundle over dsh-base, built against Harness 0.2.1-rc.2. Mayfly 0.1.4-rc.2 deliberately uses the same plugin model as dsh Web: plugins are ordinary Cordis siblings and consume native dsh services directly.

  • Terminal-native rendering: Markdown tables, closed Mermaid fences in assistant messages, and renderer-neutral line, point, bar, sparkline, and heatmap nodes — with width-safe source or text fallbacks.
  • One activity block for live status: the current step, turn elapsed time, estimated token count, and output rate live above the editor, with a notification row under them; the transcript records only what has happened.
  • Side conversations: /btw and the /agents subagent tree share the transcript pane; F7 returns to the previous conversation and F8 closes the displayed one.
  • An ordinary plugin model: consume ctx.commands, ctx.sessionProjections, ctx.tools, and other documented dsh services directly; UI contributions go through mayflyPanes, mayflyStatus, mayflyOverlays, and mayflyEditorExtensions.

The activity block above the editor is the one place for live status: a glyph that moves with the phase (blooming while the model thinks, filling while it writes, a still ● beside a running tool, breathing while it waits for you), the current step (Thinking, Running commands), the turn's elapsed time, and the estimated token count and output rate. Its second line holds a tip, or the arguments of the calls in flight. The notification row under it shows the notice to read now, such as a rate-limit retry or a nearly full context. The transcript records only what has happened, so streaming reasoning shows as a captionless ✻ tail that settles to one ✻ Thinking · 6s row, and file changes stay visible as diff cards next to the final answer. Rates use four characters per token, exclude first-chunk latency, and disappear after two seconds without output. Narrow terminals omit tips and rates first.

Plugin model

A plugin declares the services it needs with inject, then uses them from its Cordis context:

  • ctx.commands, ctx.sessionProjections, ctx.tools, and the rest of the documented dsh services are used directly.
  • ctx.mayflyPanes, ctx.mayflyStatus, ctx.mayflyOverlays, and ctx.mayflyEditorExtensions are the only Mayfly-specific UI contribution services.
  • ctx.mayflyCurrentAgent.current() returns the exact Agent selected by this Mayfly frontend when an Agent-scoped native service needs it.
  • Every registration belongs to the caller's Cordis Fiber. Unloading the plugin removes its commands and UI contributions.

There is no Mayfly plugin manifest, capability negotiation, adapter facade, private plugin realm, or separate plugin-author CLI. Mayfly's own features and external plugins register through the same services.

Plugins always return ordinary renderer-neutral nodes. Mayfly automatically windows large list nodes and delays hidden responsive branches, so plugins do not manage viewport ranges, overscan, renderer caches, or scroll controllers. Plugins still own database and network fetching.

…

Related plugins