MAUI UI Test Writer
dotnet/maui
Writes UI tests that reproduce a GitHub issue in .NET MAUI and keeps iterating until the tests actually fail, proving they catch the bug.
local-app-github-publishing — Safely publish local apps, prototypes, and substantial local branches to GitHub for the first time.
$ npx skills add AtlasOmnia/donna-starter --skill local-app-github-publishing -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install AtlasOmnia/donna-starter local-app-github-publishing --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/AtlasOmnia/donna-starter.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/github/local-app-github-publishing .claude/skills/local-app-github-publishing && 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 "local-app-github-publishing" agent skill from https://github.com/AtlasOmnia/donna-starter/tree/main/skills/github/local-app-github-publishing into .claude/skills/local-app-github-publishing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "local-app-github-publishing", 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/AtlasOmnia/donna-starter/tree/main/skills/github/local-app-github-publishingType 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 AtlasOmnia/donna-starter --skill local-app-github-publishing -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install AtlasOmnia/donna-starter local-app-github-publishing --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AtlasOmnia/donna-starter.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/github/local-app-github-publishing .agents/skills/local-app-github-publishing && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "local-app-github-publishing" agent skill from https://github.com/AtlasOmnia/donna-starter/tree/main/skills/github/local-app-github-publishing into .agents/skills/local-app-github-publishing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "local-app-github-publishing", 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 AtlasOmnia/donna-starter --skill local-app-github-publishing -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install AtlasOmnia/donna-starter local-app-github-publishing --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AtlasOmnia/donna-starter.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/github/local-app-github-publishing .cursor/skills/local-app-github-publishing && 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 "local-app-github-publishing" agent skill from https://github.com/AtlasOmnia/donna-starter/tree/main/skills/github/local-app-github-publishing into .cursor/skills/local-app-github-publishing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "local-app-github-publishing", 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/AtlasOmnia/donna-starter.git --path skills/github/local-app-github-publishing--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 AtlasOmnia/donna-starter --skill local-app-github-publishing -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install AtlasOmnia/donna-starter local-app-github-publishing --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AtlasOmnia/donna-starter.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/github/local-app-github-publishing .gemini/skills/local-app-github-publishing && 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 "local-app-github-publishing" agent skill from https://github.com/AtlasOmnia/donna-starter/tree/main/skills/github/local-app-github-publishing into .gemini/skills/local-app-github-publishing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "local-app-github-publishing", 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 AtlasOmnia/donna-starter local-app-github-publishingInstalls 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 AtlasOmnia/donna-starter --skill local-app-github-publishing -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/AtlasOmnia/donna-starter.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/github/local-app-github-publishing .github/skills/local-app-github-publishing && 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 "local-app-github-publishing" agent skill from https://github.com/AtlasOmnia/donna-starter/tree/main/skills/github/local-app-github-publishing into .github/skills/local-app-github-publishing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "local-app-github-publishing", 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 AtlasOmnia/donna-starter --skill local-app-github-publishing -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install AtlasOmnia/donna-starter local-app-github-publishing --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/AtlasOmnia/donna-starter.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/github/local-app-github-publishing .opencode/skills/local-app-github-publishing && 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 "local-app-github-publishing" agent skill from https://github.com/AtlasOmnia/donna-starter/tree/main/skills/github/local-app-github-publishing into .opencode/skills/local-app-github-publishing/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "local-app-github-publishing", 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.
local-app-github-publishinglocal-app-github-publishing — Safely publish local apps, prototypes, and substantial local branches to GitHub for the first time.
Local App GitHub Publishing is an agent skill from AtlasOmnia/donna-starter. local-app-github-publishing — Safely publish local apps, prototypes, and substantial local branches to GitHub for the first time.
Its SKILL.md is about 3.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files (for example `references/local-app-first-push.md`, `references/private-upstream-patch-repository.md` and `templates/idempotent-git-patch-apply.sh`).
It sits in Development. It works with GitHub, Git and iOS. The repository describes itself as: Donna — a starter Hermes Agent profile: opinionated persona, 73 curated skills, guided first-run orientation, optional Token Router. MIT. The licence is MIT.
9 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit a3710bd. 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 script files (Shell), which the agent can run.
Shell commands in SKILL.md call:
gitghxcodebuildpython3From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git and gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Local App GitHub Publishing loads about 3.8k tokens when it runs, and up to ~6.1k if it reads all its reference files. Until then it costs about 39 tokens; SKILL.md has 1,699 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 noted patterns worth knowing about, such as sudo or a known installer.
.env.env.*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); files beside SKILL.md are not scanned.
The full file from AtlasOmnia/donna-starter at commit a3710bd, republished under its MIT licence (© AtlasOmnia). 1,699 words, ~3,802 tokens.
.claude/skills/local-app-github-publishing/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.Use this when the user asks to push a local app/prototype/project to GitHub for the first time, especially Electron, iOS/Xcode, mobile, desktop, or AI/API-integrated apps.
This skill complements the protected github-repo-management skill with the user-specific first-push hygiene: publish the useful source, not the machine's junk drawer wearing a trench coat.
Before the first commit, sanitize and verify. Generated builds, dependency folders, local Xcode state, and API credentials do not belong in the initial history.
ios-translator.user.name / user.email are missing.cd /path/to/project
git --version
gh auth status
GH_USER=$(gh api user --jq .login)
gh api user --jq .idgh repo view "$GH_USER/REPO" --json nameWithOwner,url,visibility 2>&1 || true.gitignore before git addInclude at least:
# Dependencies
node_modules/
.venv/
.venv-*/
# Build outputs
dist/
dist-*/
release/
release-*/
*.tsbuildinfo
# Local caches/logs
.npm-cache/
.npm-logs/
*.log
# Xcode / Apple local state
.DerivedData/
DerivedData/
*.xcuserstate
xcuserdata/
.DS_Store
# Environment / secrets
.env
.env.*
!.env.example
*.pem
*.p8
*.p12
*.mobileprovisionExclude generated/dependency directories. Search for common key patterns:
AIza — Google/Gemini keyssk- — OpenAI-style keysghp_, github_pat_ — GitHub tokenshf_ — Hugging Face tokens-----BEGIN ... PRIVATE KEY-----If a real secret is found, stop and remove/rotate before committing.
git init -b main 2>/dev/null || git init
git add -A
git status --shortgit diff --cached --name-only | wc -l
git check-ignore -v node_modules release dist-renderer dist-electron .DerivedData .DS_Store 2>/dev/null || true
python3 - <<'PY'
import os, subprocess
files = subprocess.check_output(['git','diff','--cached','--name-only'], text=True).splitlines()
found = False
for f in files:
if os.path.exists(f) and os.path.getsize(f) > 20*1024*1024:
print(f, os.path.getsize(f))
found = True
if not found:
print('No staged files over 20MB')
PYGH_USER=$(gh api user --jq .login)
GH_ID=$(gh api user --jq .id)
git config user.name "$GH_USER"
git config user.email "${GH_ID}+${GH_USER}@users.noreply.github.com"git commit -m "Initial app commit"
gh repo create REPO --private --source . --remote origin --push --description "Short description"git status --short --branch
git ls-remote origin refs/heads/main
gh repo view "$GH_USER/REPO" --json nameWithOwner,url,visibility,defaultBranchRef,pushedAtUse this before the first remote push of a substantial campaign, repair, or autoresearch branch in an existing repository—not only before a repository’s initial push.
git diff --check main...HEAD catches whitespace already committed.git log -p --format= main..HEAD for credential patterns; scanning only current files misses secrets added and later removed.main..HEAD. If an unpushed branch contains automatic workstation identities, normalize it before first push:HEAD^{tree} and git rev-list --count main..HEAD;git ls-remote --heads before deciding whether a normal push or coordinated force-with-lease workflow applies.git ls-remote for that exact ref and that the working tree tracks the intended remote branch.When the user asks to merge a named feature branch:
origin/main...origin/<branch>, and inspect the complete commit range.git diff --check origin/main...HEAD and git diff --check; the former catches committed whitespace defects while the latter validates any unstaged cleanup.main --ff-only, verify the PR merge state and live default-branch files, and wait for post-merge main CI. PR checks and post-merge checks are separate gates.Before making a repository public, make the README understandable to someone who has no session context:
viewBox, embedded by relative path and supplied with useful Markdown alt text.raw.githubusercontent.com briefly serves stale content, verify the default-branch SHA and use GitHub's Contents API with ?ref=main or the exact commit SHA before concluding the merge failed.For a hand-authored architecture/flow SVG:
xmllint --noout docs/diagram.svg.sips -s format png docs/diagram.svg --out /tmp/diagram.png; qlmanage -t creates square thumbnails and can crop or mis-scale a wide diagram, producing misleading QA evidence.font-family, font-size, font-weight) rather than a complex font: shorthand. Include Arial/Helvetica/sans-serif fallbacks so GitHub and native rasterizers agree more closely.<img src="docs/diagram.svg" alt="..." width="100%">; avoid forcing a fixed 1200-pixel width inside GitHub's narrower content column.When a feature conversion landed in the original product repository but the user intended two distinct applications, preserve the converted product before restoring the original:
git revert, not reset/force-push.Treat “separate programs” literally: distinct repositories, application identities, local data boundaries, release cycles, and launchers. Shared architecture does not imply one executable with selectable courses or modules.
xcode-select points at Command Line Tools, use:DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer xcodebuild ...CODE_SIGNING_ALLOWED=NO to verify compilation without signing:DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer \
xcodebuild -project App.xcodeproj -scheme App -destination 'generic/platform=iOS' CODE_SIGNING_ALLOWED=NO buildWhen a newly published product site should become the commercial destination for an established GitHub identity:
gh api user --jq '{login,name,bio,blog,company,location,html_url}'blog. Change only that field unless the user explicitly requests broader profile edits:gh api --method PATCH user -f blog='https://example.com' \
--jq '{login,bio,blog,html_url}'GH_USER=$(gh api user --jq .login)
gh api "users/$GH_USER" --jq '{login,bio,blog,html_url}'For the user's value-first commercial funnel, the Website field should point to the canonical owned commercial hub; the bio can retain community/moderator positioning. Link public product repositories back to specific product or documentation pages, while keeping the storefront source repository private by default.
When the first-published project is a static commercial website, continue through hosting and live-domain verification rather than stopping at source control. Determine the deployment source before changing remotes: a Cloudflare-hosted site may use Direct Upload even when a historical GitHub repository exists.
www canonicalization, and live HTTPS verification.origin, retain GitHub only as a reference remote, verify checkout/local-remote SHA parity, and treat Cloudflare publication as a separate gate.Never assume that pushing GitHub updates the live Cloudflare site. Verify whether the project is Git-integrated or Direct Upload, and keep source-control completion distinct from deployment completion.
Before deployment, verify that every commit uses the user's established GitHub noreply identity. A syntactically “noreply”-looking custom-domain address is not automatically the correct public identity.
When the user explicitly authorizes deleting a GitHub repository, treat retirement as a recoverability and least-privilege workflow: inspect every remote ref and local clone, create and verify a complete Git bundle, preserve dirty/untracked local work separately, delete repositories serially with an absence check after each one, and retain local copies unless separately authorized for deletion. GitHub repository admin permission does not imply that the active OAuth token has delete_repo; request that scope only for the deletion, require the user to approve the device flow, then remove the scope and verify it is absent from gh auth status.
Never commit release/ or generated .exe/installer artifacts by accident on the first push.
Do not trust a clean-looking top-level directory; Xcode and Electron often leave large generated folders beside source.
Do not print or include secret values in reports. Say whether a scan found hardcoded key patterns.
Do not promise public availability if the repo was created private.
Do not conflate source-patch recovery with deployed-binary recovery. A post-update Git hook may reapply source changes successfully while leaving an installed Electron/macOS/Windows application on the old build; inspect and document the rebuild/reinstall path separately.
references/local-app-first-push.md — condensed checklist and command transcript pattern from a successful Electron+iOS translator app first push.
references/private-upstream-patch-repository.md — package a verified upstream repair as a small private patch repo with an idempotent worktree-safe apply script, artifact-integrity checks, and local macOS packaging gates.
templates/idempotent-git-patch-apply.sh — starter installer for fail-closed, worktree-safe, idempotent patch application.
references/local-app-first-push.mdreferences/private-upstream-patch-repository.mdtemplates/idempotent-git-patch-apply.sh© AtlasOmnia, 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 3 other files (references) in skills/github/local-app-github-publishing of AtlasOmnia/donna-starter.
Open the folder on GitHubat commit a3710bd
Local App GitHub Publishing 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 |
|---|---|---|---|---|---|---|
| Local App GitHub Publishing this skillAtlasOmnia/donna-starter | 125 | — | ~3.8k | Automated safety check: Notes | MIT | |
| MAUI UI Test Writerdotnet/maui | 23k | — | ~3k | Automated safety check: Pass | MIT | |
| Contributor-First PR MergeHKUDS/OpenHarness | 16k | 1 repos | ~847 | Automated safety check: Pass | MIT | |
| Create Pull Requestcline/cline | 70k | 1 repos | ~1.6k | Automated safety check: Pass | Apache-2.0 | |
| Pull Request Title and Body Writeropeninterpreter/openinterpreter | 69k | 2 repos | ~1.1k | Automated safety check: Pass | Apache-2.0 | |
| Draft Release Notesjamiepine/voicebox | 57k | — | ~941 | Automated safety check: Pass | MIT |
dotnet/maui
Writes UI tests that reproduce a GitHub issue in .NET MAUI and keeps iterating until the tests actually fail, proving they catch the bug.
HKUDS/OpenHarness
Merges external GitHub pull requests while keeping the original author credited, and fixes conflicts after the merge instead of rewriting the contribution.
cline/cline
Opens a GitHub pull request from your current branch with the gh CLI, after reviewing the commits and diff and gathering the details the PR needs.
openinterpreter/openinterpreter
Rewrites the title and body of one or more pull requests with gh, leading with why the change was made, then what changed, and describing only the net result.
jamiepine/voicebox
Writes or refreshes the Unreleased section of CHANGELOG.md as a themed narrative built from the commits, PRs and diff since the last version tag.
prisma/orm
Fetches a pull request's canonical review state as JSON, validates it, and renders markdown, a text summary and triage target files from it using bundled scripts.
AtlasOmnia/donna-starter
macos-storage-management — Use when freeing Mac storage or moving files to SSDs.
AtlasOmnia/donna-starter
marketing-collateral-design — Use when designing, recreating, critiquing, or exporting static marketing collateral such as flyers, social graphics, postcards, brochures, business cards, print ads…
AtlasOmnia/donna-starter
hermes-self-evaluation — Use when the user asks to evaluate, audit, or optimize Hermes itself — analyzing session history, skill library, costs, and architecture to identify improvements, automation…
AtlasOmnia/donna-starter
skill-auditor — Use when auditing, reviewing, or grading Hermes skills for quality.
AtlasOmnia/donna-starter
local-discovery — Find local events, venues, and activities — ad-hoc web discovery when the user asks 'what's happening' or 'what should I do this weekend'.
AtlasOmnia/donna-starter
cross-browser-typography-qa — Diagnose and verify web typography rendering defects across Chromium, WebKit, and native Safari, including clipped glyphs, broken descenders, wrapping, font metrics…
Categories
local-app-github-publishing — Safely publish local apps, prototypes, and substantial local branches to GitHub for the first time. Local App GitHub Publishing is an agent skill from AtlasOmnia/donna-starter. local-app-github-publishing — Safely publish local apps, prototypes, and substantial local branches to GitHub for the first time.
Local App GitHub Publishing fits situations like: development work in your project.
Run `npx skills add AtlasOmnia/donna-starter --skill local-app-github-publishing -a claude-code`. Or copy the skill folder (skills/github/local-app-github-publishing in AtlasOmnia/donna-starter) into .claude/skills/local-app-github-publishing in your project. Claude Code loads it when a task matches its description.
Run `npx skills add AtlasOmnia/donna-starter --skill local-app-github-publishing -a codex`. Or copy the skill folder (skills/github/local-app-github-publishing in AtlasOmnia/donna-starter) into .agents/skills/local-app-github-publishing 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 AtlasOmnia/donna-starter --skill local-app-github-publishing -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/local-app-github-publishing, .gemini/skills/local-app-github-publishing, .github/skills/local-app-github-publishing and .opencode/skills/local-app-github-publishing in your project.
Going by SKILL.md and its folder, Local App GitHub Publishing needs a shell for the scripts in its folder and the command-line tools its instructions call (git, gh, xcodebuild and python3). Our summary lists: Python 3; A Bash shell.
SKILL.md contains no URLs. Its commands use git and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Local App GitHub Publishing is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.8k tokens (SKILL.md is roughly 15k 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 Local App GitHub Publishing: MAUI UI Test Writer (dotnet/maui, 23k stars), Contributor-First PR Merge (HKUDS/OpenHarness, 16k stars), Create Pull Request (cline/cline, 70k stars) and Pull Request Title and Body Writer (openinterpreter/openinterpreter, 69k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
AtlasOmnia (a GitHub user) maintains it in AtlasOmnia/donna-starter, which has 125 GitHub stars. The repository holds 11 skills in this directory. The repository was last updated on September 19, 2026.
Source: AtlasOmnia/donna-starter on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.