Agent skill

Admin System

by OpenLitterMap in OpenLitterMap/openlittermap-web

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

GPL-3.0Auto-check passed

Install Admin System

skills CLI
$ npx skills add OpenLitterMap/openlittermap-web --skill admin-system -a claude-code

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

GitHub CLI
$ gh skill install OpenLitterMap/openlittermap-web admin-system --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/admin-system .claude/skills/admin-system && 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
admin-system
GitHub stars
134
Token cost
~3.9k tokens
SKILL.md length
1,051 words
Files
1
Skills in repo
16
Repo updated
First seen
Licence
GPL-3.0

At a glance

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

  • Works in 10 steps: Approve requires non-null summary. If… → Approve is atomic and idempotent. WHERE… → School photos excluded. is_public =… → …
  • SKILL.md covers Key Files, Invariants, Patterns and Routes, plus 5 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Admin System is an agent skill from OpenLitterMap/openlittermap-web. AdminController, photo approval, tag editing, deletion, MetricsService integration, admin middleware, verification queue, and admin XP.

Its SKILL.md is about 3.9k 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

  • “/admin-system”

Workflow steps

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

  1. Approve requires non-null summary. If photo.summary is null → 422. No tags = nothing to approve.
  2. Approve is atomic and idempotent. WHERE is_public = true AND verified < ADMIN_APPROVED. Second approve matches 0 rows, no event fires, no…
  3. School photos excluded. is_public = false photos never enter admin queue. The WHERE is_public = true condition enforces this.
  4. MetricsService before soft delete. deletePhoto() runs BEFORE $photo->delete(). If it throws, delete is aborted.
  5. Soft delete only. $photo->delete() uses SoftDeletes trait. No hard deletes.
  6. Full event constructor. TagsVerifiedByAdmin needs all 6 args: photo_id, user_id, country_id, state_id, city_id, team_id.
  7. No S3 deletion on approve. Photos remain viewable after approval. S3 cleanup is deferred (Phase 2).
  8. Admin XP is conditional. rewardXpToAdmin() only called when an action actually changed state (row updated).
  9. Tag edits use DB::transaction. Delete existing PhotoTags + AddTagsToPhotoAction::run() + approve, all atomic.
  10. Admin middleware uses web guard. Auth::user() (default = web). Tests use actingAs($user) with no guard arg.

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 php).

    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

Admin System loads about 3.9k tokens when it runs. Until then it costs about 37 tokens; SKILL.md has 1,051 words of instructions outside code blocks.

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

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). 1,051 words, ~3,871 tokens.

Download SKILL.mdSave it as .claude/skills/admin-system/SKILL.md (or your agent's skills folder).
name
admin-system
description
AdminController, photo approval, tag editing, deletion, MetricsService integration, admin middleware, verification queue, and admin XP.

Admin System

Admin photo review: approve, edit tags, delete. Quality gate between user submissions and public data.

Key Files

Backend — Photo Review (Phase 1–2)
  • app/Http/Controllers/AdminController.php — 4 methods: verify, destroy, updateDelete, getCountriesWithPhotos
  • app/Http/Controllers/Admin/AdminQueueController.php — Paginated queue endpoint with filters + tag transform (GET /api/admin/photos)
  • app/Http/Controllers/Admin/AdminResetTagsController.php — Reset tags on a photo: reverse metrics, delete PhotoTags, reset state to unverified
  • app/Http/Middleware/IsAdmin.php — checks hasRole('admin') or hasRole('superadmin') on web guard
  • app/Events/TagsVerifiedByAdmin.php — event with full constructor (photo_id, user_id, country_id, state_id, city_id, team_id)
  • app/Actions/Tags/AddTagsToPhotoAction.php — v5 tag pipeline (creates PhotoTags, summary, XP)
  • app/Services/Metrics/MetricsService.php — deletePhoto() for metric reversal before soft delete
  • app/Helpers/helpers.php — rewardXpToAdmin(), logAdminAction()
Backend — User Management, Stats, Username Moderation (Phase 3)
  • app/Http/Controllers/Admin/AdminStatsController.php — Dashboard stats (cached 60s): queue totals, by-verification, by-country, user counts, flagged usernames
  • app/Http/Controllers/Admin/AdminUsersController.php — 4 methods: index (list/search/filter), trust (toggle), approveAll (bulk), updateUsername (moderation)
  • app/Http/Requests/Admin/UpdateUsernameRequest.php — Validation: 3–30 chars, alphanumeric + hyphens, unique. Superadmin auth gate.
  • app/Mail/SchoolManagerInvite.php — Queued email sent when school_manager role is granted via toggleSchoolManager()
Frontend
  • resources/js/stores/admin.js — Pinia store: fetchPhotos, fetchCountries, approvePhoto, deletePhoto, updateTagsAndApprove, fetchUsers, fetchStats, toggleTrust, approveAllForUser, updateUsername
  • resources/js/views/Admin/AdminQueue.vue — Photo review page (three-panel: filters | photo | tags)
  • resources/js/views/Admin/AdminUsers.vue — User management page (stats cards, search, filters, table)
  • resources/js/views/Admin/components/AdminQueueHeader.vue — Header bar with pending count, navigation, action buttons
  • resources/js/views/Admin/components/AdminQueueFilters.vue — Filter sidebar (country, photo ID, user ID, date range)
  • resources/js/views/Admin/components/UserRow.vue — Table row: trust toggle, approve all, username editor (superadmin gated)
Tests (49 tests total)
  • tests/Feature/Admin/AdminVerificationTest.php — 8 tests (approve, delete, edit+approve, retag, idempotency, auth, school exclusion)
  • tests/Feature/Admin/AdminQueueTest.php — 12 tests (queue endpoint: filters, pagination, exclusions, auth)
  • tests/Feature/Admin/AdminResetTagsTest.php — 4 tests (reset clears state, metrics reversal, skip approved, non-admin rejected)
  • tests/Feature/Admin/AdminStatsTest.php — 5 tests (cache, counts, by-verification, by-country, auth)
  • tests/Feature/Admin/AdminUsersTest.php — 9 tests (list, search, sort, trust filter, flagged filter, pagination, auth, school manager invite email on grant, no email on revoke)
  • tests/Feature/Admin/AdminTrustTest.php — 10 tests (trust toggle, approve-all, superadmin-only, school exclusion, idempotency)
  • tests/Feature/Admin/AdminUsernameModerationTest.php — 13 tests (username edit, flagging lifecycle, validation rules, auth)
  • readme/Admin.md — full spec (Phase 1–3 complete)

Invariants

  1. Approve requires non-null summary. If photo.summary is null → 422. No tags = nothing to approve.
  2. Approve is atomic and idempotent. WHERE is_public = true AND verified < ADMIN_APPROVED. Second approve matches 0 rows, no event fires, no XP awarded.
  3. School photos excluded. is_public = false photos never enter admin queue. The WHERE is_public = true condition enforces this.
  4. MetricsService before soft delete. deletePhoto() runs BEFORE $photo->delete(). If it throws, delete is aborted.
  5. Soft delete only. $photo->delete() uses SoftDeletes trait. No hard deletes.
  6. Full event constructor. TagsVerifiedByAdmin needs all 6 args: photo_id, user_id, country_id, state_id, city_id, team_id.
  7. No S3 deletion on approve. Photos remain viewable after approval. S3 cleanup is deferred (Phase 2).
  8. Admin XP is conditional. rewardXpToAdmin() only called when an action actually changed state (row updated).
  9. Tag edits use DB::transaction. Delete existing PhotoTags + AddTagsToPhotoAction::run() + approve, all atomic.
  10. Admin middleware uses web guard. Auth::user() (default = web). Tests use actingAs($user) with no guard arg.

Patterns

Approve flow
php
// Precondition
if ($photo->summary === null) return 422;

// Atomic update
$affected = Photo::where('id', $photo->id)
    ->where('is_public', true)
    ->where('verified', '<', VerificationStatus::ADMIN_APPROVED->value)
    ->update(['verified' => VerificationStatus::ADMIN_APPROVED->value]);

// Only if row was updated
if ($affected > 0) {
    event(new TagsVerifiedByAdmin($photo->id, $photo->user_id, ...));
    rewardXpToAdmin();
}
Delete flow
php
if ($photo->processed_at !== null) {
    $this->metricsService->deletePhoto($photo); // Reverses metrics
}
// Littercoin detachment...
$photo->delete(); // Soft delete
rewardXpToAdmin();
Edit + approve flow
php
DB::transaction(function () use ($request, $photo) {
    PhotoTag::where('photo_id', $photo->id)->delete();
    $this->addTagsAction->run($photo->user_id, $photo->id, $request->tags);
});
$photo->refresh();
// Then same atomic approve as verify()
Countries queue query (v5)
php
Photo::query()
    ->where('verified', '<', VerificationStatus::ADMIN_APPROVED->value)
    ->where('is_public', true)
    ->whereNotNull('summary')
    ->groupBy('country_id');
Queue endpoint pattern
php
// GET /api/admin/photos — AdminQueueController
Photo::query()
    ->where('is_public', true)
    ->where('verified', '<', VerificationStatus::ADMIN_APPROVED->value)
    ->whereNotNull('summary')
    ->with(['user:id,name', 'countryRelation:id,country,shortcode',
            'photoTags.category', 'photoTags.object',
            'photoTags.primaryCustomTag', 'photoTags.extraTags.extraTag'])
    ->when($request->country_id, fn ($q) => $q->where('country_id', $request->country_id))
    ->when($request->user_id, fn ($q) => $q->where('user_id', $request->user_id))
    ->when($request->photo_id, fn ($q) => $q->where('id', $request->photo_id))
    ->when($request->date_from, fn ($q) => $q->where('created_at', '>=', $request->date_from))
    ->when($request->date_to, fn ($q) => $q->where('created_at', '<=', $request->date_to))
    ->orderBy('created_at', 'asc')
    ->paginate($perPage);
// Response manually built (avoids Location accessor crash on null updated_at)
// Includes new_tags[] with hydrated PhotoTag data for frontend tag editing
Stats endpoint pattern
php
// GET /api/admin/stats — AdminStatsController (cached 60s)
Cache::remember('admin:dashboard:stats', 60, function () {
    // queue_total: is_public=true, verified=VERIFIED, summary NOT NULL
    // queue_today: same + created_at >= today
    // by_verification: grouped by VerificationStatus enum labels
    // by_country: top 20 countries with pending photos
    // total_users, users_today, flagged_usernames
});
User list endpoint pattern
php
// GET /api/admin/users — AdminUsersController@index
User::query()
    ->withCount('photos')
    ->with('roles:id,name')
    ->when($search, fn ($q) => $q->where(function ($q) use ($search) {
        $q->where('name', 'LIKE', "%{$search}%")
          ->orWhere('username', 'LIKE', "%{$search}%")
          ->orWhere('email', 'LIKE', "%{$search}%");
    }))
    ->when($trustFilter === 'trusted', fn ($q) => $q->where('verification_required', false))
    ->when($trustFilter === 'untrusted', fn ($q) => $q->where('verification_required', true))
    ->when($flagged, fn ($q) => $q->where('username_flagged', true))
    ->orderBy($sortBy, $sortDir)
    ->paginate($perPage);
// Response includes pending_photos count per user (is_public=true, verified < ADMIN_APPROVED)
Trust toggle pattern
php
// POST /api/admin/users/{user}/trust — superadmin only
// Sets verification_required = !trusted
// Does NOT retroactively approve existing photos
// No logAdminAction() — schema needs target_type for user-target actions
Approve-all pattern
php
// POST /api/admin/users/{user}/approve-all — superadmin only, max 500
// Same atomic WHERE as verify(): is_public=true AND verified < ADMIN_APPROVED
// Fires TagsVerifiedByAdmin per photo + rewardXpToAdmin()
Username moderation pattern
php
// PATCH /api/admin/users/{user}/username — superadmin only
// UpdateUsernameRequest: 3-30 chars, alphanumeric + hyphens, unique
// Clears username_flagged after edit
// username_flagged set to true when user self-changes username (in ApiSettingsController)

Routes

All under /api/admin/ prefix with admin middleware:

Photo review (admin + superadmin)
MethodRouteController Method
GET/api/admin/photosAdminQueueController (paginated queue)
POST/api/admin/verifyAdminController@verify
POST/api/admin/destroyAdminController@destroy
POST/api/admin/contentsupdatedeleteAdminController@updateDelete
POST/api/admin/reset-tagsAdminResetTagsController (reset to unverified)
GET/api/admin/get-countries-with-photosAdminController@getCountriesWithPhotos
Dashboard stats (admin + superadmin)
MethodRouteController Method
GET/api/admin/statsAdminStatsController (cached 60s)
User management
MethodRouteController MethodAuth
GET/api/admin/usersAdminUsersController@indexadmin
POST/api/admin/users/{user}/trustAdminUsersController@trustsuperadmin
POST/api/admin/users/{user}/approve-allAdminUsersController@approveAllsuperadmin
PATCH/api/admin/users/{user}/usernameAdminUsersController@updateUsernamesuperadmin
POST/api/admin/users/{user}/school-managerAdminUsersController@toggleSchoolManagersuperadmin
Deprecated routes (return 410 Gone)
RouteWasReplaced by
/api/admin/verify-tags-as-correctVerifyImageWithTagsControllerAdminController::verify()
/api/admin/find-photo-by-idFindPhotoByIdControllerAdminQueueController
/api/admin/get-next-image-to-verifyGetNextImageToVerifyControllerAdminQueueController
/api/admin/go-back-oneGoBackOnePhotoControllerAdminQueueController
Frontend routes
PathComponentPurpose
/admin/queueAdminQueue.vuePhoto review queue UI
/admin/usersAdminUsers.vueUser management + username moderation
/admin/redis/:userId?Redis.vueRedis analytics

Roles (Spatie, web guard)

IDRoleAccess
1superadminAll admin actions + trust management + username moderation + Horizon
2adminPhoto review (approve, edit, delete) + user list + stats
3helperTag editing only (bounding box annotation role)
Show full SKILL.md (406 more words)Show less
Superadmin-only actions
  • Toggle user trust (POST /api/admin/users/{user}/trust)
  • Bulk approve user's photos (POST /api/admin/users/{user}/approve-all)
  • Moderate usernames (PATCH /api/admin/users/{user}/username)
  • View Horizon dashboard

Common Mistakes

  • Using auth:api guard in tests. Admin middleware uses default (web) guard. Use actingAs($user) with no guard argument.
  • Forgetting /api prefix. Routes are in routes/api.php which adds /api prefix. Use /api/admin/verify, not /admin/verify.
  • Firing event for no-op approve. Only fire TagsVerifiedByAdmin when $affected > 0.
  • Hard deleting photos. Always $photo->delete() (soft delete). Never $photo->forceDelete().
  • Skipping MetricsService on delete. Must call deletePhoto() before soft delete if processed_at is set.
  • Using AddTagsTrait. Deleted (zero consumers after BoundingBoxController retirement). Use AddTagsToPhotoAction::run() (v5 action in App\Actions\Tags). CalculateTagsDifferenceAction also deleted — was only used by AddTagsTrait.
  • Approving school photos. is_public = false photos are excluded by the atomic WHERE. Don't add special handling.

Common Mistakes (Queue)

  • Using $photo->toArray() for queue response. The Location model's updatedAtDiffForHumans accessor crashes on null updated_at. Build the response array manually.
  • Forgetting whereNotNull('summary') in queue query. Untagged photos must not appear in the admin queue.
  • Not capping per_page. Always min($request->per_page, 50) to prevent abuse.

Common Mistakes (User Management)

  • Allowing admin (not superadmin) to toggle trust. Trust, approve-all, and username moderation are superadmin-only. Check hasRole('superadmin').
  • Expecting trust to auto-approve. trust() sets verification_required but does NOT approve existing photos. Use approveAll() separately.
  • Forgetting username_flagged lifecycle. User self-change → flagged=true. Superadmin edit → flagged=false. The flag drives the /api/admin/users?flagged=true filter.
  • Username validation. Via UpdateUsernameRequest: 3–30 chars, /^[a-zA-Z0-9-]+$/, unique. Don't duplicate validation in controller.
  • Stats cache key. admin:dashboard:stats — 60s TTL. Don't forget to invalidate if adding manual cache busting.

Phase Status

  • Phase 1: COMPLETE — 4 AdminController methods, 4 deprecated controllers retired (410), AdminResetTagsController v5-fixed
  • Phase 2: COMPLETE — Queue endpoint (AdminQueueController, 12 tests) + Queue UI (AdminQueue.vue with filters, tag editing, approve/edit/delete). Reuses existing tagging components.
  • Phase 3: COMPLETE — User management (AdminUsersController: list/search/filter, trust toggle, approve-all, username moderation, school manager toggle + invite email), dashboard stats (AdminStatsController), username flagging system. 51 total admin tests passing across 7 test files.
  • Bbox pipeline: RETIRED — BoundingBoxController returns 410 Gone on all 5 endpoints (/api/bbox/*). Was entirely v4 with broken TagsVerifiedByAdmin signature. Routes left wired for clean 410 responses.
  • Facilitator Queue: COMPLETE — Parallel system for school team teachers. Same 3-panel layout as admin queue, team-scoped. Reuses tagging v2 components (PhotoViewer, UnifiedTagSearch, ActiveTagsList). See readme/Teams.md and teams-safeguarding skill. Key differences from admin queue: status filter (pending/approved/all) instead of country filter, Revoke replaces Reset, member stats tab, safeguarding pseudonyms.
  • Phase 4: Future — AI pre-tagging, multi-admin claim queue, confidence scoring, batch approve endpoint, permission-granular access

© 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/admin-system of OpenLitterMap/openlittermap-web.

Open the folder on GitHubat commit ac688aa

Compare with similar skills

Admin System 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.

Admin System compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Admin System this skillOpenLitterMap/openlittermap-web134—~3.9kAutomated 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
  • 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
  • Leaderboard System

    OpenLitterMap/openlittermap-web

    LeaderboardController, Redis sorted sets for all-time XP rankings, per-user metrics rows for time-filtered rankings, rewardXpToAdmin, and leaderboard privacy.

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

Works with

Questions about Admin System

What does Admin System do?

AdminController, photo approval, tag editing, deletion, MetricsService integration, admin middleware, verification queue, and admin XP. Admin System is an agent skill from OpenLitterMap/openlittermap-web. AdminController, photo approval, tag editing, deletion, MetricsService integration, admin middleware, verification queue, and admin XP.

How do I install Admin System in Claude Code?

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

How do I install Admin System in Codex?

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

Can I use Admin System 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 admin-system -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/admin-system, .gemini/skills/admin-system, .github/skills/admin-system and .opencode/skills/admin-system in your project.

What does Admin System need to run?

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

Does Admin System 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 Admin System 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 Admin System use?

Admin System 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 Admin System use?

About 3.9k 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.

What are the alternatives to Admin System?

Skills that share tags, products or a category with Admin System: 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 Admin System?

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.