Agent skill

Software Design

by uw-syfi in uw-syfi/vibesys

Design, structure, or change code in any language in this repository.

MITAuto-check passedDevelopment

Install Software Design

skills CLI
$ npx skills add uw-syfi/vibesys --skill software-design -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install uw-syfi/vibesys software-design --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/uw-syfi/vibesys.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/software-design .claude/skills/software-design && rm -rf skills-src

Use ~/.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/

Facts

Skill name
software-design
GitHub stars
103
Token cost
~2.5k tokens
SKILL.md length
1,374 words
Files
8 (incl. references)
Skills in repo
15
Repo updated
First seen
Licence
MIT

At a glance

Design, structure, or change code in any language in this repository.

  • Works in 8 steps: Owner. Which module owns this behavior?… → Interface. What is the public interface… → Direction. Which way do data and… → …
  • Tasks that involve Debugging
  • SKILL.md covers Design checkpoint, Rules and Before handing back
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Software Design is an agent skill from uw-syfi/vibesys. Design, structure, or change code in any language in this repository. Applies to every code change, especially adding or moving modules, interfaces, dependencies, data flow, config, resource handling, or calls to agents, clusters, or subprocesses, to every bug fix, and to any refactor, split, migration, or contract change.

Its SKILL.md is about 2.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 9 other files, including reference files (for example `agents/openai.yaml`, `references/boundaries.md` and `references/evolving.md`).

It sits in Development, covering Debugging. The repository describes itself as: Can AI Agents Build Bespoke Systems? The licence is MIT.

When your agent uses it

  • Tasks that involve Debugging

Example prompts

  • “/software-design”

Requirements

  • Python 3

Workflow steps

8 steps, taken from the first numbered list in SKILL.md.

  1. Owner. Which module owns this behavior? If none, is a new one justified?
  2. Interface. What is the public interface after the change? Is it smaller
  3. Direction. Which way do data and dependencies flow? Does any new import
  4. Coupling. What new coupling does this add? Could it be removed instead?
  5. Size. Does the unit you are growing now need its internals known by its
  6. Twice. Sketch a second, materially different interface. Keep the one
  7. Mechanism. For every bug fix, name the mechanism that allowed the bug
  8. Functional core. Which part is pure core, which interfaces does the shell

What it can do on your machine

Read from SKILL.md and the folder at commit c7784eb. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Software Design loads about 2.5k tokens when it runs, and up to ~10k if it reads all its reference files. Until then it costs about 85 tokens; SKILL.md has 1,374 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~85
When it runs · the whole SKILL.md, loaded when a task matches
~2.5k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~10k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from uw-syfi/vibesys at commit c7784eb, republished under its MIT licence (© uw-syfi). 1,374 words, ~2,500 tokens.

Download SKILL.mdSave it as .claude/skills/software-design/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.
name
software-design
description
Design, structure, or change code in any language in this repository. Applies to every code change, especially adding or moving modules, interfaces, dependencies, data flow, config, resource handling, or calls to agents, clusters, or subprocesses, to every bug fix, and to any refactor, split, migration, or contract change.

Software design

The goal is deep modules: a small, stable interface in front of an implementation that may be as complex as it needs to be. The rest of the system depends on the guarantees of the interface and never has to think about what is behind it. Loose coupling and clear ownership follow from that.

These rules are language-independent. Tools, thresholds, and idioms live in a per-language reference; read the one for the language you are editing:

Design checkpoint

Before writing code, answer these. Record the answers in the PR's Design section.

  1. Owner. Which module owns this behavior? If none, is a new one justified?
  2. Interface. What is the public interface after the change? Is it smaller or larger than before?
  3. Direction. Which way do data and dependencies flow? Does any new import point back toward the caller?
  4. Coupling. What new coupling does this add? Could it be removed instead?
  5. Size. Does the unit you are growing now need its internals known by its callers? See rule 5.
  6. Twice. Sketch a second, materially different interface. Keep the one that hides more.
  7. Mechanism. For every bug fix, name the mechanism that allowed the bug before choosing the fix, then search for its other instances: sibling exit paths, roles, backends, tools, and call sites that state the same fact. One instance found is not evidence of one instance. Change the mechanism instead of patching each place: a constrained type where agent output becomes a name or path, one source of truth that consumers project from, one owner that every exit path passes through, a failure type set where the failure happens. Record the class and the instances found (or "none found, searched X") in the PR. If the mechanism fix is too large for the PR, land the instance fix only to unblock, and name the mechanism fix as a follow-up.
  8. Functional core. Which part is pure core, which interfaces does the shell call for its requests, which library owns each, and which implementations exist? Where does durable intent live, and how is an interrupted transition recovered?

Rules

  1. Deep modules. Put complexity inside, not in the interface. Make the common case simple, pull complexity downward instead of exposing it as options, and prefer computing a default over adding a knob.
  2. Declare the public interface. Every module has a declared, enforced surface with a short contract (what it guarantees, why, how it fails). Callers use only that surface. Distinguish published (external callers depend on it) from internal (free to change). New and split modules must declare theirs.
  3. An interface promises substitutability. Share one only if a caller can be written once and stay correct for every implementation, failures included. Red flags: methods some implementations skip or reject, supports_x flags, kind checks in callers, a shared contract test that needs skips. If not substitutable, prefer, in order: narrow role interfaces; a closed union with exhaustive matching; optional capability interfaces; translation at the wiring layer; duplicating until the third case; extracting only the common mechanism. See references/red-flags.md.
  4. One-way dependencies and data flow. Inputs flow through core into typed outputs that consumers interpret. Each layer has its own abstraction; no pass-through wrappers. No cycles. Prefer removing dependencies to adding them.
  5. Factor when callers need internals. Size is the cue to check, not the reason to split. When a unit grows until callers must know how it works, make it a unit the dependency tooling can track, with a clear interface.
  6. Policy versus mechanism. Follow the package layout and placement rule in architecture.md. Defaults and selected values live in configuration; implementations apply what they are given; wiring connects them. A new case changes configuration, not a per-type branch in every implementation.
  7. Parse at boundaries, typed inside, fail loudly. Validate external input once, at the edge, into typed values; reject unknown keys and name the offender. Define an error away only where the semantics are well defined, and never mask errors on agent-visible contracts. No fallback may produce a plausible-looking result: a terminal status is derived from the work done (a run that did nothing did not complete), and a missing required input is an error, not a guessed default such as a shared temp path.
  8. One source of truth. Store the minimal state and derive the rest. Generate downstream definitions from the authoritative one.
  9. Own resources, isolate I/O. The creator of a resource owns its cleanup, on every path, through one construct that every exit passes through (return, exception, cancellation, signal, stop request), not a handler per exit path. A parent process forwards signals to the owner and never kills it before its cleanup runs. Put I/O (processes, network, clock, filesystem) behind the owning library's interface. Keep resource lifecycle decisions in the pure core (rule 14); see the testing skill.
  10. Distrust external boundaries. Agents, agent CLIs, clusters, MCP clients, and subprocesses delay, fail, and misbehave; design for it at the boundary, once. Read references/boundaries.md when you add or change a call across one, or an agent tool server (its own module, library, or standalone server under resources/). In short: agent output is untrusted input, and an option the run does not offer is absent from the schema, not rejected after the fact; every call has a deadline derived from the caller's limit; failures are typed (transient, permanent, unsupported); operations are idempotent so retry and cancel are safe; transport retries are bounded and only for transient failures of idempotent operations; what the system offers is derived from what the executor reports it supports.
  11. Fit the change to the design. Make the change as if the design had anticipated it, not the smallest diff that works. Prepare first: refactor to make the change easy, then make it. Never extend an existing violating pattern. Clean only your own path, in a separate commit or PR; otherwise file an issue and note it in the Design section. Abstract at the third case, not the first. Change a contract by expand, migrate, contract, and land the contract step. Read references/evolving.md when you refactor, split, migrate, or change a contract.
  12. Agent-bound text is a template. Prompts, system prompts, and the fragments inside them are rendered by vs_prompts from .j2 files. Python passes data; the template owns the wording, conditionals, and loops. Never build prompt text with +, f-strings, .format, or .join, and never append to rendered output. tests/architecture/test_prompt_templates.py enforces this. Text agents read later (progress files, tool results) is agent-bound too: take it as a RenderedPrompt parameter, which makes the call a checked sink. A prompt that points the agent at written text takes the proof of the write as data (a ProgressEntry from ProgressLog.append) and guards the pointer on it; tests/architecture/test_progress_pointers.py enforces this.
  13. Lint suppressions are explicit opt-outs. First consider reasonable lint-compliant fixes. Suppress only when those fixes would make the design more hacky than retaining the current code. In the source rationale, list the alternatives considered and explain why each is worse. Effort, time, and existing violations are not reasons by themselves.
  14. Functional core, interfaces and implementations. Design stateful orchestration, workstream and hypothesis lifecycle, scheduling, evaluation lifecycle, and resource release as state + event -> new state + requests. Keep I/O, clocks, randomness, and asyncio out of the core. Let a thin shell call each owning library's interface and return typed outcomes as events. Persist intent before I/O and recover unfinished transitions. This keeps decisions modular and makes exhaustive stress testing practical. Read references/functional-core.md for contracts, placement, recovery, and naming. For boundary robustness (one event per fact, monotone observations, outcome unions, no orphan waits, fencing epochs), read the Crash consistency and Outcomes sections of that reference. In prose, say "interface" and "implementation"; an interface is a typing.Protocol in its owning library's .api, named by role with no suffix (Cluster, StateStore, AgentSessions). Implementations are <Variant><Role> (SlurmCluster, FakeCluster, DockerSandbox, ModalSandbox); each interface has several substitutable implementations that all pass one contract test suite shipped by the owning library.
Show full SKILL.md (38 more words)Show less

Before handing back

  • Re-read the checkpoint answers against the diff; update the Design section.
  • Run the language's boundary and lint checks (see its reference).
  • Do not refactor unrelated code. Apply these rules to code you add or change.

© uw-syfi, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 7 other files (references) in .agents/skills/software-design of uw-syfi/vibesys.

  • SKILL.md
  • agents/openai.yaml
  • references/boundaries.md
  • references/evolving.md
  • references/functional-core.md
  • references/python.md
  • references/red-flags.md
  • references/typescript.md

Open the folder on GitHubat commit c7784eb

Compare with similar skills

Software Design 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.

Software Design compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Software Design this skilluw-syfi/vibesys103—~2.5kAutomated safety check: PassMIT
Trellis Session Insightmindfold-ai/Trellis15k4 repos~1.7kAutomated safety check: PassAGPL-3.0
Native Data FetchingCherryHQ/cherry-studio-app4k6 repos~2.9kAutomated safety check: NotesMIT
Debugging Executionsn8n-io/n8n207k—~2.6kAutomated safety check: PassCustom licence
Aoti Debugpytorch/pytorch104k1 repos~1.7kAutomated safety check: PassCustom licence
Herdr Throwaway Reproductionherdrdev/herdr43k—~2.4kAutomated safety check: PassApache-2.0

Similar skills

  • Trellis Session Insight

    mindfold-ai/Trellis

    Reach into past AI conversation history through the trellis mem CLI.

    15k GitHub starsUsed in 4 repos~1.7k tokens
    DevelopmentAuto-check passed
  • Native Data Fetching

    CherryHQ/cherry-studio-app

    A skill your agent uses when implementing or debugging ANY network request, API call, or data fetching.

    4k GitHub starsUsed in 6 repos~2.9k tokens
    DevelopmentAuto-check: notes
  • Official

    Debug failed or wrong-output workflow executions using executions tools.

    207k GitHub stars~2.6k tokensUpdated today
    DevelopmentAuto-check passed
  • Aoti Debug

    pytorch/pytorch

    Debug AOTInductor (AOTI) errors and crashes. An agent skill from pytorch/pytorch.

    104k GitHub starsUsed in 1 repo~1.7k tokens
    DevelopmentAuto-check passed
  • Runs a disposable, uniquely named Herdr session inside an existing one so runtime, pane, terminal or API bugs can be reproduced without touching the main session.

    43k GitHub stars~2.4k tokensUpdated today
    DevelopmentAuto-check passed
  • Systematic Debugging

    ultralisp/ultralisp

    A skill your agent uses when encountering any bug, test failure, or unexpected behavior, before proposing fixes

    258 GitHub starsUsed in 51 repos~2.4k tokens
    DevelopmentAuto-check passed

More from uw-syfi/vibesys

All 15 skills in this repo
  • Neuron Nki Profiling

    uw-syfi/vibesys

    This skill guides using the cli to generate NKI kernel profiles (NEFF + NTFF pairs) to analyze performance on Neuron hardware.

    103 GitHub stars~3.2k tokensUpdated today
    Auto-check passed
  • Neuron Nki Debugging

    uw-syfi/vibesys

    This skill guides debugging NKI compilation errors on Neuron hardware.

    103 GitHub stars~2.7k tokensUpdated today
    Auto-check passed
  • Neuron Nki Docs

    uw-syfi/vibesys

    Research NKI documentation for API lookups, tutorials, error codes, architecture, and optimization guides.

    103 GitHub stars~1.9k tokensUpdated today
    Auto-check passed
  • Query and analyze NKI kernel profile data from neuron-explorer parquet files.

    103 GitHub stars~4.3k tokensUpdated today
    Auto-check passed
  • Neuron Nki Writing

    uw-syfi/vibesys

    Guide for writing and modifying NKI kernels. An agent skill from uw-syfi/vibesys.

    103 GitHub stars~5k tokensUpdated today
    Auto-check passed
  • Triage PRs

    uw-syfi/vibesys

    Triage the open pull requests of the VibeSys repository. An agent skill from uw-syfi/vibesys.

    103 GitHub stars~1.2k tokensUpdated today
    Auto-check passed

Categories

Questions about Software Design

What does Software Design do?

Design, structure, or change code in any language in this repository. Software Design is an agent skill from uw-syfi/vibesys. Design, structure, or change code in any language in this repository.

When should I use Software Design?

Software Design fits situations like: tasks that involve Debugging.

How do I install Software Design in Claude Code?

Run `npx skills add uw-syfi/vibesys --skill software-design -a claude-code`. Or copy the skill folder (.agents/skills/software-design in uw-syfi/vibesys) into .claude/skills/software-design in your project. Claude Code loads it when a task matches its description.

How do I install Software Design in Codex?

Run `npx skills add uw-syfi/vibesys --skill software-design -a codex`. Or copy the skill folder (.agents/skills/software-design in uw-syfi/vibesys) into .agents/skills/software-design in your project. Codex loads it when a task matches its description.

Can I use Software Design in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add uw-syfi/vibesys --skill software-design -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/software-design, .gemini/skills/software-design, .github/skills/software-design and .opencode/skills/software-design in your project.

What does Software Design need to run?

SKILL.md names no scripts, command-line tools or credentials: Software Design is instructions for the agent only. Our summary lists: Python 3.

Does Software Design access the network?

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.

Is Software Design safe to install?

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.

What licence does Software Design use?

Software Design is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Software Design use?

About 2.5k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 7.8k tokens, read only when the agent opens those files.

What are the alternatives to Software Design?

Skills that share tags, products or a category with Software Design: Trellis Session Insight (mindfold-ai/Trellis, 15k stars), Native Data Fetching (CherryHQ/cherry-studio-app, 4k stars), Debugging Executions (n8n-io/n8n, 207k stars) and Aoti Debug (pytorch/pytorch, 104k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Software Design?

uw-syfi (a GitHub organization) maintains it in uw-syfi/vibesys, which has 103 GitHub stars. The repository holds 15 skills in this directory. The repository was last updated on October 9, 2026.

Source: uw-syfi/vibesys on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.