Two-Plugin System¶
How the research-and-engagement half (this plugin) and the execution/submission half (separate plugin) divide responsibilities, and where the hand-off boundary lies.
The Two Halves¶
| Aspect | agentic-contributor (this plugin) | Execution/submission plugin (separate) |
|---|---|---|
| Purpose | Research projects, surface issues, draft outbound text | Post comments, create PRs, push branches |
| GitHub access | Read-only (MCP server or gh CLI read commands) |
Read + write (gh CLI mutating commands) |
| Output | Reports, ranked lists, briefings, labeled DRAFTs | Actual GitHub actions |
| Guardrail | PreToolUse hook denies all mutations |
User confirmation required before each action |
| When it acts | Immediately on /oss invocation |
Only after user reviews and approves a draft |
Why Two Plugins?¶
Separating research from execution provides two safety properties:
-
You can explore freely. Running
/oss find ...or/oss claim ...will never accidentally post, push, or mutate anything. There is no "are you sure?" friction during research because the plugin is incapable of sending. -
Sending requires a deliberate switch. Moving to the execution plugin is an explicit step. It cannot happen as a side effect of a research command.
A single plugin that does both would require per-action confirmation dialogs throughout the research flow, or trust that every code path correctly avoids write actions — a much weaker guarantee than the technical separation.
The Hand-off Boundary¶
The boundary is the moment the user decides a draft is ready to send.
This plugin stops at: saving the output to a .oss-drafts/ file and showing: "DRAFT — saved to <path>. Review and edit this file before sending. This plugin will NOT post, comment, push, or send anything. Sending is handled by the separate execution/submission plugin."
The execution plugin starts at: receiving the approved draft file (reading the status: draft frontmatter and the body) and performing the gh CLI action — for example:
# Execution plugin posting the claim comment
gh issue comment 8765 --repo apache/spark --body "Hi, I'd like to take this issue…"
# Execution plugin opening a PR after a branch push
gh pr create --repo apache/spark --title "[SPARK-8765] Fix null pointer in SparkContext" --body "…"
The execution plugin reads the draft body from the .oss-drafts/ file (the status: draft frontmatter identifies it as pending), presents it for final confirmation, and marks it status: sent after posting. See Draft Files for the frontmatter schema.
What This Plugin Covers¶
All 9 /oss scenarios stay on the research-and-drafting side of the boundary:
- status, find, norms, setup — read-only reports and guided walkthroughs saved to
.oss-drafts/; no outbound text produced. - clarify, claim, engage, review-reply — labeled DRAFTs saved to
.oss-drafts/and shown for review; never posted. - report — a labeled DRAFT new-issue body (bug report or feature request) saved to
.oss-drafts/and shown for review; actually filing the issue (e.g.gh issue create) belongs to the execution/submission plugin or the human.
What This Plugin Does Not Cover¶
- Writing code or tests.
- Committing changes.
- Pushing branches.
- Opening, editing, or closing pull requests or issues.
- Posting comments.
- Any action that mutates GitHub state.
These belong to the execution/submission plugin or to your own local git workflow.
Back to docs index | Related: Draft-Only Guardrail | Using /oss