Repository navigation
✨ voice: draft a spec from a Plaud/Wispr/file/stdin voice note and publish it as an RFC for a hive - #123
✨ voice: draft a spec from a Plaud/Wispr/file/stdin voice note and publish it as an RFC for a hive#123clubanderson wants to merge 2 commits into
Conversation
The spek-new skill already starts a spec from existing material fetched with the agent's own tools, so a voice recorder's MCP server (Plaud's @plaud-ai/mcp, free) is a source like any other. This names it: the skill recognises "my latest Plaud recording" / "the note titled …", fetches both the AI summary and the transcript, records plaud://recordings/<id> (or the exported file) as provenance, and the seeded interview maps the summary onto sections, action items onto acceptance criteria, and keeps the transcript's exact phrasing in the working context, treating tentative remarks as gaps to ask about. No CLI change: the design (epics-and-seeded-specs) keeps fetching on the agent side, so no Plaud client lands in the binary. Signed-off-by: Andrew Anderson <andy@clubanderson.com>
|
/approve |
|
@clubanderson: you cannot LGTM your own PR. DetailsIn response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. |
…a hive Adds `spektacular voice --from <plaud|wisprflow|file|stdin>` with a small Source interface: plaud reads one recording (note + transcript) through Plaud's MCP server over stdio, wisprflow reads Wispr Flow's local history, file reads .md/.txt/.srt/.vtt transcripts, stdin takes pasted or piped text. The note is drafted onto the spec scaffold; without --publish the spec workflow starts seeded with the staged material (new "material" data key the interview reads instead of fetching), with --publish a spec-shaped note is written final and filed through publish as an RFC with a child per requirement. The spek-new skill gains the shortcut and non-interactive guidance for a transcript handed over as text. Signed-off-by: Andrew Anderson <andy@clubanderson.com>
|
/approve |
|
@clubanderson: you cannot LGTM your own PR. DetailsIn response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. |
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: clubanderson The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
There was a problem hiding this comment.
Please narrow this to #122’s stated scope before landing; there is also a filesystem write defect.
- Medium — validate names before staging (
cmd/voice.go:125–127). The non-publish path joins the raw--nameinto the material directory and callswriteVoiceMaterialbeforerunSpecNewvalidates it. For example,--name ../../../victimresolves the staging directory to<project>/victim;writeVoiceMaterial(cmd/voice.go:279) overwrites existingnote.md,transcript.md, anddraft.mdthere. Only afterward doesidentifier.NormalizePartreject the separators. Validate the name before any staging write and keep the destination inside the staging directory. - Medium — the CLI/MCP implementation contradicts the linked issue (
cmd/voice.go:26,internal/voice/plaud.go:14). Per #122, this is explicitly a wording-only change, with no CLI MCP client because fetching belongs to the driving agent. This adds that client plus a publish path and vendor integrations. The template edits address the requested workflow; the additional implementation should be removed from this PR or separately scoped.
@nicholasjackson, please review the trust implications if the CLI addition is retained: its default executes npx -y @plaud-ai/mcp@latest (internal/voice/plaud.go:14), and the child inherits the full environment (internal/voice/mcp.go:233), including any available publisher credentials.
Reviewed the changed code, identifier validation, spec-start callers, publisher, tests, PR body and #122 (no comments). Existing build-and-test checks passed. Local test execution was blocked by the reviewer wrapper; registry lookup also failed on an unavailable sibling checkout.
— hive: agent=reviewer backend=codex model=gpt-6.1-sol codex=0.167.0
|
Closing in favour of #124, which carves out just the part #122 asked for: the wording-only change to the Not carried over, and why:
Direction going forward: anything in Hive should be usable as input to Spek, by reference (provenance URIs) rather than one vendor integration per source. |
Adds
spektacular voice --from <plaud|wisprflow|file|stdin> [--latest|--title X|--path P] [--publish --repo owner/repo]: fetches one voice note (Plaud via its free MCP server over stdio, Wispr Flow local history, a transcript file, or text on stdin), drafts it onto the spec scaffold, and either starts the seeded spec interview or, with--publish, writes the spec final and files it throughpublishas an RFC + one child issue per requirement, printing the URLs.Also serves a non-interactive agent in a hive pod seeded from a transcript on stdin/file (no Plaud MCP in the agent); the spek-new skill now says how to finish from pasted transcript text without asking.
Tests: fake MCP over pipes (no sleeps), fake GitHub for the publish chain, template wording pins. README: "Voice → spec → hive" quickstart.
Closes #122.