Test Driven Development
sickn33/agentic-awesome-skills
Use a failing behavioral test to guide a feature or bug fix, then implement and refactor with relevant regression checks.
Follows a strict Test-Driven Development (TDD) workflow with four phases: triage, prepare, execute, and finalize.
$ npx skills add ruby-git/ruby-git --skill development-workflow -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ruby-git/ruby-git development-workflow --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/ruby-git/ruby-git.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/development-workflow .claude/skills/development-workflow && 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 "development-workflow" agent skill from https://github.com/ruby-git/ruby-git/tree/main/.github/skills/development-workflow into .claude/skills/development-workflow/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "development-workflow", 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/ruby-git/ruby-git/tree/main/.github/skills/development-workflowType 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 ruby-git/ruby-git --skill development-workflow -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ruby-git/ruby-git development-workflow --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ruby-git/ruby-git.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.github/skills/development-workflow .agents/skills/development-workflow && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "development-workflow" agent skill from https://github.com/ruby-git/ruby-git/tree/main/.github/skills/development-workflow into .agents/skills/development-workflow/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "development-workflow", 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 ruby-git/ruby-git --skill development-workflow -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ruby-git/ruby-git development-workflow --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ruby-git/ruby-git.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.github/skills/development-workflow .cursor/skills/development-workflow && 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 "development-workflow" agent skill from https://github.com/ruby-git/ruby-git/tree/main/.github/skills/development-workflow into .cursor/skills/development-workflow/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "development-workflow", 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/ruby-git/ruby-git.git --path .github/skills/development-workflow--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 ruby-git/ruby-git --skill development-workflow -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ruby-git/ruby-git development-workflow --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ruby-git/ruby-git.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.github/skills/development-workflow .gemini/skills/development-workflow && 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 "development-workflow" agent skill from https://github.com/ruby-git/ruby-git/tree/main/.github/skills/development-workflow into .gemini/skills/development-workflow/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "development-workflow", 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 ruby-git/ruby-git development-workflowInstalls 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 ruby-git/ruby-git --skill development-workflow -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ruby-git/ruby-git.git skills-src && mkdir -p .github/skills && cp -r skills-src/.github/skills/development-workflow .github/skills/development-workflow && 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 "development-workflow" agent skill from https://github.com/ruby-git/ruby-git/tree/main/.github/skills/development-workflow into .github/skills/development-workflow/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "development-workflow", 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 ruby-git/ruby-git --skill development-workflow -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ruby-git/ruby-git development-workflow --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ruby-git/ruby-git.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.github/skills/development-workflow .opencode/skills/development-workflow && 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 "development-workflow" agent skill from https://github.com/ruby-git/ruby-git/tree/main/.github/skills/development-workflow into .opencode/skills/development-workflow/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "development-workflow", 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.
development-workflowFollows a strict Test-Driven Development (TDD) workflow with four phases: triage, prepare, execute, and finalize.
Development Workflow is an agent skill from ruby-git/ruby-git. Follows a strict Test-Driven Development (TDD) workflow with four phases: triage, prepare, execute, and finalize. Use for bug fixes, feature implementation, refactoring, maintenance tasks, and issue triage / diagnosis (triage phase only for diagnosis without implementation).
Its SKILL.md is about 6.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA, covering Test-driven development, Refactoring and Debugging. The repository describes itself as: Ruby/Git is a Ruby library that can be used to create, read and manipulate Git repositories by wrapping system calls to the git binary. The licence is MIT.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit f3bf20f. 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.
Shell commands in SKILL.md call:
ghbundlegitrubyFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use gh and git, which can reach the network depending on how they are called.
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.
Development Workflow loads about 6.1k tokens when it runs. Until then it costs about 74 tokens; SKILL.md has 3,193 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 ruby-git/ruby-git at commit f3bf20f, republished under its MIT licence (© ruby-git). 3,193 words, ~6,146 tokens.
.claude/skills/development-workflow/SKILL.md (or your agent's skills folder).This skill implements a strict Test-Driven Development (TDD) workflow.
This project strictly follows TDD practices. All production code MUST be written using the TDD process described below.
Attach this file to your Copilot Chat context, then invoke it when implementing features, fixing bugs, refactoring, or maintaining code. Follow phases in order and stop after TRIAGE when the issue is non-actionable or needs clarification.
When assigned a task involving a GitHub issue, follow this workflow:
Note: Not all issues require implementation. Phase 0 may result in requesting clarification, confirming the issue is a duplicate, or determining no changes are needed.
Git::Commands::* classes during implementationGit::Repository::* facade methods during implementationAdhere to the following fundamental principles to ensure high code quality and test coverage:
The purpose of this phase is to understand what the issue is asking for, investigate the current state of the codebase, and determine whether implementation is needed.
Use this phase when the user references a GitHub issue number (e.g., "Fix issue #999", "Implement #999", "Diagnose issue #999").
Fetch the Issue: Use gh issue view #999 to read the full issue content,
including description, comments, and labels.
Understand the Request: Analyze what is being asked:
Search for Context: Investigate the codebase to understand the area affected:
grep_search or semantic_search to find relevant codeReproduce (if applicable): For bug reports:
Determine Next Steps and Report Findings:
Option A: Issue needs clarification
gh issue comment #999 --body "..."Option B: Issue is not actionable (duplicate, won't-fix, already resolved)
Option C: Issue is clear and actionable
Option D: User asked only to diagnose (not implement)
GitHub CLI Commands for Phase 0:
gh issue view #999gh issue view #999 --commentsgh issue comment #999 --body "Your comment here"gh issue list --search "keyword"The purpose of this phase is to ensure the project environment is ready, establish a clean baseline, and create a clear implementation plan before writing any code.
Only proceed to this phase if Phase 0 determined that implementation is needed.
main, 5.x, or
4.x per the branch strategy. Then
create a new branch from origin/<target-branch> using the naming convention
<type>/<short-description> (e.g., fix/issue-999).bin/setup to ensure that the project is ready
for development.bundle exec rake default.The purpose of this phase is to implement each planned task using strict TDD cycles, ensuring every line of production code is driven by a failing test.
Execute each task by repeating the following cycle of steps until all tasks are complete:
When all tasks are complete, proceed to Phase 3: FINALIZE.
RED Substep
The purpose of this substep is to write a failing test that you hypothesize will pass with the next incremental bit of task implementation.
bundle exec rspec spec/unit/git/commands/<command>_spec.rb) and analyze the
output.GREEN Substep
The purpose of this substep is to write just enough production code to make the failing test(s) pass.
The purpose of this step is to improve code quality and design without changing behavior, ensuring the codebase remains clean and maintainable.
You must consider refactoring before starting the next task. Remove duplication, improve variable names, and apply design patterns. Skip this step only if the code is already clean and simple—avoid over-engineering.
For detailed guidance on code smells, refactoring techniques, test cleanup, and rubocop integration, see the TDD Refactor Step skill.
bundle exec rake default and verify they still pass.The purpose of this step is to confirm that the current task is fully complete before moving to the next task.
bundle exec rspec and bundle exec rake test to ensure
all tests pass.bundle exec rubocop and bundle exec rake yard to verify
code style and documentation standards.Git::Commands::* class, apply the
Command Test Conventions skill to every new or
changed spec file before committing. Fix any violations found before moving to the
COMMIT step.Git::Commands::* source file, apply the
Command YARD Documentation
skill to each changed source file. Fix any documentation gaps before committing.The purpose of this step is to create a checkpoint after successfully completing a task, providing a safe rollback point.
The purpose of this step is to review progress and adjust the implementation plan based on what was learned during the current task.
[x] Task 1, [ ] Task 2).The purpose of this phase is to consolidate all task commits into a single, clean commit and complete the feature or bug fix.
Run Final Verification: Run bundle exec rake default one final time to
ensure everything passes.
Safety Check: Run git log --oneline HEAD~N..HEAD (where N is the number of
task commits) to list the commits included in the squash. Verify these are
strictly the commits generated during the current session. If unexpected commits
appear, STOP and ask the user for the correct value of N.
Capture Commit Messages: Run git log --format="- %s" HEAD~N..HEAD to capture
individual commit messages for inclusion in the final commit body.
Draft the Squash Message: Prepare a commit message with:
feat(branch): add Branch#create method)Propose the Squash: Present the drafted message and the commands to squash to the user:
git reset --soft HEAD~N (where N is the number of task commits)git commit -m "<drafted message>"Wait for Confirmation: Do NOT execute the squash until the user reviews the commits and confirms. The user may want to adjust the message or keep some commits separate.
Execute on Confirmation: Once confirmed, run git reset --soft HEAD~N to
unstage the task commits while preserving all changes, then commit with the
approved message.
Handle Commit Hook Failure: If the commit fails due to a commit-msg hook
rejection (e.g., commitlint error):
npx commitlint --format @commitlint/format < commit_msg.txtcat commit_msg.txt | node -e "
const parse = require('@commitlint/parse');
let msg = '';
process.stdin.on('data', d => msg += d);
process.stdin.on('end', () =>
parse.default(msg.trim()).then(r => console.log(JSON.stringify(r, null, 2)))
);
" | jqgit commit command needs to be re-run.Create the Pull Request: Push the branch and open the PR. CRITICAL: The
terminal tool mangles multi-line markdown (backticks, asterisks, newlines) in any
shell command — including heredocs and inline --body "..." arguments. Always
write the PR body using the create_file tool (not the terminal), then
reference that file:
create_file to write the body to ./pr_body.md (repo-relative path,
works on all platforms)git push origin <branch>gh pr create --title "<title>" --base <target-branch> --body-file ./pr_body.md
(the target branch chosen in Phase 1)After creating the PR, verify the stored body with
gh pr view <number> --json body --jq '.body'. If it is garbled, rewrite
./pr_body.md with create_file and fix with
gh pr edit <number> --body-file ./pr_body.md.
In the COMMIT step, create a commit for the completed task following these guidelines:
test: for adding or modifying tests (RED step)feat: for new user-facing functionality (triggers MINOR version bump)fix: for bug fixes (GREEN step for bugs)refactor: for code improvements without behavior changechore: for internal tooling or maintenancefeat(branch):, test(remote):).feat(branch): add create method).#<number> in the commit
body — write issue 1000 not issue #1000. A commitlint parser flaw treats
any line containing #<number> as a footer token, permanently breaking the
body/footer split for all subsequent lines.Closes/Fixes/Resolves with # in the
footer — e.g. Closes #1000.# in the body and no
footer line is needed.These guidelines supplement the TDD process:
Justify Test Modifications: If an existing test needs to be modified, STOP and report to the user before making the change. Explain which test needs modification, why the expected behavior is changing, and whether this represents a breaking change. Wait for user confirmation before proceeding.
Unrelated Test Failures: If you need to modify a test file that is not related to the current task to make the build pass, STOP and report to the user. This usually indicates a deeper regression, environment issue, or flawed assumption. Do not attempt to fix unrelated tests without user guidance.
Handle Discovered Complexity: If the implementation reveals a complex logic gap, add it to your task list but finish the current cycle first.
Test Names Describe Behavior: Name tests to clearly describe what behavior they
verify (e.g., test_creates_new_branch not test_branch).
Ask for Clarification: Stop and ask for clarification if requirements or expectations are ambiguous.
Do NOT Update CHANGELOG.md: The CHANGELOG is auto-generated from commit messages. Never edit it manually.
Bulk File Text Substitutions: When renaming classes, methods, or files across
many files simultaneously, avoid complex chained sed commands — the terminal tool
can mangle multi-pattern substitutions with non-trivial quoting or multi-line
heredocs. Instead, write the substitution logic to a temporary Ruby script and
execute it:
# tmp_rename.rb
files = Dir.glob('lib/**/*.rb') +
Dir.glob('spec/**/*.rb') +
Dir.glob('tests/**/*.rb')
files.each do |f|
src = File.read(f)
# Apply most-specific patterns first to avoid partial matches
new_src = src
.gsub('OldClassName', 'NewClassName')
.gsub("require_relative 'old_path'", "require_relative 'new_path'")
File.write(f, new_src) if new_src != src
endRun the script, then delete it:
ruby tmp_rename.rb
rm tmp_rename.rb # macOS/Linux
del tmp_rename.rb # Windows (cmd)
Remove-Item tmp_rename.rb # Windows (PowerShell)Apply substitutions from most-specific to least-specific to prevent partial
matches (e.g., replace FooBarBaz before FooBar).
Each task follows this cycle: RED → GREEN → REFACTOR → VERIFY → COMMIT → REPLAN
RED: Write a failing test that describes the desired behavior.
# spec/unit/git/commands/example_spec.rb
it 'passes the --force flag when force: true is given' do
expect_command_capturing('example', '--force').and_return(command_result(''))
described_class.new(execution_context).call(force: true)
end
# Run: bundle exec rspec spec/unit/git/commands/example_spec.rb
# → fails: NameError (Git::Commands::Example is not defined yet)GREEN: Write minimal code to make the test pass.
# lib/git/commands/example.rb
module Git
module Commands
class Example < Base
arguments do
literal 'example'
flag_option :force
end
end
end
end
# Run: bundle exec rspec spec/unit/git/commands/example_spec.rb → passesREFACTOR: Improve code quality without changing behavior, then run all tests.
VERIFY: Run bundle exec rake default to confirm tests and linters pass.
COMMIT: git commit -m "feat(branch): add Branch#create method"
REPLAN: Report progress, update task list, proceed to next task or FINALIZE.
FINALIZE (after all tasks): Propose squash commit with captured messages, wait
© ruby-git, MIT. 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 .github/skills/development-workflow of ruby-git/ruby-git.
Open the folder on GitHubat commit f3bf20f
Development Workflow 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 |
|---|---|---|---|---|---|---|
| Development Workflow this skillruby-git/ruby-git | 1.8k | — | ~6.1k | Automated safety check: Pass | MIT | |
| Test Driven Developmentsickn33/agentic-awesome-skills | 47k | 1 repos | ~2.1k | Automated safety check: Pass | MIT | |
| Devnpc-live/clawfirm | 156 | — | ~642 | Automated safety check: Pass | None | |
| Triage Issuesoftspark/ai-toolkit | 179 | — | ~1.3k | Automated safety check: Notes | Apache-2.0 | |
| Ralph Prompt Single Taskmajiayu000/claude-skill-registry | 666 | 1 repos | ~2.7k | Automated safety check: Pass | MIT | |
| Pstack Skillfabricioctelles/skills | 105 | — | ~5k | Automated safety check: Pass | Apache-2.0 |
sickn33/agentic-awesome-skills
Use a failing behavioral test to guide a feature or bug fix, then implement and refactor with relevant regression checks.
npc-live/clawfirm
Software development workflow dispatcher. An agent skill from npc-live/clawfirm.
softspark/ai-toolkit
Bug triage: explores codebase for root cause, files GitHub issue with TDD fix plan.
majiayu000/claude-skill-registry
Generate Ralph-compatible prompts for single implementation tasks.
fabricioctelles/skills
Rigorous engineering orchestrator ported from Lauren Tan's pstack (poteto-mode): reads your task, picks one of 23 playbooks (bug fix, feature, refactoring, perf, investigation, prototype, babysit…
getsentry/sentry-dart
Enforce Sentry Dart/Flutter SDK test conventions for naming, structure, and fixtures.
ruby-git/ruby-git
Addresses unresolved pull request review threads and suppressed (low-confidence) Copilot review comments on the current branch, folds each fix into the…
ruby-git/ruby-git
Assesses what an API change would break before it is made, finds every usage, documents the impact and plans a deprecation or migration path.
ruby-git/ruby-git
Diagnoses and fixes failing GitHub Actions runs by identifying the failure, fetching only the relevant logs, finding the root cause and reproducing it locally.
ruby-git/ruby-git
Scaffolds and reviews `Git::Commands::*` classes in the ruby-git library, with unit tests, integration tests and YARD docs, using the Base command architecture.
ruby-git/ruby-git
Workflow for updating gem dependencies and fixing CVEs in the ruby-git project: assess with bundle outdated and audit, edit the gemspec, test, then commit with conventional messages.
ruby-git/ruby-git
Migrates a direct command call in Ruby Git's Git::Lib to a Git::Commands class, as part of a Strangler Fig redesign, with a plan, legacy tests and a pull request.
Categories
Follows a strict Test-Driven Development (TDD) workflow with four phases: triage, prepare, execute, and finalize. Development Workflow is an agent skill from ruby-git/ruby-git. Follows a strict Test-Driven Development (TDD) workflow with four phases: triage, prepare, execute, and finalize.
Development Workflow fits situations like: feature implementation; maintenance tasks; issue triage / diagnosis (triage phase only for diagnosis without implementation).
Run `npx skills add ruby-git/ruby-git --skill development-workflow -a claude-code`. Or copy the skill folder (.github/skills/development-workflow in ruby-git/ruby-git) into .claude/skills/development-workflow in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ruby-git/ruby-git --skill development-workflow -a codex`. Or copy the skill folder (.github/skills/development-workflow in ruby-git/ruby-git) into .agents/skills/development-workflow 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 ruby-git/ruby-git --skill development-workflow -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/development-workflow, .gemini/skills/development-workflow, .github/skills/development-workflow and .opencode/skills/development-workflow in your project.
Going by SKILL.md and its folder, Development Workflow needs the command-line tools its instructions call (gh, bundle, git and ruby).
SKILL.md contains no URLs. Its commands use gh and git, which can reach the network depending on how they are called. 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.
Development Workflow is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6.1k tokens (SKILL.md is roughly 25k 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 Development Workflow: Test Driven Development (sickn33/agentic-awesome-skills, 47k stars), Dev (npc-live/clawfirm, 156 stars), Triage Issue (softspark/ai-toolkit, 179 stars) and Ralph Prompt Single Task (majiayu000/claude-skill-registry, 666 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ruby-git (a GitHub organization) maintains it in ruby-git/ruby-git, which has 1,799 GitHub stars. The repository holds 30 skills in this directory. The repository was last updated on October 2, 2026.
Source: ruby-git/ruby-git on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.