Update Dependencies
alorence/django-modern-rpc
Routine update of all project dependencies — uv itself, uv.lock (all groups), tool versions pinned in GitHub workflows and .pre-commit-config.yaml (uv, ruff, mypy...), and SHA-pinned GitHub Actions.
This skill should be used when releasing tunacode-cli to PyPI.
$ npx skills add alchemiststudiosDOTai/tunacode --skill pypi-release -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install alchemiststudiosDOTai/tunacode pypi-release --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/alchemiststudiosDOTai/tunacode.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/pypi-release .claude/skills/pypi-release && 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 "pypi-release" agent skill from https://github.com/alchemiststudiosDOTai/tunacode/tree/master/skills/pypi-release into .claude/skills/pypi-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pypi-release", 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/alchemiststudiosDOTai/tunacode/tree/master/skills/pypi-releaseType 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 alchemiststudiosDOTai/tunacode --skill pypi-release -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install alchemiststudiosDOTai/tunacode pypi-release --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/alchemiststudiosDOTai/tunacode.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/pypi-release .agents/skills/pypi-release && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pypi-release" agent skill from https://github.com/alchemiststudiosDOTai/tunacode/tree/master/skills/pypi-release into .agents/skills/pypi-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pypi-release", 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 alchemiststudiosDOTai/tunacode --skill pypi-release -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install alchemiststudiosDOTai/tunacode pypi-release --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/alchemiststudiosDOTai/tunacode.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/pypi-release .cursor/skills/pypi-release && 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 "pypi-release" agent skill from https://github.com/alchemiststudiosDOTai/tunacode/tree/master/skills/pypi-release into .cursor/skills/pypi-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pypi-release", 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/alchemiststudiosDOTai/tunacode.git --path skills/pypi-release--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 alchemiststudiosDOTai/tunacode --skill pypi-release -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install alchemiststudiosDOTai/tunacode pypi-release --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/alchemiststudiosDOTai/tunacode.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/pypi-release .gemini/skills/pypi-release && 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 "pypi-release" agent skill from https://github.com/alchemiststudiosDOTai/tunacode/tree/master/skills/pypi-release into .gemini/skills/pypi-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pypi-release", 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 alchemiststudiosDOTai/tunacode pypi-releaseInstalls 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 alchemiststudiosDOTai/tunacode --skill pypi-release -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/alchemiststudiosDOTai/tunacode.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/pypi-release .github/skills/pypi-release && 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 "pypi-release" agent skill from https://github.com/alchemiststudiosDOTai/tunacode/tree/master/skills/pypi-release into .github/skills/pypi-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pypi-release", 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 alchemiststudiosDOTai/tunacode --skill pypi-release -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install alchemiststudiosDOTai/tunacode pypi-release --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/alchemiststudiosDOTai/tunacode.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/pypi-release .opencode/skills/pypi-release && 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 "pypi-release" agent skill from https://github.com/alchemiststudiosDOTai/tunacode/tree/master/skills/pypi-release into .opencode/skills/pypi-release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pypi-release", 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.
pypi-releaseThis skill should be used when releasing tunacode-cli to PyPI.
Pypi Release is an agent skill from alchemiststudiosDOTai/tunacode. This skill should be used when releasing tunacode-cli to PyPI. It keeps the existing local release checks, then hands the actual PyPI upload to a GitHub Actions workflow that uses the repository's PYPIAPITOKEN secret.
Its SKILL.md is about 2.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files, including scripts and reference files (for example `references/common-issues.md`, `references/workflow-structure.md` and `scripts/bump_version.py`).
It sits in Development, covering CI/CD and Git workflow. It works with GitHub Actions, Git, tmux and OpenAI. The repository describes itself as: 🍣 TunaCode AI CLI coding agent with safe git branches, rich tools & multi-LLM support. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 1b39d1f. 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.
Ships 3 files in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
gitghruffpytestuvpythonpipFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
pypi.orgFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
PYPI_API_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Pypi Release loads about 2.2k tokens when it runs, and up to ~4.5k if it reads all its reference files. Until then it costs about 58 tokens; SKILL.md has 734 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); the scripts in this folder are not scanned.
The full file from alchemiststudiosDOTai/tunacode at commit 1b39d1f, republished under its MIT licence (© alchemiststudiosDOTai). 734 words, ~2,209 tokens.
.claude/skills/pypi-release/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.Keep the existing local release gates for tunacode-cli, then hand the actual PyPI upload to GitHub Actions. This keeps the release checks local while moving the credentialed publish step into the repository workflow.
Trigger this skill when the user requests:
The skill provides two approaches: Manual (REQUIRED) and Automated (deprecated - skips critical test step).
WARNING: The automated script is currently discouraged because it skips the mandatory manual test step.
Use the Manual Release workflow below instead to ensure proper testing before release.
Execute the full release workflow with a single script:
~~```bash uv run python skills/pypi-release/scripts/release.py
~~The script performs these steps automatically:~~
1. ~~Pre-flight checks (git status, branch check, linting, tests)~~
2. ~~Version bump~~
3. ~~Git operations (commit, tag, push)~~
4. ~~GitHub release~~
5. ~~Workflow monitoring~~
**Issue:** The automated script does not include the mandatory manual import test (Step 3) which has caused multiple broken releases. Always use the manual workflow.
### Manual Release (REQUIRED - Step-by-Step)
**This is the ONLY recommended workflow. Follow these steps in order:**
#### Step 1: Pre-flight Checks
Verify the repository is ready for release:
```bash
# Check git status (must be clean)
git status
# Verify on master branch
git branch --show-current
# Run linting
ruff check .
# Run tests
source .venv/bin/activate && pytest tests/ -q
# MANDATORY: Run tmux E2E tool tests (all 6 must pass)
uv run pytest tests/system/cli/test_tmux_tools.py -v -m tmuxHARD GATE: If the tmux tool tests fail, DO NOT proceed with the release. These tests verify all 6 tools (bash, read_file, write_file, update_file, discover, web_fetch) work end-to-end in the real TUI. No exceptions.
Use the version bumping script:
uv run python skills/pypi-release/scripts/bump_version.pyThe script:
pyproject.tomlpyproject.toml:8 (project version)pyproject.toml:175 (hatch script version)src/tunacode/constants.py:12 (APP_VERSION constant)README.md (version header)REQUIRED: Manually update CHANGELOG.md with the new version entry.
Check commits since last release:
git log --oneline $(git describe --tags --abbrev=0)..HEAD --no-mergesAdd entry under ## [Unreleased]:
## [X.Y.Z.W] - YYYY-MM-DD
### Added
- New features
### Changed
- Changes to existing functionality
### Fixed
- Bug fixesStage the file:
git add CHANGELOG.mdCRITICAL: You MUST test that tunacode actually works before releasing!
Test the import and basic functionality:
# Activate venv and test import
source .venv/bin/activate && python -c "from tunacode.ui.main import app; print('✓ Import successful')"
# Optionally test the CLI starts without errors
python -m tunacode.ui.main --helpIf the import fails, DO NOT PROCEED with the release! Fix the issue first, then re-test.
This step prevents releasing broken packages to PyPI (which cannot be undone).
Commit the version changes and push them to master:
# Stage version files (CHANGELOG.md should already be staged from Step 2.5)
git add pyproject.toml src/tunacode/constants.py README.md CHANGELOG.md
# Commit with conventional commit message
git commit -m "chore: bump version to X.Y.Z.W"
# Push to remote
git push origin masterRun the manual publish workflow after the local checks and release commit have passed:
gh workflow run publish-release.yml --ref master -f version=X.Y.Z.WThis workflow:
pyproject.toml and src/tunacode/constants.py match the requested versiontwine check on the built artifactsPYPI_API_TOKEN secretCheck the status of the GitHub Actions workflow:
# List recent workflow runs
gh run list --workflow=publish-release.yml --limit 1
# Watch workflow in real-time
gh run watch
# View logs if failed
gh run view <run-id> --log-failedIf the GitHub Actions workflow fails:
Check workflow status:
gh run list --workflow=publish-release.yml --limit 1View failure logs:
gh run view <run-id> --log-failedCommon issues: See references/common-issues.md for detailed troubleshooting
If the workflow reports version mismatch between the requested version and the code:
Verify all four version locations match:
grep 'version = ' pyproject.toml
grep 'APP_VERSION' src/tunacode/constants.py
grep '^## v' README.md | head -1Re-run bump_version.py script to sync versions
Push the corrected commit and re-run:
git push origin master
gh workflow run publish-release.yml --ref master -f version=X.Y.Z.WIf the workflow fails with Python version errors:
.github/workflows/publish-release.yml line 20python-version: '3.12' (not '3.x')Common error message:
ERROR: Package 'tunacode-cli' requires a different Python: 3.14.0 not in '<3.14,>=3.10'Fix: Pin Python version in workflow to 3.12
pyproject.toml:8 - Project version in [project] sectionpyproject.toml:175 - Hatch script versionsrc/tunacode/constants.py:12 - APP_VERSION constantREADME.md - Version header (line 40)CHANGELOG.md - Version history (manual update required).github/workflows/publish-release.yml - Manual GitHub Actions workflowworkflow_dispatchtwine checkPYPI_API_TOKENscripts/bump_version.py - Atomic version bumping across all filesscripts/release.py - Full automated release workflowreferences/common-issues.md - Detailed troubleshooting guide for common problemsreferences/workflow-structure.md - Complete GitHub Actions workflow documentationEnsure these are configured before releasing:
GitHub CLI authenticated:
gh auth statusPyPI API token configured as PYPI_API_TOKEN in repository secrets
Clean git state - all changes committed
On master branch
Tests passing - pytest tests/
Linting passing - ruff check .
After a successful release:
Verify on PyPI:
Test installation:
pip install --upgrade tunacode-cli
tunacode --versionWhen the workflow fails, follow this debug process:
references/common-issues.md for known problemsmaster:git push origin mastergh workflow run publish-release.yml --ref master -f version=X.Y.Z.WThis skill does not implement automatic rollback. If a release fails:
Rationale: PyPI releases are immutable once published. The version number cannot be reused. Focus on fixing forward rather than rolling back.
© alchemiststudiosDOTai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files (scripts, references) in skills/pypi-release of alchemiststudiosDOTai/tunacode.
Open the folder on GitHubat commit 1b39d1f
Pypi Release 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 |
|---|---|---|---|---|---|---|
| Pypi Release this skillalchemiststudiosDOTai/tunacode | 125 | — | ~2.2k | Automated safety check: Pass | MIT | |
| Update Dependenciesalorence/django-modern-rpc | 111 | — | ~1.3k | Automated safety check: Pass | MIT | |
| npm Package Publisherklaudworks/universal-skills | 181 | — | ~923 | Automated safety check: Pass | MIT | |
| Release Lithoxylmahmoud/lithoxyl | 146 | — | ~1.3k | Automated safety check: Pass | BSD-3-Clause | |
| Python Pypi Package Buildergithub/awesome-copilot | 40k | 1 repos | ~4.6k | Automated safety check: Pass | MIT | |
| Push and PyPI Releaseliaohch3/claude-tap | 3.3k | — | ~509 | Automated safety check: Pass | MIT |
alorence/django-modern-rpc
Routine update of all project dependencies — uv itself, uv.lock (all groups), tool versions pinned in GitHub workflows and .pre-commit-config.yaml (uv, ruff, mypy...), and SHA-pinned GitHub Actions.
klaudworks/universal-skills
Releases an npm package by committing changes, bumping the version with npm version, pushing the tag and checking the GitHub Actions publish.
mahmoud/lithoxyl
Walks through releasing the lithoxyl Python package to PyPI: CalVer version bump, tagging, pushing and checking the published release.
github/awesome-copilot
End-to-end skill for building, testing, linting, versioning, and publishing a production-grade Python library to PyPI.
liaohch3/claude-tap
Pushes the current work to GitHub and, when pending commits change code, bumps the version in pyproject.toml so CI publishes a new PyPI release.
jeremylongshore/tons-of-skills-marketplace
A skill your agent uses when running GitHub Actions locally, creating task runner recipes, generating changelogs from git history, managing GitHub PRs/issues/releases programmatically, or creating…
alchemiststudiosDOTai/tunacode
A skill your agent uses when auditing HARNESS.md, pre-commit hooks, pre-push hooks, architecture gates, or CI workflows for tunacode-cli.
Works with
Categories
This skill should be used when releasing tunacode-cli to PyPI. Pypi Release is an agent skill from alchemiststudiosDOTai/tunacode. This skill should be used when releasing tunacode-cli to PyPI.
Pypi Release fits situations like: tasks that involve CI/CD; tasks that involve Git workflow.
Run `npx skills add alchemiststudiosDOTai/tunacode --skill pypi-release -a claude-code`. Or copy the skill folder (skills/pypi-release in alchemiststudiosDOTai/tunacode) into .claude/skills/pypi-release in your project. Claude Code loads it when a task matches its description.
Run `npx skills add alchemiststudiosDOTai/tunacode --skill pypi-release -a codex`. Or copy the skill folder (skills/pypi-release in alchemiststudiosDOTai/tunacode) into .agents/skills/pypi-release 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 alchemiststudiosDOTai/tunacode --skill pypi-release -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pypi-release, .gemini/skills/pypi-release, .github/skills/pypi-release and .opencode/skills/pypi-release in your project.
Going by SKILL.md and its folder, Pypi Release needs Python for the scripts in its folder, the command-line tools its instructions call (git, gh, ruff, pytest, uv and python) and credentials named PYPI_API_TOKEN. Our summary lists: Python 3; A credential in PYPI_API_TOKEN.
SKILL.md names 1 domain. As links in the text: pypi.org. 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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Pypi Release is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.2k tokens (SKILL.md is roughly 8.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.3k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Pypi Release: Update Dependencies (alorence/django-modern-rpc, 111 stars), npm Package Publisher (klaudworks/universal-skills, 181 stars), Release Lithoxyl (mahmoud/lithoxyl, 146 stars) and Python Pypi Package Builder (github/awesome-copilot, 40k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
alchemiststudiosDOTai (a GitHub organization) maintains it in alchemiststudiosDOTai/tunacode, which has 125 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 5, 2026.
Source: alchemiststudiosDOTai/tunacode on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.