Mobile Principles
AThevon/genjutsu
Mobile-specific UX principles - touch targets, hover-less doctrine, thumb zones, safe areas, gestures, mobile perf budgets.
Validate Personal Assistant on an iPhone using the iCloud test vault and Safari Web Inspector.
$ npx skills add edonyzpc/personal-assistant --skill obsidian-ios-real-device-smoke -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install edonyzpc/personal-assistant obsidian-ios-real-device-smoke --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/edonyzpc/personal-assistant.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/obsidian-ios-real-device-smoke .claude/skills/obsidian-ios-real-device-smoke && 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 "obsidian-ios-real-device-smoke" agent skill from https://github.com/edonyzpc/personal-assistant/tree/master/.agents/skills/obsidian-ios-real-device-smoke into .claude/skills/obsidian-ios-real-device-smoke/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "obsidian-ios-real-device-smoke", 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/edonyzpc/personal-assistant/tree/master/.agents/skills/obsidian-ios-real-device-smokeType 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 edonyzpc/personal-assistant --skill obsidian-ios-real-device-smoke -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install edonyzpc/personal-assistant obsidian-ios-real-device-smoke --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/edonyzpc/personal-assistant.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/obsidian-ios-real-device-smoke .agents/skills/obsidian-ios-real-device-smoke && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "obsidian-ios-real-device-smoke" agent skill from https://github.com/edonyzpc/personal-assistant/tree/master/.agents/skills/obsidian-ios-real-device-smoke into .agents/skills/obsidian-ios-real-device-smoke/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "obsidian-ios-real-device-smoke", 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 edonyzpc/personal-assistant --skill obsidian-ios-real-device-smoke -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install edonyzpc/personal-assistant obsidian-ios-real-device-smoke --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/edonyzpc/personal-assistant.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/obsidian-ios-real-device-smoke .cursor/skills/obsidian-ios-real-device-smoke && 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 "obsidian-ios-real-device-smoke" agent skill from https://github.com/edonyzpc/personal-assistant/tree/master/.agents/skills/obsidian-ios-real-device-smoke into .cursor/skills/obsidian-ios-real-device-smoke/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "obsidian-ios-real-device-smoke", 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/edonyzpc/personal-assistant.git --path .agents/skills/obsidian-ios-real-device-smoke--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 edonyzpc/personal-assistant --skill obsidian-ios-real-device-smoke -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install edonyzpc/personal-assistant obsidian-ios-real-device-smoke --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/edonyzpc/personal-assistant.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/obsidian-ios-real-device-smoke .gemini/skills/obsidian-ios-real-device-smoke && 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 "obsidian-ios-real-device-smoke" agent skill from https://github.com/edonyzpc/personal-assistant/tree/master/.agents/skills/obsidian-ios-real-device-smoke into .gemini/skills/obsidian-ios-real-device-smoke/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "obsidian-ios-real-device-smoke", 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 edonyzpc/personal-assistant obsidian-ios-real-device-smokeInstalls 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 edonyzpc/personal-assistant --skill obsidian-ios-real-device-smoke -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/edonyzpc/personal-assistant.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/obsidian-ios-real-device-smoke .github/skills/obsidian-ios-real-device-smoke && 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 "obsidian-ios-real-device-smoke" agent skill from https://github.com/edonyzpc/personal-assistant/tree/master/.agents/skills/obsidian-ios-real-device-smoke into .github/skills/obsidian-ios-real-device-smoke/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "obsidian-ios-real-device-smoke", 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 edonyzpc/personal-assistant --skill obsidian-ios-real-device-smoke -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install edonyzpc/personal-assistant obsidian-ios-real-device-smoke --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/edonyzpc/personal-assistant.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/obsidian-ios-real-device-smoke .opencode/skills/obsidian-ios-real-device-smoke && 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 "obsidian-ios-real-device-smoke" agent skill from https://github.com/edonyzpc/personal-assistant/tree/master/.agents/skills/obsidian-ios-real-device-smoke into .opencode/skills/obsidian-ios-real-device-smoke/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "obsidian-ios-real-device-smoke", 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.
obsidian-ios-real-device-smokeValidate Personal Assistant on an iPhone using the iCloud test vault and Safari Web Inspector.
Obsidian iOS Real Device Smoke is an agent skill from edonyzpc/personal-assistant. Validate Personal Assistant on an iPhone using the iCloud test vault and Safari Web Inspector. Use only for an explicit real-device request or a verified iOS-specific capability requiring device evidence. General mobile UI and Obsidian CLI mobile simulator validation use obsidian-test-vault-smoke.
Its SKILL.md is about 4.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `agents/openai.yaml`).
It sits in Mobile, covering Mobile UI design. It works with Obsidian and iOS. The repository describes itself as: A plugin that harnesses AI agents and streamlining techniques to help you automatically manage Obsidian. The licence is AGPL-3.0.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 4f02170. 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.
Shell commands in SKILL.md call:
makegitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, 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.
Obsidian iOS Real Device Smoke loads about 4.5k tokens when it runs. Until then it costs about 82 tokens; SKILL.md has 1,716 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); files beside SKILL.md are not scanned.
The full file from edonyzpc/personal-assistant at commit 4f02170, republished under its AGPL-3.0 licence (© edonyzpc). 1,716 words, ~4,509 tokens.
.claude/skills/obsidian-ios-real-device-smoke/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.AGENTS.md and name
the user request or verified iOS-specific capability. Device selection does
not itself authorize deployment or interaction; an Agent-authored plan or a
simulator/tool failure cannot create that requirement or authorization.test vault, all copied assets matched dist, the loaded plugin identity matched that artifact, and the affected behavior was observed on the connected iPhone.dist and plugin runtime assets did not change.set_value may change the displayed editor text without creating
executable Web Inspector input, so it is never submission evidence by itself.make deploy-icloud (or its current-build reuse target), or the existing scoped preparation/sync command for a runner-only change, targeting only the iCloud test vault. Do not ask again. If the user requested only planning, review, or inspection without a real-device run, do not deploy or sync.recovery_relaxed / skipped / not_eligible when the standard
attempt already returned usable evidence; require an actual relaxed retry only
when the canary explicitly owns a deterministic valid-none/partial fixture.
Likewise, lexical unavailable / feature_disabled / generation absent to
ready / generation present with an advanced maintenance epoch is a valid
first-generation transition. Preserve a raw runner false-negative, classify
its product observations independently, and do not spend another device
attempt solely to satisfy the invalid assertion.ready / none. A fresh plugin reload
with persisted rollout flags off may expose the existing lexical generation as
feature_disabled; temporarily turning flags on then correctly requires
preparation and is not a runnable cancellation precondition. Do not convert
that setup-only BLOCKED into a product failure or repeat the command.AbortError shape. Do not
rebuild Memory or spend another Provider/device attempt solely to replay the
unchanged Worker/queue behavior.| Lane | Use when | Required iPhone evidence | Skip |
|---|---|---|---|
geometry-only | CSS/layout/position/size changed; gesture and action routing did not | Asset match, one reload, one real gesture that exposes the UI, one Mirroring screenshot, one Inspector geometry/hit-test probe, fresh errors | Hold threshold, movement cancel, exactly-once action checks, provider flows, unrelated orientations |
interaction | Touch, pointer, keyboard, focus, dismissal, or action routing changed | Geometry basics plus the affected real gestures, cancel path, and exactly-once behavior | Unrelated Pagelet/provider/cross-surface flows |
broad/release | Shared mobile runtime, multiple surfaces, packaging, or release gate | The declared cross-surface and orientation matrix | Anything explicitly outside the release scope |
Do not promote a geometry-only delta into an interaction or release run merely
because more evidence is available. Record unrequested orientations or devices
as NOT TESTED residuals.
Before deployment or GUI control, confirm:
test vault and intended note;Allow one unlock/reconnect/reattach sequence, or about three minutes, when a
device or Inspector prerequisite is missing. Then report BLOCKED; do not keep
hunting through menus or coordinates. After a reload, allow at most one
Inspector reconnect. If body.in-progress persists, preserve the manual path
and stop.
Use one submitted Console probe that returns all required assertions. Allow at
most two execution attempts before reporting partial evidence or BLOCKED;
submitted-but-ambiguous commands count as attempts. Do not spend additional
attempts recovering focus, autocomplete, or stale element indices.
Re-read app state after state-changing UI actions or window/DOM changes, and
never reuse stale element indices; batch stable prompt entry, execution, and
result capture where possible.
Prerequisite: complete obsidian-test-vault-smoke at least at app-runtime tier.
git status --short --branch
git diff --stat
git diff --name-onlyReuse automated local checks with verified inputs/results under AGENTS.md
Validation Planning And Reuse. Complete missing or invalidated Local
Validation Gate checks, counting checks covered by the selected enclosing
command and supplementing the runtime <style> / innerHTML / outerHTML
source scan. Treat rg exit code 1 with no output as PASS and inspect every
match. Reuse observed local app smoke only within the same turn while its
target/runtime state is unchanged; otherwise renew the affected local app
proof. For broad UI/runtime changes, retain make deploy (or its eligible
current-build target) and local app smoke before device validation.
Sync only the changed artifact after the user requested real-device smoke:
make deploy-icloudIf the required checks already passed for the current changes (for example,
during desktop smoke), use make deploy-icloud-current to verify and copy the
same current production build. It checks build identity, not test results; follow
AGENTS.md Local Deployment reuse conditions. If both destinations are authorized
together, make deploy deploy-icloud shares full validation once.
This writes only plugin assets under:
~/Library/Mobile Documents/iCloud~md~obsidian/Documents/test/.obsidian/plugins/personal-assistantRequest escalated permissions if the sandbox blocks this expected iCloud write.
ICLOUD_PLUGIN_DIR="$HOME/Library/Mobile Documents/iCloud~md~obsidian/Documents/test/.obsidian/plugins/personal-assistant"
for file in main.js manifest.json manifest-beta.json styles.css; do
if ! cmp -s "dist/$file" "$ICLOUD_PLUGIN_DIR/$file"; then
printf 'MISMATCH %s\n' "$file"
exit 1
fi
printf 'MATCH %s\n' "$file"
doneStop with FAIL if any source or destination file is missing or differs.
For a runner-only change, verify only the runner source/destination identity and
confirm the already-loaded plugin identity is still current; do not manufacture
a plugin lifecycle transition as extra evidence.
personal-assistant first, using Obsidian's plugin reload lifecycle. Capture
the previous plugin object before reload.getLoadedPluginBuildIdentity() and
require no blocker plus loadedPluginArtifactSha256 equal to the matched
iCloud main.js SHA-256. Also preserve its load timestamp/version in the
evidence.body.in-progress.-- Obsidian -- localhost and to operate iPhone Mirroring when available.BLOCKED; do not guess from desktop/mobile emulation.set_value.For a Pagelet Action Ring geometry-only change, expose the Ring with one real
long press and capture the Mirroring screenshot. If it auto-closes before
Inspector measurement, let this single probe reopen it through the production
keyboard/context-menu path solely for DOM geometry. Do not count that synthetic
reopen as touch evidence.
(()=>{
const trigger=document.querySelector(".pa-pagelet-pet-trigger");
if(!trigger){
console.log('PA_ACTION_RING_LAYOUT {"error":"pet-missing"}');
return;
}
if(!document.querySelector(".pa-pagelet-action-ring")){
trigger.dispatchEvent(new KeyboardEvent("keydown",{key:"ContextMenu",bubbles:true,cancelable:true}));
}
requestAnimationFrame(()=>requestAnimationFrame(()=>{
const items=[...document.querySelectorAll(".pa-pagelet-action-ring-item")];
const viewport=window.visualViewport;
const box=viewport
? {left:viewport.offsetLeft,top:viewport.offsetTop,right:viewport.offsetLeft+viewport.width,bottom:viewport.offsetTop+viewport.height}
: {left:0,top:0,right:innerWidth,bottom:innerHeight};
const read=(el)=>{
const r=el.getBoundingClientRect();
const hit=document.elementFromPoint(r.left+r.width/2,r.top+r.height/2);
return {
text:el.textContent?.trim(),
rect:[r.left,r.top,r.width,r.height].map((n)=>+n.toFixed(1)),
hitSelf:hit===el||el.contains(hit),
};
};
const rows=items.map(read);
console.log("PA_ACTION_RING_LAYOUT "+JSON.stringify({
trigger:read(trigger),
actions:rows,
count:rows.length,
sameTop:rows.length===3&&rows.every((x)=>Math.abs(x.rect[1]-rows[0].rect[1])<=1),
increasingLeft:rows.every((x,i)=>i===0||x.rect[0]>rows[i-1].rect[0]),
nonOverlapping:rows.every((x,i)=>i===0||x.rect[0]>=rows[i-1].rect[0]+rows[i-1].rect[2]),
min44:rows.every((x)=>x.rect[2]>=44&&x.rect[3]>=44),
insideViewport:rows.every((x)=>x.rect[0]>=box.left&&x.rect[1]>=box.top&&x.rect[0]+x.rect[2]<=box.right&&x.rect[1]+x.rect[3]<=box.bottom),
allHitSelf:rows.every((x)=>x.hitSelf),
}));
}));
})()Require count=3, all boolean assertions true, the intended label
order, and a matching visible screenshot. If gesture code did not change, stop
there after fresh error capture; do not repeat movement-cancel or exactly-once
checks.
Probe real Obsidian chrome before tuning plugin UI. Adjust thresholds for device and orientation:
(()=>{const q=[...document.querySelectorAll('button,.clickable-icon,.pa-pagelet-pet')].filter(e=>{const r=e.getBoundingClientRect();return r.top<130&&r.left<430&&r.width>10&&r.height>10}).map(e=>{const r=e.getBoundingClientRect(),s=getComputedStyle(e),svg=e.querySelector('svg'),p=svg&&svg.querySelector('path,line,polyline,rect,circle');return{cls:String(e.className),title:e.title,aria:e.getAttribute('aria-label'),rect:[r.x,r.y,r.width,r.height].map(n=>+n.toFixed(1)),color:s.color,svg:svg&&{rect:[svg.getBoundingClientRect().x,svg.getBoundingClientRect().y,svg.getBoundingClientRect().width,svg.getBoundingClientRect().height].map(n=>+n.toFixed(1)),viewBox:svg.getAttribute('viewBox'),w:svg.getAttribute('width'),h:svg.getAttribute('height')},path:p&&{tag:p.tagName,stroke:p.getAttribute('stroke'),sw:p.getAttribute('stroke-width'),cssStroke:getComputedStyle(p).stroke,cssSw:getComputedStyle(p).strokeWidth}}});console.log('PA_ICON_PROBE '+JSON.stringify(q))})()Use a null-safe focused pet/system-button comparison. .sidebar-toggle-button.mod-left is an Obsidian internal class and may be absent after an app update:
(()=>{let l=document.querySelector('.sidebar-toggle-button.mod-left'),p=document.querySelector('.pa-pagelet-pet');let f=e=>{if(!e)return null;let r=e.getBoundingClientRect(),s=e.querySelector('svg'),a=s?[...s.querySelectorAll('path,rect,line,polyline,circle')]:[];return{r:[r.x,r.y,r.width,r.height].map(n=>+n.toFixed(1)),svg:s&&[s.getAttribute('viewBox'),+s.getBoundingClientRect().width.toFixed(1),+s.getBoundingClientRect().height.toFixed(1)],sw:[...new Set(a.map(x=>(x.getAttribute('stroke-width')||getComputedStyle(x).strokeWidth)))],csw:[...new Set(a.map(x=>getComputedStyle(x).strokeWidth))].slice(0,6)}};console.log('PA_MIN '+JSON.stringify({left:f(l),pet:f(p)}))})()body.in-progress persists and preserve the user's manual testing path.test plugin directory or the declared
runner/fixture paths, and never delete vault data.iOS real-device smoke:
- Lane: `<geometry-only/interaction/broad-release>`
- Local prerequisite: PASS/FAIL
- Reused evidence: `<same-state evidence or none>`
- Device preflight: PASS/BLOCKED
- Artifact sync/deploy: PASS/FAIL/NOT_RUN
- Artifact evidence: `<runner-only: source/destination runner hash + unchanged current plugin identity | plugin-assets: four MATCH lines>`
- Load path: `<runner re-evaluation / plugin reload / single fallback / justified process restart>`
- Loaded identity: `<runner-only: unchanged loaded SHA/version | plugin-assets: instance transition + loaded SHA/version/load timestamp>`
- iPhone observation: PASS/FAIL/BLOCKED - `<Mirroring / Inspector / user>`
- Findings:
- PASS: `<path>` - `<observed behavior>`
- FAIL: `<path>` - `<issue and user impact>`
- BLOCKED: `<path>` - `<external blocker>`
- Inspector evidence: `<rects, CSS, console, DOM state>`
- Explicit skips: `<unaffected gestures, surfaces, orientations, or devices>`
- Stop point: `<sufficient evidence or retry limit reached>`
- Residual risk: `<untested paths or stale-state concern>`Separate “deployed and asset-matched” from “observed on iPhone.” Never promote the former into a real-device PASS.
obsidian-test-vault-smoke first at app-runtime tier or higher.obsidian-community-check only for an authorized hosted community scan.personal-assistant-review for code-level review gates.© edonyzpc, AGPL-3.0. 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 1 other file in .agents/skills/obsidian-ios-real-device-smoke of edonyzpc/personal-assistant.
Open the folder on GitHubat commit 4f02170
Obsidian iOS Real Device Smoke 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 |
|---|---|---|---|---|---|---|
| Obsidian iOS Real Device Smoke this skilledonyzpc/personal-assistant | 148 | — | ~4.5k | Automated safety check: Pass | AGPL-3.0 | |
| Mobile PrinciplesAThevon/genjutsu | 440 | — | ~2.8k | Automated safety check: Pass | Custom licence | |
| Mobile AccessibilityCommunity-Access/accessibility-agents | 423 | — | ~1.1k | Automated safety check: Pass | MIT | |
| Kb Mobile AccessibilityCommunity-Access/accessibility-agents | 423 | — | ~3.8k | Automated safety check: Pass | MIT | |
| Mobile Nativeswyxio/skills | 176 | — | ~1k | Automated safety check: Pass | MIT | |
| Mobile DesignDokhacgiakhoa/Agent-Skills-4-Vibe-Coding-CLI | 508 | — | ~510 | Automated safety check: Pass | Custom licence |
AThevon/genjutsu
Mobile-specific UX principles - touch targets, hover-less doctrine, thumb zones, safe areas, gestures, mobile perf budgets.
Community-Access/accessibility-agents
React Native, Expo, iOS and Android: labels, roles and touch targets.
Community-Access/accessibility-agents
Reference data, not a reviewer. An agent skill from Community-Access/accessibility-agents.
swyxio/skills
Apply swyx's native mobile UX preferences when designing or critiquing iPhone/iPad flows, adapting tablet layouts, choosing communication-app notification behavior, or opening notifications/deep…
Dokhacgiakhoa/Agent-Skills-4-Vibe-Coding-CLI
Mobile-first design thinking and decision-making for iOS and Android apps.
ParthJadhav/app-store-screenshots
Scaffolds a Next.js editor for designing App Store and Google Play screenshots as ads and exporting them at every required size, for iOS, Mac and Android.
edonyzpc/personal-assistant
Dataview plugin query syntax, inline expressions, DataviewJS API, and common vault analysis patterns.
edonyzpc/personal-assistant
Validate Personal Assistant runtime and UI changes in the repo-local Obsidian test vault.
edonyzpc/personal-assistant
Trigger and inspect Obsidian Community checks for personal-assistant.
edonyzpc/personal-assistant
Manage Personal Assistant BRAT beta prerelease workflow. An agent skill from edonyzpc/personal-assistant.
edonyzpc/personal-assistant
Maintain PA task records and documentation lifecycle. An agent skill from edonyzpc/personal-assistant.
edonyzpc/personal-assistant
Review uncommitted or PR diffs in the personal-assistant Obsidian plugin with project-specific risk lanes, second-layer future-risk checks, severity discipline, subagent review routing, and…
Categories
Validate Personal Assistant on an iPhone using the iCloud test vault and Safari Web Inspector. Obsidian iOS Real Device Smoke is an agent skill from edonyzpc/personal-assistant. Validate Personal Assistant on an iPhone using the iCloud test vault and Safari Web Inspector.
Obsidian iOS Real Device Smoke fits situations like: tasks that involve Mobile UI design.
Run `npx skills add edonyzpc/personal-assistant --skill obsidian-ios-real-device-smoke -a claude-code`. Or copy the skill folder (.agents/skills/obsidian-ios-real-device-smoke in edonyzpc/personal-assistant) into .claude/skills/obsidian-ios-real-device-smoke in your project. Claude Code loads it when a task matches its description.
Run `npx skills add edonyzpc/personal-assistant --skill obsidian-ios-real-device-smoke -a codex`. Or copy the skill folder (.agents/skills/obsidian-ios-real-device-smoke in edonyzpc/personal-assistant) into .agents/skills/obsidian-ios-real-device-smoke 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 edonyzpc/personal-assistant --skill obsidian-ios-real-device-smoke -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/obsidian-ios-real-device-smoke, .gemini/skills/obsidian-ios-real-device-smoke, .github/skills/obsidian-ios-real-device-smoke and .opencode/skills/obsidian-ios-real-device-smoke in your project.
Going by SKILL.md and its folder, Obsidian iOS Real Device Smoke needs the command-line tools its instructions call (make and git).
SKILL.md contains no URLs. Its commands use git, 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 no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Obsidian iOS Real Device Smoke is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.5k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Obsidian iOS Real Device Smoke: Mobile Principles (AThevon/genjutsu, 440 stars), Mobile Accessibility (Community-Access/accessibility-agents, 423 stars), Kb Mobile Accessibility (Community-Access/accessibility-agents, 423 stars) and Mobile Native (swyxio/skills, 176 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
edonyzpc (a GitHub user) maintains it in edonyzpc/personal-assistant, which has 148 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on October 10, 2026.
Source: edonyzpc/personal-assistant on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.