Skip to content

Commit ac3bb63

Browse files
authored
docs(rfc): improve template and add creation skill (#1889)
Add a create-rfc skill that directs agents through the OpenShell RFC process and template. Expand the RFC template with clearer section guidance and suggested lengths. Signed-off-by: Kris Hicks <khicks@nvidia.com>
1 parent 62aa5e3 commit ac3bb63

4 files changed

Lines changed: 162 additions & 9 deletions

File tree

.agents/skills/create-rfc/SKILL.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
---
2+
name: create-rfc
3+
description: Create OpenShell RFC proposals in rfc/ from a design request. Use when the user asks to write, draft, start, create, or update an RFC, Request for Comments, architecture proposal, API proposal, process proposal, or cross-cutting design proposal that should follow the OpenShell RFC process and template.
4+
---
5+
6+
# Create RFC
7+
8+
## Workflow
9+
10+
Create RFCs by following `rfc/README.md` and `rfc/0000-template/README.md`.
11+
Keep the template as the source of truth for section guidance.
12+
13+
1. Read `rfc/README.md` to confirm when an RFC is appropriate, how to choose the
14+
RFC number, and how the lifecycle works.
15+
2. Read `rfc/0000-template/README.md` before drafting. Follow its section
16+
guidance, including scope, expected detail, and suggested section length.
17+
3. Choose the next available `NNNN` from the existing `rfc/NNNN-*` directories
18+
unless the user provided a specific number.
19+
4. Create `rfc/NNNN-short-title/README.md` by copying the template and replacing
20+
placeholders. Use a short hyphenated folder title.
21+
5. Fill in front matter with the RFC author, `state: draft`, and any related
22+
links the user provided. If the author is unknown, use the requesting user's
23+
GitHub handle when available or leave the template placeholder.
24+
6. Draft each section from the user's design context. Keep Summary concise,
25+
Motivation readable by anyone, Non-goals explicit, Proposal focused on what
26+
is being proposed, and Alternatives focused on credible competing approaches.
27+
7. Preserve uncertainty in Open questions instead of silently deciding unknowns.
28+
If a missing decision blocks a coherent RFC, ask the user for that decision.
29+
8. Check the completed RFC against the template once more before finishing.
30+
31+
## Writing Standards
32+
33+
- Prefer concrete design statements over placeholder language.
34+
- Link to relevant issues, prior RFCs, and architecture docs when they provide
35+
needed context.
36+
- Keep rejected or left-out designs in Alternatives, not Proposal.
37+
- Use Mermaid diagrams for architecture or data flow when a diagram would make
38+
the proposal easier to review.
39+
- Do not update `architecture/` or published docs just because an RFC was
40+
drafted. Those updates belong with implementation or with an accepted RFC when
41+
the user asks for them.
42+
43+
## Validation
44+
45+
Before handing the RFC back to the user:
46+
47+
- Verify the folder name and RFC number match the process in `rfc/README.md`.
48+
- Verify every template section is present or intentionally marked as not
49+
applicable.
50+
- Run a Markdown formatting or lint check only if the repo already provides one
51+
for Markdown-only changes.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
interface:
2+
display_name: "Create RFC"
3+
short_description: "Create OpenShell RFC proposals"
4+
default_prompt: "Use $create-rfc to draft an OpenShell RFC from this design."

CONTRIBUTING.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ Skills live in `.agents/skills/`. Your agent's harness can discover and load the
6969
| Getting Started | `debug-openshell-cluster` | Diagnose gateway deployment and health issues |
7070
| Getting Started | `debug-inference` | Diagnose `inference.local`, host-backed local inference, and direct external inference setup issues |
7171
| Contributing | `create-spike` | Investigate a problem, produce a structured GitHub issue |
72+
| Contributing | `create-rfc` | Create RFC proposals from the repository template |
7273
| Contributing | `build-from-issue` | Plan and implement work from a GitHub issue (maintainer workflow) |
7374
| Contributing | `create-github-issue` | Create well-structured GitHub issues |
7475
| Contributing | `create-github-pr` | Create pull requests with proper conventions |
@@ -78,6 +79,7 @@ Skills live in `.agents/skills/`. Your agent's harness can discover and load the
7879
| Reviewing | `test-release-canary` | Dispatch and iterate on the Release Canary workflow that smoke-tests published artifacts |
7980
| Triage | `triage-issue` | Assess, classify, and route community-filed issues |
8081
| Platform | `generate-sandbox-policy` | Generate YAML sandbox policies from requirements or API docs |
82+
| Platform | `helm-dev-environment` | Start and manage the local Kubernetes development environment |
8183
| Platform | `tui-development` | Development guide for the ratatui-based terminal UI |
8284
| Documentation | `update-docs` | Scan recent commits and draft doc updates for user-facing changes |
8385
| Maintenance | `sync-agent-infra` | Detect and fix drift across agent-first infrastructure files |

rfc/0000-template/README.md

Lines changed: 105 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,36 +14,132 @@ See rfc/README.md for the full RFC process and state definitions.
1414

1515
## Summary
1616

17-
One paragraph explanation of the feature or change.
17+
Provide a brief overview of the change in one or two paragraphs. Focus on what
18+
the RFC proposes and the outcome it is intended to enable. Avoid diving into the
19+
full background, implementation detail, or tradeoff analysis here.
20+
21+
A reader should be able to understand the intent of the RFC from this section
22+
alone.
1823

1924
## Motivation
2025

21-
Why are we doing this? What problem does it solve? What use cases does it support?
26+
Explain why this change is necessary now. Describe the current problem, who it
27+
affects, and the workflows that are not well served today.
28+
29+
Include enough context that anyone can follow the reasoning. Two to five
30+
paragraphs is usually enough. Cross-cutting or historically loaded changes may
31+
need more context, but prefer linking to relevant issues, prior RFCs,
32+
architecture docs, design discussions, bug reports, or external references
33+
instead of restating long background material.
34+
35+
Useful questions to answer:
36+
37+
- What is broken, missing, confusing, or unnecessarily difficult today?
38+
- What constraints make this worth solving through an RFC instead of a smaller
39+
issue or pull request?
40+
- What happens if we leave the current design unchanged?
2241

2342
## Non-goals
2443

25-
What is explicitly out of scope for this RFC?
44+
List the related problems, design options, or implementation details that this
45+
RFC intentionally does not address. Be explicit about boundaries so reviewers
46+
can focus on the decision at hand.
47+
48+
Non-goals are especially useful when the RFC is part of a larger roadmap. Call
49+
out work that may happen later, work tracked by another issue or RFC, and
50+
requirements that are deliberately excluded.
51+
52+
Most RFCs can cover non-goals in three to seven bullets, with one sentence each.
53+
Add a short explanation only when a boundary would otherwise be easy to misread.
2654

2755
## Proposal
2856

29-
What are we actually proposing? Explain the design in enough detail that someone familiar with OpenShell can understand and implement it.
57+
This should be the main design section: explain the intended outcome, API shape,
58+
component boundaries, and any important invariants.
59+
60+
Organize the proposal into focused subsections when helpful. This is usually the
61+
longest section, but most RFCs should fit in two to six subsections, with each
62+
subsection roughly one to four paragraphs plus any needed diagrams or examples.
63+
64+
Include the high-value details reviewers need:
65+
66+
- Public interfaces such as APIs, CLI behavior, or configuration.
67+
- Internal boundaries such as crate responsibilities or driver contracts.
68+
- User experience and compatibility impacts.
69+
- Security, privacy, and operational constraints.
70+
- Diagrams or examples when they make the design easier to review.
3071

3172
## Implementation plan
3273

33-
How do we get from here to there? Consider rollout strategy, backwards compatibility, and migration.
74+
Explain how the project gets from the current state to the proposed state.
75+
Prefer concrete phases over a broad checklist when the work spans multiple
76+
components.
77+
78+
Cover:
79+
80+
- Required implementation, documentation, test, and release steps.
81+
- The intended order of changes and any temporary compatibility layers.
82+
- How existing users and integrations move forward.
83+
- How the change will be validated before and after release.
84+
- Whether the RFC can be implemented incrementally, behind a flag, or as a
85+
breaking change.
86+
87+
A short overview paragraph plus three to eight bullets or phases is usually
88+
enough. For phased work, keep each phase to one paragraph or a compact bullet
89+
list.
3490

3591
## Risks
3692

37-
Why should we *not* do this? What are the costs?
93+
Explain why the project might choose not to adopt this proposal. Include costs
94+
that go beyond implementation difficulty.
95+
96+
Consider:
97+
98+
- Compatibility risks and migration burden.
99+
- Security, reliability, or performance risks.
100+
- Complexity added to OpenShell's architecture or contributor workflow.
101+
- New dependencies or support obligations.
102+
- Failure modes and how operators or users would diagnose them.
103+
104+
Where possible, describe mitigations and remaining uncertainty separately.
105+
106+
Most RFCs should cover three to six risks, with one paragraph or bullet per
107+
risk. Higher-risk proposals may need more detail, but keep the focus on risks
108+
that could change the decision.
38109

39110
## Alternatives
40111

41-
What other designs have been considered? What is the impact of not doing this?
112+
Describe credible competing approaches that could solve the same problem,
113+
and explain why the proposal was chosen instead. Include the impact of doing
114+
nothing.
115+
116+
For each meaningful alternative, capture the tradeoff that matters most, such as
117+
implementation complexity or compatibility. Alternatives should make the final
118+
proposal easier to evaluate, not just list rejected ideas.
119+
120+
Most RFCs should cover one to four alternatives. If there are multiple
121+
alternatives, use one subsection per alternative and keep each subsection to one
122+
to three paragraphs.
42123

43124
## Prior art
44125

45-
Does this feature exist in other projects? What can we learn from them?
126+
Identify existing systems or previous OpenShell decisions that informed this
127+
proposal. Explain the lesson that applies here.
128+
129+
Prior art may include upstream projects, standards, RFCs from this repository,
130+
or operational experience from production systems.
131+
132+
Two to five references or examples is usually enough, with one paragraph each
133+
explaining the relevant lesson.
46134

47135
## Open questions
48136

49-
What parts of the design are still TBD?
137+
List unresolved design questions and decisions that need reviewer input. Keep
138+
this section current as the RFC evolves.
139+
140+
Each open question should be specific enough for a reviewer to answer or route
141+
to the right owner. If an answer would change the proposal materially, call that
142+
out.
143+
144+
This is usually a short bullet list. Keep each question to one or two sentences,
145+
and remove questions as they are answered.

0 commit comments

Comments
 (0)