DevTU GitHub Workflow
SkillFiles & storageGitHub 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.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the DevTU GitHub Workflow skill
What this skill tells your AI
The instructions your AI receives, as published by mims-harvard/tooluniverse in skills/devtu-github/SKILL.md and read by ahel’s review.
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
- 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
- Verify nothing unwanted is staged:
git status --short
Red flags - these should NEVER be staged:
*_SUMMARY.md,*_REPORT.md,SESSION_*.mdin roottest_*.pyin root (these are ad-hoc scripts, not real tests).envor credential filestemp_docs_and_tests/contents
Phase 2: Activate Pre-Commit Hooks
- 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-fixruff format- Code formatting- YAML/TOML validation
- Trailing whitespace removal
- End of file fixes
- Verify hooks are active:
ls -la .git/hooks/pre-commit
Phase 3: Run Tests
- Run the full test suite locally:
python -m pytest tests/ -x --tb=short -q
- If tests fail, diagnose using the error patterns below and fix before proceeding.
Phase 4: Commit and Push
- Stage only specific files (never use
git add .orgit add -A):
git add src/tooluniverse/specific_file.py tests/specific_test.py
- Commit (pre-commit hooks run automatically):
git commit -m "Clear, descriptive message"
- 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
- 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:
| Pattern | Example |
|---|---|
*_SUMMARY.md | API_DISCOVERY_SESSION_SUMMARY.md |
*_REPORT.md | SKILL_TESTING_REPORT.md, TOOLUNIVERSE_BUG_REPORT.md |
SESSION_*.md | SESSION_2026_02_13.md |
IMPLEMENTATION_*.md | IMPLEMENTATION_COMPLETE.md |
BUG_ANALYSIS_*.md | BUG_ANALYSIS_DETAILED.md |
FIX_*.md | FIX_SUMMARY.md, CORRECT_FIX.md |
AGENT_*.md | AGENT_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/:
| File | Purpose |
|---|---|
test_clear_tools.py | One-off tool cleanup test |
test_finemapping_tools.py | Ad-hoc tool validation |
test_metabolomics_tools.py | Ad-hoc tool validation |
test_original_bug.py | Bug reproduction |
test_pathway_tools.py | Ad-hoc tool validation |
test_protein_interaction_skill.py | Skill test |
test_reload_fix.py | Bug reproduction |
test_round10_tools.py | Ad-hoc tool validation |
Other Excluded Files
.env- Environment variables with secretstemp_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
| 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
temp_docs_and_tests/ - Root-level
test_*.pyscripts moved totemp_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 ofgit add . - Write clean, professional commit messages
- One logical change per commit
Signals
- GitHub stars
- 2k
- Forks
- 254
- Last commit
- Sep 2026
ahel review
S4info
community integration — published by mims-harvard, not github
Automated review, not a security audit. Ruleset v1.
Others that do the same job
Advanced
- Catalog kind
- skill
- Gateway key
devtu-github- Source
- github.com/mims-harvard/tooluniverse