mims-harvard/tooluniverse

devtu-github

GitHub workflow for ToolUniverse - push code safely by moving temp files, activating pre-commit hooks, running tests, and cleaning staged files. Use when pushing to GitHub, fixing CI failures, or cleaning up before commits.

First seen Feb 16, 2026

Installation

$ npx skills add mims-harvard/tooluniverse --skill devtu-github

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from mims-harvard/tooluniverse · top by installs.

npx skills add mims-harvard/tooluniverse

Browse all from mims-harvard/tooluniverse

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 1.7K
License LICENSE
Default branch main
Open issues 9
Status Active

Skill metadata

Parsed from SKILL.md frontmatter.

Declared agents claude-code

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 7,002 B
  • docs SUMMARY.md 3,921 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 354 installs

SKILL.md

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
  • tempdocsand_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 tempdocsand_tests/ before committing:

Pattern Example
*_SUMMARY.md APIDISCOVERYSESSION_SUMMARY.md
*_REPORT.md SKILLTESTINGREPORT.md, TOOLUNIVERSEBUGREPORT.md
SESSION_*.md SESSION202602_13.md
IMPLEMENTATION_*.md IMPLEMENTATION_COMPLETE.md
BUGANALYSIS*.md BUGANALYSISDETAILED.md
FIX_*.md FIXSUMMARY.md, CORRECTFIX.md
AGENT_*.md AGENTDESIGNUPDATES.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 tempdocsandtests/:

File Purpose
testcleartools.py One-off tool cleanup test
testfinemappingtools.py Ad-hoc tool validation
testmetabolomicstools.py Ad-hoc tool validation
testoriginalbug.py Bug reproduction
testpathwaytools.py Ad-hoc tool validation
testproteininteraction_skill.py Skill test
testreloadfix.py Bug reproduction
testround10tools.py Ad-hoc tool validation

Other Excluded Files

  • .env - Environment variables with secrets
  • tempdocsand_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 alltooldict and add gettool_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

Task Command
Activate hooks pre-commit install
Run all tests pytest tests/ -x --tb=short -q
Run specific test pytest tests/path/test.py::Class::method -xvs
Check staged files git status --short
Unstage a file git restore --staged <file>
Remove from tracking git rm --cached <file>
Move temp files See Phase 1 commands
Run hooks manually pre-commit run --all-files

Pre-Push Checklist

Before every push, verify:

  • Temp markdown files moved from root to tempdocsand_tests/
  • Root-level test*.py scripts moved to tempdocsandtests/
  • 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