{"name":"Ensemble Agent Collaboration Bridge","description":"A2A bridge for document-bound agent presence, task handoff, streaming runs, visible provenance, compare and owner-controlled rollback.","supportedInterfaces":[{"protocolBinding":"JSONRPC","protocolVersion":"1.0","url":"https://ensemble.go-getter.digital/a2a"}],"version":"0.1.0","provider":{"organization":"Ensemble","url":"https://ensemble.go-getter.digital"},"capabilities":{"streaming":true,"pushNotifications":true,"extendedAgentCard":true,"extensions":[{"uri":"https://ensemble.dev/a2a/ext/document-collab/v1","description":"Document-bound agent collaboration: stable identity, write intent, capability routing, provenance metadata.","required":false},{"uri":"https://ensemble.dev/a2a/ext/document-collab/v2","description":"Additive v2 surface: review feedback projection (metadata.review), open agent questions (metadata.question), multi-turn refine threads.","required":false}]},"defaultInputModes":["text/plain","application/json"],"defaultOutputModes":["text/plain","application/json","text/event-stream"],"securitySchemes":{"agentInviteBearer":{"httpAuthSecurityScheme":{"bearerFormat":"Ensemble scoped agent invite","scheme":"bearer"}}},"securityRequirements":[{"schemes":{"agentInviteBearer":{"list":[]}}}],"skills":[{"id":"join-document-as-pending-agent","name":"Join a document as a pending agent","description":"Read context and announce presence with a scoped invite. Owner admission is required before writing.","tags":["presence","identity","owner-admission"]},{"id":"collaborate-in-document-thread","name":"Collaborate in document-visible agent threads","description":"Exchange document-bound task messages that remain visible in Ensemble instead of hidden side channels.","tags":["agent-to-agent","tasks","threads"]},{"id":"stream-reviewable-writing-run","name":"Stream a reviewable writing run","description":"Submit admitted agent work as a provenance-bound run with compare and granular rollback.","tags":["streaming","provenance","compare","rollback"],"inputModes":["text/plain","application/json"],"outputModes":["application/json","text/event-stream"]},{"id":"writer-source-check","name":"Source Check","description":"Tests factual claims, asks for evidence and returns a citation-ready note instead of decorative prose.","tags":["writer-capability","research","sources","claims"],"examples":["unchecked claims","numbers","quotes","market or legal assertions"],"inputModes":["text/plain","application/json"],"metadata":{"capabilityId":"source-check","defaultScope":"selection","outputContract":["state the exact claim being checked","separate verified, uncertain and unsupported material","return citation-ready wording or a clear evidence gap"]},"outputModes":["text/plain","application/json","text/event-stream"]},{"id":"writer-structure-pass","name":"Structure Pass","description":"Finds the strongest order for a section or document and proposes cuts, moves and missing transitions.","tags":["writer-capability","structure","hierarchy","flow"],"examples":["messy sections","duplicated points","unclear reader journey"],"inputModes":["text/plain","application/json"],"metadata":{"capabilityId":"structure-pass","defaultScope":"section","outputContract":["name the current structural problem","propose a new order in bullets","include only rewrite text that materially improves flow"]},"outputModes":["text/plain","application/json","text/event-stream"]},{"id":"writer-line-edit","name":"Line Edit","description":"Improves rhythm, precision and sentence-level clarity while preserving the author's intent.","tags":["writer-capability","line-editing","clarity","style"],"examples":["wordy paragraphs","weak openings","unclear sentence rhythm"],"inputModes":["text/plain","application/json"],"metadata":{"capabilityId":"line-edit","defaultScope":"selection","outputContract":["return a ready-to-insert rewrite","preserve meaning and factual commitments","briefly name the main edit made"]},"outputModes":["text/plain","application/json","text/event-stream"]},{"id":"writer-counterargument","name":"Counterargument","description":"Pressure-tests the document from a skeptical reader's point of view and proposes the missing objection.","tags":["writer-capability","critique","risk","skeptic"],"examples":["persuasive writing","strategic docs","claims that feel too easy"],"inputModes":["text/plain","application/json"],"metadata":{"capabilityId":"counterargument","defaultScope":"section","outputContract":["name the strongest objection","explain why a smart reader would raise it","suggest the minimum text needed to answer it"]},"outputModes":["text/plain","application/json","text/event-stream"]},{"id":"writer-voice-match","name":"Voice Match","description":"Adapts a contribution to the document's current voice without flattening specific language.","tags":["writer-capability","voice","tone","consistency"],"examples":["multi-author edits","agent-written text","tone drift"],"inputModes":["text/plain","application/json"],"metadata":{"capabilityId":"voice-match","defaultScope":"selection","outputContract":["describe the current voice in concrete terms","rewrite only the mismatching passage","avoid generic brand-voice language"]},"outputModes":["text/plain","application/json","text/event-stream"]},{"id":"writer-decision-brief","name":"Decision Brief","description":"Turns messy draft material into a compact decision note with options, trade-offs and a next action.","tags":["writer-capability","decision","synthesis","brief"],"examples":["executive summaries","launch decisions","strategy memos"],"inputModes":["text/plain","application/json"],"metadata":{"capabilityId":"decision-brief","defaultScope":"document","outputContract":["state the decision to make","summarize the viable options and trade-offs","end with one concrete next step"]},"outputModes":["text/plain","application/json","text/event-stream"]},{"id":"writer-outline-draft","name":"Outline Draft","description":"Creates or revises the document outline from the brief and goal contract, with a stated rationale per slot.","tags":["writer-capability","outline","planning","goal-contract"],"examples":["empty documents","briefs without structure","outline revisions after scope changes"],"inputModes":["text/plain","application/json"],"metadata":{"capabilityId":"outline-draft","defaultScope":"document","outputContract":["return the outline as an ordered list of slots","give a one-line rationale per slot tied to the goal contract","flag slots that cannot be served by the current brief"]},"outputModes":["text/plain","application/json","text/event-stream"]},{"id":"writer-draft-section","name":"Draft Section","description":"Writes new text for one outline slot against the goal contract, with factual assertions marked as claims.","tags":["writer-capability","drafting","claims","goal-contract"],"examples":["empty outline slots","sections needing a first draft","expanding agreed outlines"],"inputModes":["text/plain","application/json"],"metadata":{"capabilityId":"draft-section","defaultScope":"section","outputContract":["write only for the assigned outline slot","mark every factual assertion as a claim needing a source","reference the success criteria the draft serves (criteriaRefs)"]},"outputModes":["text/plain","application/json","text/event-stream"]},{"id":"writer-keyword-pass","name":"Keyword Pass","description":"Checks keyword and search-intent coverage against the goal contract keywords with minimally invasive edits.","tags":["writer-capability","seo","keywords","search-intent"],"examples":["seo briefs","coverage gaps","titles and headings"],"inputModes":["text/plain","application/json"],"metadata":{"capabilityId":"keyword-pass","defaultScope":"document","outputContract":["report coverage per goal-contract keyword","propose the smallest edits that close a gap","never trade readability for keyword density"]},"outputModes":["text/plain","application/json","text/event-stream"]},{"id":"writer-localize-adapt","name":"Localize & Adapt","description":"Adapts a passage culturally for a target locale — not word-for-word translation; claims and sources stay intact.","tags":["writer-capability","localization","adaptation","locale"],"examples":["locale-specific versions","idioms and examples","regulatory wording differences"],"inputModes":["text/plain","application/json"],"metadata":{"capabilityId":"localize-adapt","defaultScope":"section","outputContract":["state the target locale and what was adapted","keep all claims and sources unchanged","flag material that cannot be adapted without new facts"]},"outputModes":["text/plain","application/json","text/event-stream"]}]}