Mayfly plugin development
A Mayfly plugin is an ordinary Cordis plugin. It consumes native dsh services directly and injects one of Mayfly's four UI services only when it needs terminal UI.
text
native dsh services
commands · sessionProjections · tools · settings · ...
│
ordinary Cordis plugin
│
Mayfly UI services
mayflyPanes · mayflyStatus · mayflyOverlays · mayflyEditorExtensionsOfficial Mayfly packages and external plugins are structurally identical: name / inject / apply(ctx), one service graph, and the same Fiber unload behavior. There is no special manifest, capability request, adapter facade, or plugin-author CLI.
ts
import type { Context } from '@deepseek-ai/cordis'
import type {} from '@deepseek-ai/dsh-commands'
import type {} from '@ephemeral-ai/mayfly-ui'
import { ui } from '@ephemeral-ai/mayfly-ui'
export const name = '@acme/build-health'
export const inject = ['commands', 'mayflyPanes']
export function apply(ctx: Context): void {
ctx.commands.register({
name: 'health',
description: 'Show build health',
handler: () => ({ kind: 'success', text: 'healthy' }),
})
ctx.mayflyPanes.register({
id: 'acme.build-health',
placement: 'right',
narrow: 'bottom',
}, ui.text('healthy'))
}Use the quickstart to create a package. The Harness reference defines native dsh APIs; service seams covers Mayfly UI.