Agent skill

Add Strings

by parawanderer in parawanderer/OpenTagViewer

Add or back-fill user-facing Android strings across all locales in OpenTagViewer.

MITAuto-check passedWriting & Content

Install Add Strings

skills CLI
$ npx skills add parawanderer/OpenTagViewer --skill add-strings -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install parawanderer/OpenTagViewer add-strings --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/parawanderer/OpenTagViewer.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/add-strings .claude/skills/add-strings && rm -rf skills-src

Use ~/.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/

Facts

Skill name
add-strings
GitHub stars
418
Token cost
~1.2k tokens
SKILL.md length
574 words
Files
1
Skills in repo
5
Repo updated
First seen
Licence
MIT

At a glance

Add or back-fill user-facing Android strings across all locales in OpenTagViewer.

  • Works in 4 steps: Find out which locales are required — do… → Write the JSON with the Write tool, one… → Apply, then confirm nothing drifted → …
  • Translating any string that appears in the UI
  • SKILL.md covers The rule that matters, Workflow, Flags and Removing and renaming, plus 3 more sections
  • Calls python and bash

What it does

Add Strings is an agent skill from parawanderer/OpenTagViewer. Add or back-fill user-facing Android strings across all locales in OpenTagViewer. Use whenever adding, renaming or translating any string that appears in the UI, or when checking translations are complete before a PR.

Its SKILL.md is about 1.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Writing & Content, covering Translation. It works with Android. The repository describes itself as: Track your AirTags, iDevices and other FindMy devices on Android. The licence is MIT.

When your agent uses it

  • Translating any string that appears in the UI
  • Checking translations are complete before a PR

Example prompts

  • “/add-strings”

Requirements

  • Python 3

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Find out which locales are required — do not assume, they are discovered from the tree
  2. Write the JSON with the Write tool, one entry per string, every locale present
  3. Apply, then confirm nothing drifted
  4. Build. aapt is the real judge of whether the XML is acceptable

What it can do on your machine

Read from SKILL.md and the folder at commit 335b258. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • python
    • bash

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Add Strings loads about 1.2k tokens when it runs. Until then it costs about 57 tokens; SKILL.md has 574 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~57
When it runs · the whole SKILL.md, loaded when a task matches
~1.2k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from parawanderer/OpenTagViewer at commit 335b258, republished under its MIT licence (© parawanderer). 574 words, ~1,174 tokens.

Download SKILL.mdSave it as .claude/skills/add-strings/SKILL.md (or your agent's skills folder).
name
add-strings
description
Add or back-fill user-facing Android strings across all locales in OpenTagViewer. Use whenever adding, renaming or translating any string that appears in the UI, or when checking translations are complete before a PR.

Adding user-facing strings

The app ships ten locales. A string missing from one silently falls back to English — nothing fails, and it looks correct in whichever language you happen to read. So every UI string has to land in every locale in one go.

The rule that matters

Never pass translations through a shell argument. Write a JSON file with the Write tool, then point the script at it. Passing non-ASCII text through bash -c, sed or a here-doc has corrupted it twice in this repo — a French apostrophe reached the screen as a literal \’. The Write tool does not go through shell quoting; a for loop does.

For the same reason, do not hand-edit ten strings.xml files with ten Edit calls unless the script cannot do what you need. It is slower and it is what the script exists to replace.

Workflow

  1. Find out which locales are required — do not assume, they are discovered from the tree:

    bash
    python scripts/add_strings.py --locales
  2. Write the JSON with the Write tool, one entry per string, every locale present:

    json
    {
      "how_do_i_get_the_zip": {
        "default": "How do I get the zip?",
        "en": "How do I get the zip?",
        "de": "Wie erhalte ich die ZIP-Datei?",
        "fr": "Comment obtenir l’archive zip ?",
        "nl": "Hoe kom ik aan de zip?",
        "ru": "Как получить zip-архив?",
        "ja": "zip ファイルの入手方法",
        "ko": "zip 파일은 어떻게 받나요?",
        "zh-rCN": "如何获取 zip 文件?",
        "zh-rTW": "如何取得 zip 檔案?"
      }
    }

    Put it in the scratchpad or tmp/, not in the repo root.

  3. Apply, then confirm nothing drifted:

    bash
    python scripts/add_strings.py tmp/new_strings.json
    python scripts/add_strings.py --check
  4. Build. aapt is the real judge of whether the XML is acceptable:

    bash
    JAVA_HOME='C:\Program Files\Android\Android Studio\jbr' ./gradlew.bat :app:assembleDebug

Flags

CommandWhat it does
add_strings.py (no args)Prints full usage and the input format
--localesLists discovered locales and their files
<file.json>Adds strings; errors if any locale is missing or the name already exists
--fill <file.json>Adds only where missing — for back-filling what --check reported
--show <name>...Prints existing strings in the input format, ready to edit
--replace <file.json>Rewords strings that already exist; errors if one is not defined everywhere
--remove <name>...Deletes strings from every locale; errors if a name exists nowhere
--checkFails if any locale lacks a string the default locale has. Run before a PR
Show full SKILL.md (266 more words)Show less

Removing and renaming

Do not hand-delete a string from ten files, for the same reason you do not hand-add one:

bash
python scripts/add_strings.py --remove old_name

Renaming is --remove then an ordinary add. Nothing updates references — if a layout or menu still points at a removed string, aapt fails the build, which is how you want to find out.

Rewording something that already exists is --show piped into a file, edited, then --replace. That refuses unless the string is defined in every locale, so a typo in the name fails instead of quietly doing nothing.

Translating

Translate properly rather than leaving English in place; the existing files are fully translated and a stray English string is conspicuous. Points that have come up here:

  • French uses a space before :, ? and !, and reads better with ’ than '
  • CJK wants the full-width colon : and, for a gap, the ideographic space  
  • Keep positional format specifiers (%1$d, %2$s) intact and in a natural order for the language — they may be reordered, which is the point of the positional form
  • Product names (Google Maps, AMap, Anisette) generally stay as they are

What the script already handles

Do not do these by hand:

  • Escaping ', " and & as Android requires
  • Preserving <u>, <b>, <i> so emphasis survives — styling that belongs to the copy belongs in the resource, not in a paint flag in code that would only ever apply to English
  • Re-parsing each file after writing, so a bad write fails immediately instead of at aapt time
  • translatable="false" — set "translatable": false and supply only "default"

AGENTS.md documents this generically for any agent. Keep the two in step if the tool changes.

© parawanderer, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/add-strings of parawanderer/OpenTagViewer.

Open the folder on GitHubat commit 335b258

Compare with similar skills

Add Strings 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.

Add Strings compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Add Strings this skillparawanderer/OpenTagViewer418—~1.2kAutomated safety check: PassMIT
QmdXRSec/Screen-Remote183—~802Automated safety check: PassApache-2.0
Translate Android LocaleCodename-11/hermes-relay314—~365Automated safety check: PassMIT
Cometchat Android V6 Extensionscometchat/cometchat-skills130—~1.4kAutomated safety check: PassMIT
Fluent MigrationBrowserWorks/waterfox-android3791 repos~4.2kAutomated safety check: PassCustom licence
Dpis LocalizationKwensiu/DPIS108—~1.5kAutomated safety check: PassGPL-3.0

Similar skills

  • Qmd

    XRSec/Screen-Remote

    Search and retrieve Screen Remote Android and macOS Wiki documentation through the local QMD BM25 index, and audit bilingual Wiki pairing and navigation integrity.

    183 GitHub stars~802 tokensUpdated 1 mo ago
    Writing & ContentAuto-check passed
  • Translate Android Locale

    Codename-11/hermes-relay

    Generate, critique, install, and validate AI-assisted Android string-resource translations for Hermes-Relay.

    314 GitHub stars~365 tokensUpdated yesterday
    Writing & ContentAuto-check passed
  • Cometchat Android V6 Extensions

    cometchat/cometchat-skills

    Turn on CometChat Dashboard extensions in an Android v6 app — stickers, polls, collaborative whiteboard and document, message translation, link preview, thumbnail generation, message shortcuts — and…

    130 GitHub stars~1.4k tokensUpdated 3 days ago
    Media & CreativeAuto-check passed
  • Fluent Migration

    BrowserWorks/waterfox-android

    A skill your agent uses when a patch or local changes rename, restructure, move, or replace Fluent (.ftl) strings - or migrate legacy .properties strings to Fluent - and you need a migration recipe…

    379 GitHub starsUsed in 1 repo~4.2k tokens
    Frontend & DesignAuto-check passed
  • Dpis Localization

    Kwensiu/DPIS

    Project-local DPIS localization workflow. An agent skill from Kwensiu/DPIS.

    108 GitHub stars~1.5k tokensUpdated 3 days ago
    Frontend & DesignAuto-check passed
  • Cometchat Android V6 Features

    cometchat/cometchat-skills

    Add or enable a specific CometChat feature in an Android v6 app — receipts, typing, reactions, mentions, threads, search, polls, stickers, translation, link previews, AI smart replies / conversation…

    130 GitHub stars~2.4k tokensUpdated 3 days ago
    MobileAuto-check passed

More from parawanderer/OpenTagViewer

  • Device Screenshots

    parawanderer/OpenTagViewer

    Render app UI on the Gradle managed device and look at the result without spending a fortune in vision tokens.

    418 GitHub stars~1.4k tokensUpdated 19 days ago
    Auto-check passed
  • Investigating Bug Reports

    parawanderer/OpenTagViewer

    Read a GitHub bug report completely - every comment and every image - before diagnosing or asking the reporter for more.

    418 GitHub stars~1.7k tokensUpdated 19 days ago
    Auto-check passed
  • Watch Gradle Tests

    parawanderer/OpenTagViewer

    Watch a Gradle instrumented-test run to a verdict without hand-writing greps.

    418 GitHub stars~1.4k tokensUpdated 19 days ago
    Auto-check passed
  • Watch PR

    parawanderer/OpenTagViewer

    Watch a pushed PR's checks with the Monitor tool, and act on the verdict.

    418 GitHub stars~1.9k tokensUpdated 19 days ago
    Auto-check passed

Works with

Questions about Add Strings

What does Add Strings do?

Add or back-fill user-facing Android strings across all locales in OpenTagViewer. Add Strings is an agent skill from parawanderer/OpenTagViewer. Add or back-fill user-facing Android strings across all locales in OpenTagViewer.

When should I use Add Strings?

Add Strings fits situations like: translating any string that appears in the UI; checking translations are complete before a PR.

How do I install Add Strings in Claude Code?

Run `npx skills add parawanderer/OpenTagViewer --skill add-strings -a claude-code`. Or copy the skill folder (.claude/skills/add-strings in parawanderer/OpenTagViewer) into .claude/skills/add-strings in your project. Claude Code loads it when a task matches its description.

How do I install Add Strings in Codex?

Run `npx skills add parawanderer/OpenTagViewer --skill add-strings -a codex`. Or copy the skill folder (.claude/skills/add-strings in parawanderer/OpenTagViewer) into .agents/skills/add-strings in your project. Codex loads it when a task matches its description.

Can I use Add Strings in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add parawanderer/OpenTagViewer --skill add-strings -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/add-strings, .gemini/skills/add-strings, .github/skills/add-strings and .opencode/skills/add-strings in your project.

What does Add Strings need to run?

Going by SKILL.md and its folder, Add Strings needs the command-line tools its instructions call (python and bash). Our summary lists: Python 3.

Does Add Strings access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Add Strings safe to install?

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.

What licence does Add Strings use?

Add Strings is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Add Strings use?

About 1.2k tokens (SKILL.md is roughly 4.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Add Strings?

Skills that share tags, products or a category with Add Strings: Qmd (XRSec/Screen-Remote, 183 stars), Translate Android Locale (Codename-11/hermes-relay, 314 stars), Cometchat Android V6 Extensions (cometchat/cometchat-skills, 130 stars) and Fluent Migration (BrowserWorks/waterfox-android, 379 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Add Strings?

parawanderer (a GitHub user) maintains it in parawanderer/OpenTagViewer, which has 418 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on September 19, 2026.

Source: parawanderer/OpenTagViewer on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.