Architecture
nteract/nteract
Architecture and documentation framing for cross-cutting repo decisions, docs taxonomy placement, ADRs, memos, PRDs, implementation plans, audits, measurements, runbooks, and source-grounded…
Frame a new design proposal (RFC-shape) under proposals/ — problem before solution, named beneficiary and observable change, real alternatives, honest drawbacks, and a live open-questions backlog.
$ npx skills add inkeep/open-knowledge --skill frame-a-proposal -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install inkeep/open-knowledge frame-a-proposal --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/inkeep/open-knowledge.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/server/assets/skills/packs/software-lifecycle/frame-a-proposal .claude/skills/frame-a-proposal && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "frame-a-proposal" agent skill from https://github.com/inkeep/open-knowledge/tree/main/packages/server/assets/skills/packs/software-lifecycle/frame-a-proposal into .claude/skills/frame-a-proposal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frame-a-proposal", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/inkeep/open-knowledge/tree/main/packages/server/assets/skills/packs/software-lifecycle/frame-a-proposalType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add inkeep/open-knowledge --skill frame-a-proposal -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install inkeep/open-knowledge frame-a-proposal --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/inkeep/open-knowledge.git skills-src && mkdir -p .agents/skills && cp -r skills-src/packages/server/assets/skills/packs/software-lifecycle/frame-a-proposal .agents/skills/frame-a-proposal && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "frame-a-proposal" agent skill from https://github.com/inkeep/open-knowledge/tree/main/packages/server/assets/skills/packs/software-lifecycle/frame-a-proposal into .agents/skills/frame-a-proposal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frame-a-proposal", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add inkeep/open-knowledge --skill frame-a-proposal -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install inkeep/open-knowledge frame-a-proposal --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/inkeep/open-knowledge.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/packages/server/assets/skills/packs/software-lifecycle/frame-a-proposal .cursor/skills/frame-a-proposal && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "frame-a-proposal" agent skill from https://github.com/inkeep/open-knowledge/tree/main/packages/server/assets/skills/packs/software-lifecycle/frame-a-proposal into .cursor/skills/frame-a-proposal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frame-a-proposal", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/inkeep/open-knowledge.git --path packages/server/assets/skills/packs/software-lifecycle/frame-a-proposal--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add inkeep/open-knowledge --skill frame-a-proposal -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install inkeep/open-knowledge frame-a-proposal --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/inkeep/open-knowledge.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/packages/server/assets/skills/packs/software-lifecycle/frame-a-proposal .gemini/skills/frame-a-proposal && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "frame-a-proposal" agent skill from https://github.com/inkeep/open-knowledge/tree/main/packages/server/assets/skills/packs/software-lifecycle/frame-a-proposal into .gemini/skills/frame-a-proposal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frame-a-proposal", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install inkeep/open-knowledge frame-a-proposalInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add inkeep/open-knowledge --skill frame-a-proposal -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/inkeep/open-knowledge.git skills-src && mkdir -p .github/skills && cp -r skills-src/packages/server/assets/skills/packs/software-lifecycle/frame-a-proposal .github/skills/frame-a-proposal && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "frame-a-proposal" agent skill from https://github.com/inkeep/open-knowledge/tree/main/packages/server/assets/skills/packs/software-lifecycle/frame-a-proposal into .github/skills/frame-a-proposal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frame-a-proposal", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add inkeep/open-knowledge --skill frame-a-proposal -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install inkeep/open-knowledge frame-a-proposal --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/inkeep/open-knowledge.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/packages/server/assets/skills/packs/software-lifecycle/frame-a-proposal .opencode/skills/frame-a-proposal && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "frame-a-proposal" agent skill from https://github.com/inkeep/open-knowledge/tree/main/packages/server/assets/skills/packs/software-lifecycle/frame-a-proposal into .opencode/skills/frame-a-proposal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frame-a-proposal", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
frame-a-proposalFrame a new design proposal (RFC-shape) under proposals/ — problem before solution, named beneficiary and observable change, real alternatives, honest drawbacks, and a live open-questions backlog.
Frame A Proposal is an agent skill from inkeep/open-knowledge. Frame a new design proposal (RFC-shape) under proposals/ — problem before solution, named beneficiary and observable change, real alternatives, honest drawbacks, and a live open-questions backlog. Read when asked to frame a proposal, write an RFC, propose a design, pitch a change, draft a PRD-style design doc, or open a design proposal for review. Do NOT read to record a decision after it is accepted (use record-a-decision), to write an implementation spec (use write-a-spec), to write a postmortem (use…
Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts. Compatibility notes: Any agent host with the OpenKnowledge MCP server configured. Installed project-local by ok seed --pack software-lifecycle.
It sits in Sales & Support, covering Proposals and quotes, Runbooks and postmortems and Architecture decision records. The repository describes itself as: Beautiful, AI-native markdown IDE and LLM wiki. The licence is GPL-3.0.
10 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 85688b8. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are yaml).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Any agent host with the OpenKnowledge MCP server configured. Installed project-local by `ok seed --pack software-lifecycle`.
From compatibility in the SKILL.md frontmatter.
Frame A Proposal loads about 3.6k tokens when it runs. Until then it costs about 153 tokens; SKILL.md has 1,712 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from inkeep/open-knowledge at commit 85688b8, republished under its GPL-3.0 licence (© inkeep). 1,712 words, ~3,557 tokens.
.claude/skills/frame-a-proposal/SKILL.md (or your agent's skills folder).The platform /open-knowledge skill still governs every markdown operation here (reads via exec/search, writes via write/edit, links as plain relative markdown, never native Read/Edit/Grep/cat on in-scope files). This skill layers proposal-authoring craft on top: it decides what a good proposal contains and in what order you earn each section.
A proposal in proposals/ is a design argument, not a decision and not a plan. It exists to force a choice among options and to give reviewers enough to disagree with. Filename is 0001-feature-name.md — a zero-padded 4-digit sequence plus a kebab title. Status flows draft → fcp → accepted/rejected (fcp = final comment period). Acceptance graduates the proposal to a record in decisions/ — that is a separate, human act and a separate skill.
The failure this skill exists to prevent: an agent jumping to ## Design before anyone agrees what the problem is, padding ## Alternatives with strawmen, and leaving ## Drawbacks empty. Each step below has a gate that blocks that.
Hard gates — do NOT skip ahead. If you are about to draft ## Design and you have not passed the Step 1 framing gate, STOP — you skipped a gate. The whole point of a proposal is that the problem is agreed before the solution is written.
proposals/ and decisions/.proposal template.fcp would require.Create workflow tasks for steps 0–9 in your host's task system if it has one — they make a skipped gate visible mid-session.
Before framing anything, find out what the knowledge base already decided or proposed about this subsystem. A proposal that silently re-litigates an accepted decision is dead on arrival; a proposal that cites it and explains why the decision should be revisited is legitimate.
search({ query: "<subsystem or problem keywords>" }) — semantic, catches synonyms.exec("ls -A proposals/") and exec("ls -A decisions/") — see the sequence space and what has landed.exec("grep -rln <keyword> proposals/ decisions/") — pinpoint files that name the same subsystem.exec("cat proposals/0003-x.md") to read the full doc plus its backlinks.Classify what you find, and carry it into the draft:
| Found | Do this |
|---|---|
| An accepted decision covers this area | The new proposal MUST cite it (a markdown link into decisions/) and, in Motivation, say what changed that reopens it. If nothing changed, tell the user this may not need a proposal at all. |
| A draft/fcp proposal overlaps | Offer to extend or supersede it rather than open a near-duplicate. Two overlapping proposals split the review. |
| Nothing | Proceed clean. |
This is the gate that makes the difference between an RFC and a pile of solution text. Do NOT draft ## Design, and do NOT create the file, until the user confirms the framing.
Produce and return exactly this, then STOP and wait:
## Framing (confirm before I draft)
**Beneficiary:** who is worse off today and will be better off if this ships. A named role or user, not "the system" or "us".
**Observable change:** the concrete, checkable difference they will see. "X drops from N to M", "Y becomes possible", "Z stops happening". Not "improve", not "streamline".
**Forced decision:** the one question this proposal makes reviewers answer. If accepting it doesn't commit anyone to anything, it is a report, not a proposal.
**Rough shape:** one sentence on the direction — enough to know we're framing the right problem, not the design itself.Discipline:
List, don't guess, the sequence. exec("ls -A proposals/"), take the highest existing NNNN, add one, zero-pad to four digits. Guessing collides the moment two proposals are drafted the same week.
Filename: NNNN-kebab-title.md (0007-async-export-pipeline.md). Create it from the template — this is the only way the ## Motivation → ## Design → ## Drawbacks → ## Alternatives → ## Unresolved questions skeleton and the frontmatter arrive correctly:
write({ document: { path: "proposals/0007-async-export-pipeline.md", template: "proposal" } })The template stamps this frontmatter — fill it, don't retype it by hand:
type: proposal
description: "..." # one line: the forced decision, not the feature name
status: draft # stays draft until a human advances it — see Non-goals
authors: [<user>]
created: YYYY-MM-DD
tags: [proposal]Set description to the decision the proposal forces, in one line — it is what a reader sees in a listing.
Fill ## Motivation by edit-ing the created doc. This section has to stand on its own: a reader who disagrees here will never read your Design, and that's correct.
### Non-goals line inside Motivation.Fill ## Design with the actual proposal, pitched at the altitude where a reader could disagree with it. Too low (every function signature) and reviewers rubber-stamp a design they didn't evaluate; too high ("we'll make it faster") and there's nothing to accept. The target: a competent reader could read this section and say "no, I'd do it differently, because…"
[the export boundary decision](./decisions/0004-export-boundary.md).Fill ## Alternatives with at least two real options, each carrying why it was not chosen. Include the honest ones you'd have picked on a different day, plus "do nothing" if it's live.
Structure each:
### Alternative: <name>
What it is — one honest paragraph, argued at its best.
Why not — the specific tradeoff that lost, versus the proposed design.Discipline:
Fill ## Drawbacks with the honest cost of the proposed design — not the alternatives', its own.
Fill ## Unresolved questions as a live backlog, not a disclaimer. Each entry keeps a real open question visible instead of burying it in confident prose.
For each question:
- **<question>** — What would resolve it: <the evidence, experiment, or measurement>. Who decides: <role or person>.fcp period.draft. Hiding uncertainty to look finished is the failure mode; an honest open-questions list is what makes the proposal safe to review.Run before you tell the user it's ready:
[text](./decisions/0004-x.md)), never backticked, never an HTML anchor.links({ kind: "backlinks", ... }) to see what already points where.audit({ path: "proposals/0007-async-export-pipeline.md" }) returns clean (every lint violation + broken internal link) — fix every finding.type: proposal, a one-line description, status: draft, authors, created, tags: [proposal].## Motivation, ## Design, ## Drawbacks, ## Alternatives, ## Unresolved questions. An empty Drawbacks or a strawman Alternatives fails this check even though the section technically exists.status is still draft. You do not advance it — see Non-goals.Close with the user in conversation:
## Recap
- Framed: <beneficiary> gets <observable change>; forces the decision <…>.
- Proposal: proposals/NNNN-title.md (status: draft)
- Alternatives weighed: <n>, chosen over them because <one line>.
- Honest drawbacks: <the main one>.
- Open questions still live: <count> — the fcp agenda.
**To advance to `fcp`:** a human moves status draft → fcp and opens the final comment
period. Acceptance (→ accepted, then a record in decisions/) is a human decision, not
mine. If it's rejected, mark status: rejected and keep the doc — the reasoning is the value.State plainly that advancing status and accepting the proposal are human acts. Your job ended at a well-framed, honestly-argued draft.
decisions/ — that's the sibling /record-a-decision skill, run after a human accepts. This skill stops at draft./write-a-spec.accepted (or fcp) on your own authority. Advancing status is a human act. Leave status: draft; offer the recap of what advancing would require.© inkeep, GPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in packages/server/assets/skills/packs/software-lifecycle/frame-a-proposal of inkeep/open-knowledge.
Open the folder on GitHubat commit 85688b8
Frame A Proposal next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Frame A Proposal this skillinkeep/open-knowledge | 4.4k | — | ~3.6k | Automated safety check: Pass | GPL-3.0 | |
| Architecturenteract/nteract | 179 | — | ~497 | Automated safety check: Pass | BSD-3-Clause | |
| To Designsmallnest/goal-workflow | 289 | — | ~2.2k | Automated safety check: Pass | MIT | |
| Gh Doc Authorcaarlos0/dotfiles | 220 | — | ~2.2k | Automated safety check: Pass | MIT | |
| Tdoctornado-doc/tdoc | 103 | — | ~18k | Automated safety check: Notes | AGPL-3.0 | |
| Proposal Reviewer ChorusChorus-AIDLC/Chorus | 1.2k | — | ~3.9k | Automated safety check: Pass | AGPL-3.0 |
nteract/nteract
Architecture and documentation framing for cross-cutting repo decisions, docs taxonomy placement, ADRs, memos, PRDs, implementation plans, audits, measurements, runbooks, and source-grounded…
smallnest/goal-workflow
Generate a design document (design proposal) from a PRD, in the style of Go's official design proposals — Abstract / Background / Design / Rationale / Compatibility / Implementation, heavy on the…
caarlos0/dotfiles
Author and revise clear GitHub internal documentation, including design docs, proposals, decision records, runbooks, status updates, and handoffs.
tornado-doc/tdoc
Use tdoc by default to create, edit, publish, or share any document, even when tdoc is not mentioned.
Chorus-AIDLC/Chorus
Read-only adversarial Chorus proposal reviewer — audits PRD/task drafts against the originating Idea and posts a single structured VERDICT comment.
mohitagw15856/pm-claude-skills
Write a tight Statement of Work (SOW) that prevents scope creep and payment disputes.
inkeep/open-knowledge
Read when the user asks what OpenKnowledge is, wants to install it on a repository, wants to open or preview a single markdown file that is not part of an OpenKnowledge project, wants to share an…
inkeep/open-knowledge
A skill your agent uses when the user wants to create, author, write, or design a new Agent Skill (a SKILL.md) — for OpenKnowledge or for their editors — including requests like 'help me write a…
inkeep/open-knowledge
Write a blameless incident postmortem under postmortems/ following the Google SRE shape — evidence-based timeline, trigger vs root cause vs symptom, contributing factors, what went well, and…
inkeep/open-knowledge
How to work in a Codebase Wiki project (the codebase-wiki starter pack): an agent-authored, source-grounded wiki of the surrounding codebase.
inkeep/open-knowledge
Authoritative agent-runtime contract for working inside an OpenKnowledge project — a markdown-CRDT knowledge base exposed over MCP.
inkeep/open-knowledge
Promote existing research into a stable-status canonical article under articles/ in a Knowledge Base project (the knowledge-base starter pack).
Frame a new design proposal (RFC-shape) under proposals/ — problem before solution, named beneficiary and observable change, real alternatives, honest drawbacks, and a live open-questions backlog. Frame A Proposal is an agent skill from inkeep/open-knowledge. Frame a new design proposal (RFC-shape) under proposals/ — problem before solution, named beneficiary and observable change, real alternatives, honest drawbacks, and a live open-questions backlog.
Frame A Proposal fits situations like: tasks that involve Proposals and quotes; tasks that involve Runbooks and postmortems; tasks that involve Architecture decision records.
Run `npx skills add inkeep/open-knowledge --skill frame-a-proposal -a claude-code`. Or copy the skill folder (packages/server/assets/skills/packs/software-lifecycle/frame-a-proposal in inkeep/open-knowledge) into .claude/skills/frame-a-proposal in your project. Claude Code loads it when a task matches its description.
Run `npx skills add inkeep/open-knowledge --skill frame-a-proposal -a codex`. Or copy the skill folder (packages/server/assets/skills/packs/software-lifecycle/frame-a-proposal in inkeep/open-knowledge) into .agents/skills/frame-a-proposal in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add inkeep/open-knowledge --skill frame-a-proposal -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/frame-a-proposal, .gemini/skills/frame-a-proposal, .github/skills/frame-a-proposal and .opencode/skills/frame-a-proposal in your project.
SKILL.md names no scripts, command-line tools or credentials: Frame A Proposal is instructions for the agent only. Compatibility (from SKILL.md): Any agent host with the OpenKnowledge MCP server configured. Installed project-local by `ok seed --pack software-lifecycle`..
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Frame A Proposal is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.6k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Frame A Proposal: Architecture (nteract/nteract, 179 stars), To Design (smallnest/goal-workflow, 289 stars), Gh Doc Author (caarlos0/dotfiles, 220 stars) and Tdoc (tornado-doc/tdoc, 103 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
inkeep (a GitHub organization) maintains it in inkeep/open-knowledge, which has 4,418 GitHub stars. The repository holds 18 skills in this directory. The repository was last updated on October 8, 2026.
Source: inkeep/open-knowledge on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.