New to Claude Skills? Learn how to install them →

mims-harvard on GitHub

DevTU GitHub Workflow

Free

Streamline your GitHub pushes with automated checks.

Get this skill

Free · Opens the source repo

What DevTU GitHub Workflow does

The DevTU GitHub Workflow is a bash script designed to enhance the code pushing process for ToolUniverse projects on GitHub. It automates essential tasks to ensure that only the necessary files are staged and pushed, while also enforcing code quality through pre-commit hooks and running tests. This workflow is particularly useful for developers who want to maintain clean commit histories and avoid common pitfalls associated with pushing code, such as accidentally including temporary files or failing tests.

When you initiate a push, the workflow begins with a pre-push cleanup phase. This step moves temporary markdown files and ad-hoc test scripts out of the root directory to a designated folder, preventing them from being accidentally pushed to the repository. Following this, it verifies that no unwanted files are staged, ensuring a clean commit. The script also checks for the presence of pre-commit hooks and activates them if necessary, allowing for automatic linting and formatting checks on every commit.

The workflow further includes a phase for running tests locally before committing. By executing the full test suite, developers can identify and resolve issues early, ensuring that only working code is pushed. After resolving any test failures, the script guides users through the process of staging specific files, committing changes, and pushing to GitHub while adhering to best practices like rebasing onto the latest main branch.

This skill is aimed at developers working with the ToolUniverse project who want to streamline their GitHub interactions and maintain high code quality. It is particularly beneficial for teams that prioritize clean code management and automated testing processes.

When to use it

Use this skill when preparing to push code to GitHub, especially if you want to enforce clean commit practices and run tests beforehand.

When not to use it

This skill may not be suitable for projects that do not require strict file management or automated testing, or for users unfamiliar with Git commands.

What you can build with it

Preparing for a Code Push

Before pushing code to GitHub, use this workflow to ensure that only relevant files are staged and that all tests pass.

Fixing CI Failures

If you encounter CI failures, run the tests locally using this workflow to diagnose and resolve issues before pushing.

Cleaning Up Commits

Use this workflow to automate the cleanup of temporary files and ensure that your commit history remains clean and organized.

How to install DevTU GitHub Workflow

View source

1. Install with the skills CLI

npx skills add mims-harvard/tooluniverse/devtu-github --agent claude-code

2. Or install it manually

Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.

Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs

Inside SKILL.md

Written by mims-harvard

DevTU GitHub Workflow

Safely push ToolUniverse code to GitHub by enforcing pre-push cleanup, pre-commit hooks, and test validation.

Instructions

When the user wants to push code, fix CI, or prepare a commit, follow this workflow:

Phase 1: Pre-Push Cleanup

  1. Move temp files out of root - session docs and ad-hoc test scripts must NOT be pushed:
# Move session markdown files to temp_docs_and_tests/
for f in $(ls *.md 2>/dev/null | grep -v README.md | grep -v CHANGELOG.md | grep -v LICENSE.md); do
  mv "$f" temp_docs_and_tests/
done

# Move root-level test scripts to temp_docs_and_tests/
for f in $(ls test_*.py 2>/dev/null); do
  mv "$f" temp_docs_and_tests/
done
  1. Verify nothing unwanted is staged:
git status --short

Red flags - these should NEVER be staged:

  • *_SUMMARY.md, *_REPORT.md, SESSION_*.md in root
  • test_*.py in root (these are ad-hoc scripts, not real tests)
  • .env or credential files
  • temp_docs_and_tests/ contents

Phase 2: Activate Pre-Commit Hooks

  1. Ensure pre-commit is installed and active:
pre-commit install

This enables automatic checks on every git commit:

  • ruff check --fix - Python linting with auto-fix
  • ruff format - Code formatting
  • YAML/TOML validation
  • Trailing whitespace removal
  • End of file fixes
  1. Verify hooks are active:
ls -la .git/hooks/pre-commit

Phase 3: Run Tests

  1. Run the full test suite locally:
python -m pytest tests/ -x --tb=short -q
  1. If tests fail, diagnose using the error patterns below and fix before proceeding.

Phase 4: Commit and Push

  1. Stage only specific files (never use git add . or git add -A):
git add src/tooluniverse/specific_file.py tests/specific_test.py
  1. Commit (pre-commit hooks run automatically):
git commit -m "Clear, descriptive message"
  1. Rebase onto latest main BEFORE pushing (CRITICAL — prevents PR conflicts):
git fetch origin
git stash            # stash any uncommitted work
git rebase origin/main
git stash pop        # restore uncommitted work

If rebase conflicts arise, resolve them (keep our newer changes), then:

git add <conflicted-file>
git rebase --continue
  1. Push (force-with-lease after a rebase):
git push --force-with-lease origin <branch-name>

After pushing, verify the PR is conflict-free:

gh pr view <PR-number> --json mergeable,mergeStateStatus
# Must show: "mergeable":"MERGEABLE"

Files That Must NEVER Be Pushed

Temp Session Documents (Root-Level .md)

These are session notes created during development. Move to temp_docs_and_tests/ before committing:

PatternExample
*_SUMMARY.mdAPI_DISCOVERY_SESSION_SUMMARY.md
*_REPORT.mdSKILL_TESTING_REPORT.md, TOOLUNIVERSE_BUG_REPORT.md
SESSION_*.mdSESSION_2026_02_13.md
IMPLEMENTATION_*.mdIMPLEMENTATION_COMPLETE.md
BUG_ANALYSIS_*.mdBUG_ANALYSIS_DETAILED.md
FIX_*.mdFIX_SUMMARY.md, CORRECT_FIX.md
AGENT_*.mdAGENT_DESIGN_UPDATES.md

Exception: README.md, CHANGELOG.md, LICENSE.md are real docs and MUST stay.

Root-Level Test Scripts

Ad-hoc test scripts like test_*.py in root are NOT part of the test suite (tests/ directory is). Move them to temp_docs_and_tests/:

FilePurpose
test_clear_tools.pyOne-off tool cleanup test
test_finemapping_tools.pyAd-hoc tool validation
test_metabolomics_tools.pyAd-hoc tool validation
test_original_bug.pyBug reproduction
test_pathway_tools.pyAd-hoc tool validation
test_protein_interaction_skill.pySkill test
test_reload_fix.pyBug reproduction
test_round10_tools.pyAd-hoc tool validation

Other Excluded Files

  • .env - Environment variables with secrets
  • temp_docs_and_tests/ - Already in .gitignore
  • .claude/ - Claude Code configuration
  • __pycache__/, *.pyc - Python bytecode
  • .DS_Store - macOS metadata

Common Test Failure Patterns

Pattern 1: KeyError: 'role'

Symptom: KeyError: 'role' when accessing message dicts

Fix: Add return_message=True to tu.run() and use .get():

messages = tu.run(calls, use_cache=True, return_message=True)
if msg.get("role") == "tool":

Pattern 2: Mock Not Subscriptable

Symptom: TypeError: 'Mock' object is not subscriptable

Fix: Use real dicts for all_tool_dict and add _get_tool_instance:

mock_tu.all_tool_dict = {"Tool": mock_tool}
mock_tu._get_tool_instance = lambda name, cache=True: mock_tu.all_tool_dict.get(name)

Pattern 3: Linting Errors (F841, E731)

Fix F841 (unused variable): Use _ prefix or _ = func() Fix E731 (lambda assignment): Replace with def

Pattern 4: Temp Files Tracked by Git

Symptom: git status shows temp files as modified/staged

Fix:

git rm -r --cached temp_docs_and_tests/
git rm --cached API_DISCOVERY_SESSION_SUMMARY.md
git commit -m "Remove temp files from tracking"

Pre-Commit Hook Configuration

The project uses .pre-commit-config.yaml:

repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    hooks: [end-of-file-fixer, trailing-whitespace, check-yaml, check-toml]
  - repo: https://github.com/astral-sh/ruff-pre-commit
    hooks: [ruff-check --fix, ruff-format]

Scope: Only files matching ^(ToolUniverse/)?src/tooluniverse/

Quick Reference

TaskCommand
Activate hookspre-commit install
Run all testspytest tests/ -x --tb=short -q
Run specific testpytest tests/path/test.py::Class::method -xvs
Check staged filesgit status --short
Unstage a filegit restore --staged <file>
Remove from trackinggit rm --cached <file>
Move temp filesSee Phase 1 commands
Run hooks manuallypre-commit run --all-files

Pre-Push Checklist

Before every push, verify:

  • Temp markdown files moved from root to temp_docs_and_tests/
  • Root-level test_*.py scripts moved to temp_docs_and_tests/
  • Pre-commit hooks installed (pre-commit install)
  • All tests pass locally (pytest tests/ -x)
  • No linting errors
  • Only relevant files staged (no .env, no temp files)
  • Commit message is clear and descriptive
  • Correct branch selected

Git Commit Guidelines

  • Never include AI attribution in commits
  • Never commit session documentation markdown files
  • Use git add <specific-files> instead of git add .
  • Write clean, professional commit messages
  • One logical change per commit

Frequently asked questions about DevTU GitHub Workflow

Similar skills