Mobile API surface (v3 only), removed legacy endpoints, and the v5-native tag format for mobile clients.

GPL-3.0Auto-check passed

Install Mobile Shim

skills CLI
$ npx skills add OpenLitterMap/openlittermap-web --skill mobile-shim -a claude-code

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

GitHub CLI
$ gh skill install OpenLitterMap/openlittermap-web mobile-shim --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/OpenLitterMap/openlittermap-web.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.ai/skills/mobile-shim .claude/skills/mobile-shim && 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
mobile-shim
GitHub stars
134
Token cost
~1.4k tokens
SKILL.md length
538 words
Files
1
Skills in repo
16
Repo updated
First seen
Licence
GPL-3.0

At a glance

Mobile API surface (v3 only), removed legacy endpoints, and the v5-native tag format for mobile clients.

  • Works in 6 steps: v3 only. No legacy endpoints exist.… → Sanctum token auth. POST /api/auth/token… → identifier field for login.… → …
  • SKILL.md covers Key Files, Active Mobile Endpoints, Upload: Explicit Coordinates… and User Photos: Configurable…, plus 6 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Mobile Shim is an agent skill from OpenLitterMap/openlittermap-web. Mobile API surface (v3 only), removed legacy endpoints, and the v5-native tag format for mobile clients.

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

It works with PHP. The repository describes itself as: https://opengeospatialdata.springeropen.com/articles/10.1186/s40965-018-0050-y. The licence is GPL-3.0.

Example prompts

  • “/mobile-shim”

Workflow steps

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

  1. v3 only. No legacy endpoints exist. Mobile must use v5 CLO tag format.
  2. Sanctum token auth. POST /api/auth/token returns a Bearer token. All subsequent requests include Authorization: Bearer .
  3. identifier field for login. AuthTokenController accepts identifier, email, or username for backward compatibility.
  4. CLO tag format. Tags use category_litter_object_id + optional litter_object_type_id, not category/object string pairs.
  5. picked_up not remaining. Photo responses include picked_up (boolean, never null) and remaining (deprecated, inverse). Per-tag picked_up in…
  6. Delete uses photoid (lowercase, no underscore). POST /api/profile/photos/delete body: { "photoid": 123 }. Response: { "message": "Photo…

What it can do on your machine

Read from SKILL.md and the folder at commit ac688aa. 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

    No scripts in the folder and no shell commands in SKILL.md (its code samples are json).

    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

Mobile Shim loads about 1.4k tokens when it runs. Until then it costs about 29 tokens; SKILL.md has 538 words of instructions outside code blocks.

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

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 OpenLitterMap/openlittermap-web at commit ac688aa, republished under its GPL-3.0 licence (© OpenLitterMap). 538 words, ~1,385 tokens.

Download SKILL.mdSave it as .claude/skills/mobile-shim/SKILL.md (or your agent's skills folder).
name
mobile-shim
description
Mobile API surface (v3 only), removed legacy endpoints, and the v5-native tag format for mobile clients.

Mobile API (v3 Only)

All legacy v1/v2/v4 mobile endpoints and the ConvertV4TagsAction shim have been removed (2026-03-01). The mobile app uses v3 endpoints exclusively.

Key Files

  • app/Http/Controllers/Uploads/UploadPhotoController.php — v3 upload (EXIF-based)
  • app/Http/Controllers/API/Tags/PhotoTagsController.php — v3 tag CRUD (CLO format)
  • app/Http/Controllers/User/Photos/UsersUploadsController.php — v3 user photos listing
  • app/Http/Controllers/Auth/AuthTokenController.php — Mobile token login (Sanctum)
  • readme/Mobile.md — Mobile documentation

Active Mobile Endpoints

ActionMethodEndpoint
Auth (token)POST/api/auth/token
Validate tokenPOST/api/validate-token
Upload photoPOST/api/v3/upload
Add tagsPOST/api/v3/tags
Replace tagsPUT/api/v3/tags
List photosGET/api/v3/user/photos
Photo statsGET/api/v3/user/photos/stats
Delete photoPOST/api/profile/photos/delete (body: { "photoid": 123 })
Tag catalogGET/api/tags/all
ProfileGET/api/user/profile/index
Global statsGET/api/global/stats-data (no auth)
LevelsGET/api/levels (no auth)

Upload: Explicit Coordinates (Mobile Mode)

POST /api/v3/upload supports two modes:

  • Web (default): Only photo required. GPS + datetime from EXIF.
  • Mobile: Send lat + lon + date alongside photo. All three must be present. EXIF validation skipped. Platform set to 'mobile'.

Optional fields: picked_up (boolean, overrides user default), model (string, device name).

Date accepts Unix timestamp (seconds) or ISO 8601 string. (0, 0) coordinates rejected.

User Photos: Configurable Pagination

GET /api/v3/user/photos?tagged=false&per_page=100 — fetches untagged photos. per_page default 8, max 100.

Invariants

  1. v3 only. No legacy endpoints exist. Mobile must use v5 CLO tag format.
  2. Sanctum token auth. POST /api/auth/token returns a Bearer token. All subsequent requests include Authorization: Bearer <token>.
  3. identifier field for login. AuthTokenController accepts identifier, email, or username for backward compatibility.
  4. CLO tag format. Tags use category_litter_object_id + optional litter_object_type_id, not category/object string pairs.
  5. picked_up not remaining. Photo responses include picked_up (boolean, never null) and remaining (deprecated, inverse). Per-tag picked_up in new_tags[] is nullable (true/false/null). The remaining column will be removed after the v5 migration script runs.
  6. Delete uses photoid (lowercase, no underscore). POST /api/profile/photos/delete body: { "photoid": 123 }. Response: { "message": "Photo deleted successfully!" }.

Tag Submission Format

json
{
    "photo_id": 123,
    "tags": [
        {
            "category_litter_object_id": 42,
            "litter_object_type_id": 3,
            "quantity": 2,
            "picked_up": true,
            "materials": [{ "id": 1, "quantity": 1 }],
            "brands": [{ "id": 5, "quantity": 1 }]
        }
    ]
}

Building Search Index

GET /api/tags/all returns 7 flat collections. Mobile must join them:

  1. Object entries: category_objects[].id = cloId
  2. Type entries: category_object_types → types for display names
  3. Standalone: brands and materials can be submitted alone
Show full SKILL.md (206 more words)Show less

Removed (2026-03-01)

Deleted endpoints
  • POST /api/photos/submit (and all aliases)
  • POST /api/add-tags
  • POST /api/v2/add-tags-to-uploaded-image
  • GET /api/v2/photos/get-untagged-uploads
  • GET /api/v2/photos/web/*
  • DELETE /api/photos/delete
  • POST /api/upload
  • GET /api/user (closure), GET /api/current-user
Deleted code
  • app/Actions/Tags/ConvertV4TagsAction.php — v4→v5 conversion shim (no longer needed)
  • app/Http/Controllers/ApiPhotosController.php — legacy mobile upload/delete
  • app/Http/Controllers/API/AddTagsToUploadedImageController.php — legacy mobile tagging
  • app/Http/Controllers/API/GetUntaggedUploadController.php — legacy untagged photos list

React Native v7 API Changes

See MOBILE_API_CHANGES.md at the project root for the full RN v7 change log.

Key notes:

  • filename field is a full URL — usable directly as an image source (no base URL prefix needed)
  • new_tags response includes category, object, type, extra_tags, picked_up (bool). For loose tags (extra-tag-only), category, object, and category_litter_object_id may be null.
  • Tag editing via PUT /api/v3/tags — same CLO format. Accepts empty tags: [] to clear all tags.
  • picked_up cast to (bool) with fallback to photo-level picked_up

Common Mistakes

  • Sending v4 tag format. { smoking: { butts: 3 } } is no longer accepted. Use CLO format.
  • Using old upload endpoint. POST /api/photos/submit no longer exists. Use POST /api/v3/upload.
  • Using old delete endpoint. DELETE /api/photos/delete no longer exists. Use POST /api/profile/photos/delete.
  • Not building search index from /api/tags/all. The 7 flat collections must be joined client-side.
  • Prefixing filename with a base URL. The filename field is already a full URL — using it with a prefix produces a broken double-URL.

© OpenLitterMap, GPL-3.0. 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 .ai/skills/mobile-shim of OpenLitterMap/openlittermap-web.

Open the folder on GitHubat commit ac688aa

Compare with similar skills

Mobile Shim 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.

Mobile Shim compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Mobile Shim this skillOpenLitterMap/openlittermap-web134—~1.4kAutomated safety check: PassGPL-3.0
Configuring Horizoncoollabsio/coolify63k4 repos~898Automated safety check: PassMIT
Tailwindcss Developmentanonaddy/anonaddy4.9k10 repos~865Automated safety check: PassMIT
Fortify Developmentcoollabsio/coolify63k4 repos~1.9kAutomated safety check: PassMIT
MCP Developmentcoollabsio/coolify63k1 repos~949Automated safety check: PassMIT
WooCommerce Code Reviewwoocommerce/woocommerce11k3 repos~1.1kAutomated safety check: PassCustom licence

Similar skills

  • Configuring Horizon

    coollabsio/coolify

    A skill your agent uses whenever the user mentions Horizon by name in a Laravel context.

    63k GitHub starsUsed in 4 repos~898 tokens
    Backend & APIsAuto-check passed
  • Tailwindcss Development

    anonaddy/anonaddy

    Always invoke when the user's message includes 'tailwind' in any form.

    4.9k GitHub starsUsed in 10 repos~865 tokens
    Frontend & DesignAuto-check passed
  • Fortify Development

    coollabsio/coolify

    ACTIVATE when the user works on authentication in Laravel. An agent skill from coollabsio/coolify.

    63k GitHub starsUsed in 4 repos~1.9k tokens
    Backend & APIsAuto-check passed
  • MCP Development

    coollabsio/coolify

    A skill your agent uses for Laravel MCP development. An agent skill from coollabsio/coolify.

    63k GitHub starsUsed in 1 repo~949 tokens
    Frontend & DesignAuto-check passed
  • WooCommerce Code Review

    woocommerce/woocommerce

    Reviews WooCommerce code changes against the project's standards, flagging backend PHP architecture, naming, documentation, data integrity and testing violations.

    11k GitHub starsUsed in 3 repos~1.1k tokens
    DevelopmentAuto-check passed
  • Sync Translations

    symfony/symfony

    Synchronize translation catalogs across maintained Symfony branches: find messages that newer branches added to the English catalogs but that are still missing from the oldest maintained branch…

    31k GitHub stars~1.9k tokensUpdated today
    Writing & ContentAuto-check passed

More from OpenLitterMap/openlittermap-web

All 16 skills in this repo
  • Tailwindcss Development

    OpenLitterMap/openlittermap-web

    Styles applications using Tailwind CSS v3 utilities. An agent skill from OpenLitterMap/openlittermap-web.

    134 GitHub stars~713 tokensUpdated 23 days ago
    Auto-check passed
  • Olm Architecture

    OpenLitterMap/openlittermap-web

    OpenLitterMap v5 architecture reference. An agent skill from OpenLitterMap/openlittermap-web.

    134 GitHub stars~5.2k tokensUpdated 23 days ago
    Auto-check passed
  • Achievements System

    OpenLitterMap/openlittermap-web

    AchievementEngine, AchievementRepository, milestone checkers, AchievementsSeeder, userachievements pivot, AchievementsController API, and achievement evaluation flow.

    134 GitHub stars~1.4k tokensUpdated 23 days ago
    Auto-check passed
  • Admin System

    OpenLitterMap/openlittermap-web

    AdminController, photo approval, tag editing, deletion, MetricsService integration, admin middleware, verification queue, and admin XP.

    134 GitHub stars~3.9k tokensUpdated 23 days ago
    Auto-check passed
  • API Endpoints

    OpenLitterMap/openlittermap-web

    REST API endpoints, route structure, auth guards, request/response contracts, error patterns, and the full API surface for web SPA and mobile clients.

    134 GitHub stars~4k tokensUpdated 23 days ago
    Auto-check passed
  • Clustering System

    OpenLitterMap/openlittermap-web

    ClusteringService, tile keys, dirty tiles/teams, clustering commands, ClusterController GeoJSON API, PhotoObserver dirty marking, and map cluster rendering.

    134 GitHub stars~2k tokensUpdated 23 days ago
    Auto-check passed

Works with

Questions about Mobile Shim

What does Mobile Shim do?

Mobile API surface (v3 only), removed legacy endpoints, and the v5-native tag format for mobile clients. Mobile Shim is an agent skill from OpenLitterMap/openlittermap-web. Mobile API surface (v3 only), removed legacy endpoints, and the v5-native tag format for mobile clients.

How do I install Mobile Shim in Claude Code?

Run `npx skills add OpenLitterMap/openlittermap-web --skill mobile-shim -a claude-code`. Or copy the skill folder (.ai/skills/mobile-shim in OpenLitterMap/openlittermap-web) into .claude/skills/mobile-shim in your project. Claude Code loads it when a task matches its description.

How do I install Mobile Shim in Codex?

Run `npx skills add OpenLitterMap/openlittermap-web --skill mobile-shim -a codex`. Or copy the skill folder (.ai/skills/mobile-shim in OpenLitterMap/openlittermap-web) into .agents/skills/mobile-shim in your project. Codex loads it when a task matches its description.

Can I use Mobile Shim 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 OpenLitterMap/openlittermap-web --skill mobile-shim -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/mobile-shim, .gemini/skills/mobile-shim, .github/skills/mobile-shim and .opencode/skills/mobile-shim in your project.

What does Mobile Shim need to run?

SKILL.md names no scripts, command-line tools or credentials: Mobile Shim is instructions for the agent only.

Does Mobile Shim 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 Mobile Shim 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 Mobile Shim use?

Mobile Shim is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Mobile Shim use?

About 1.4k tokens (SKILL.md is roughly 5.5k 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 Mobile Shim?

Skills that share tags, products or a category with Mobile Shim: Configuring Horizon (coollabsio/coolify, 63k stars), Tailwindcss Development (anonaddy/anonaddy, 4.9k stars), Fortify Development (coollabsio/coolify, 63k stars) and MCP Development (coollabsio/coolify, 63k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Mobile Shim?

OpenLitterMap (a GitHub organization) maintains it in OpenLitterMap/openlittermap-web, which has 134 GitHub stars. The repository holds 16 skills in this directory. The repository was last updated on September 14, 2026.

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