skills/devtu-github/SKILL.md
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.
npx skillsauth add Zaoqu-Liu/ScienceClaw devtu-githubInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Safely push ToolUniverse code to GitHub by enforcing pre-push cleanup, pre-commit hooks, and test validation.
When the user wants to push code, fix CI, or prepare a commit, follow this workflow:
# 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
git status --short
Red flags - these should NEVER be staged:
*_SUMMARY.md, *_REPORT.md, SESSION_*.md in roottest_*.py in root (these are ad-hoc scripts, not real tests).env or credential filestemp_docs_and_tests/ contentspre-commit install
This enables automatic checks on every git commit:
ruff check --fix - Python linting with auto-fixruff format - Code formattingls -la .git/hooks/pre-commit
python -m pytest tests/ -x --tb=short -q
git add . or git add -A):git add src/tooluniverse/specific_file.py tests/specific_test.py
git commit -m "Clear, descriptive message"
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
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"
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.
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 |
.env - Environment variables with secretstemp_docs_and_tests/ - Already in .gitignore.claude/ - Claude Code configuration__pycache__/, *.pyc - Python bytecode.DS_Store - macOS metadataSymptom: 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":
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)
Fix F841 (unused variable): Use _ prefix or _ = func()
Fix E731 (lambda assignment): Replace with def
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"
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/
| 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 |
Before every push, verify:
temp_docs_and_tests/test_*.py scripts moved to temp_docs_and_tests/pre-commit install)pytest tests/ -x).env, no temp files)git add <specific-files> instead of git add .testing
Therapeutics Data Commons. AI-ready drug discovery datasets (ADME, toxicity, DTI), benchmarks, scaffold splits, molecular oracles, for therapeutic ML and pharmacological prediction.
tools
Genomic file toolkit. Read/write SAM/BAM/CRAM alignments, VCF/BCF variants, FASTA/FASTQ sequences, extract regions, calculate coverage, for NGS data processing pipelines.
development
Complete mass spectrometry analysis platform. Use for proteomics workflows feature detection, peptide identification, protein quantification, and complex LC-MS/MS pipelines. Supports extensive file formats and algorithms. Best for proteomics, comprehensive MS data processing. For simple spectral comparison and metabolite ID use matchms.
development
Multi-objective optimization framework. NSGA-II, NSGA-III, MOEA/D, Pareto fronts, constraint handling, benchmarks (ZDT, DTLZ), for engineering design and optimization problems.