Agent skill

Teams Safeguarding

by OpenLitterMap in OpenLitterMap/openlittermap-web

Teams, school teams, team photos, approval flow, TeamPhotosController, privacy, ispublic, PhotoObserver, MasksStudentIdentity, and safeguarding.

GPL-3.0Auto-check passed

Install Teams Safeguarding

skills CLI
$ npx skills add OpenLitterMap/openlittermap-web --skill teams-safeguarding -a claude-code

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

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

At a glance

Teams, school teams, team photos, approval flow, TeamPhotosController, privacy, ispublic, PhotoObserver, MasksStudentIdentity, and safeguarding.

  • Works in 12 steps: School photos start private.… → All public queries use Photo::public()… → School teams must NOT be is_trusted.… → …
  • SKILL.md covers Key Files, Authorization, Invariants and Patterns, plus 1 more section
  • Calls php

What it does

Teams Safeguarding is an agent skill from OpenLitterMap/openlittermap-web. Teams, school teams, team photos, approval flow, TeamPhotosController, privacy, ispublic, PhotoObserver, MasksStudentIdentity, and safeguarding.

Its SKILL.md is about 3.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 and Vue.js. The repository describes itself as: https://opengeospatialdata.springeropen.com/articles/10.1186/s40965-018-0050-y. The licence is GPL-3.0.

Example prompts

  • “/teams-safeguarding”

Workflow steps

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

  1. School photos start private. PhotoObserver::creating() sets is_public = false when team.isSchool(). This is non-negotiable and cannot be…
  2. All public queries use Photo::public() or where('is_public', true). Missing this leaks school data to maps, clusters, exports, and points…
  3. School teams must NOT be is_trusted. Trust bypasses the teacher approval step entirely. School teams default to is_trusted = false.
  4. Teacher approval is atomic and idempotent. The WHERE is_public = false clause prevents double-processing of already-approved photos.
  5. Safeguarding uses deterministic numbering. Student names are masked based on team_user.id (creation order), not photo data or pagination.
  6. SchoolDataApproved broadcasts on a private channel (team.{id}). School team names (e.g., "St. X 1st Years 2026") must never appear on…
  7. Admin queue excludes school photos. is_public = false photos never appear in /api/admin/photos. School photos go through teacher approval…
  8. Participant photos: user_id = facilitator. MetricsService, XP, leaderboards are untouched. participant_id is for attribution only.
  9. Participant isolation. PhotoTagsRequest::authorize() checks $photo->participant_id === $participant->id to prevent cross-participant…
  10. hasParticipantSessions() returns participant_sessions_enabled && isSchool() — community teams can never have participant sessions.
  11. Privacy defaults. All new teams: leaderboards = false. School teams: safeguarding = true enforced, is_trusted = false enforced.
  12. SchoolManagerInvite email. Queued on role grant (both artisan command and admin toggle). Not sent on revoke.

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

    Shell commands in SKILL.md call:

    • 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

Teams Safeguarding loads about 3.4k tokens when it runs. Until then it costs about 41 tokens; SKILL.md has 819 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~41
When it runs · the whole SKILL.md, loaded when a task matches
~3.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). 819 words, ~3,402 tokens.

Download SKILL.mdSave it as .claude/skills/teams-safeguarding/SKILL.md (or your agent's skills folder).
name
teams-safeguarding
description
Teams, school teams, team photos, approval flow, TeamPhotosController, privacy, is_public, PhotoObserver, MasksStudentIdentity, and safeguarding.

Teams & Safeguarding

School teams enforce a private-by-default pipeline. Photos are invisible to the public until a teacher approves them. This protects minors and ensures data quality.

Key Files

Backend
  • app/Http/Controllers/Teams/TeamPhotosController.php — Photo listing (with new_tags), approval, CLO-based tag editing, map points, delete, revoke, member stats
  • app/Observers/PhotoObserver.php — Sets is_public = false on school team photo creation
  • app/Traits/MasksStudentIdentity.php — Masks student names as "Student N"
  • app/Models/Teams/Team.php — isSchool(), isLeader(), hasSafeguarding(), hasParticipantSessions()
  • app/Models/Teams/TeamType.php — team column: 'school' or 'community'
  • app/Models/Teams/Participant.php — Participant slot model (token, activation)
  • app/Http/Middleware/ParticipantAuth.php — Token auth middleware for participant workspace
  • app/Http/Controllers/Teams/ParticipantController.php — Facilitator CRUD for participant slots
  • app/Http/Controllers/Teams/ParticipantSessionController.php — Token validation + session entry
  • app/Http/Controllers/Teams/ParticipantPhotoController.php — Participant's own photos
  • app/Actions/Teams/CreateTeamAction.php — Team creation with school-specific fields
  • app/Http/Requests/Teams/CreateTeamRequest.php — Validation + school_manager role check
  • app/Mail/SchoolManagerInvite.php — Queued email sent when school_manager role is granted (two CTAs: Upload + Create Team)
  • app/Events/SchoolDataApproved.php — Private broadcast on team.{id} channel
  • app/Listeners/NotifyTeamOfApproval.php — Notifies team members after approval
Frontend (Facilitator Queue)
  • resources/js/views/Teams/FacilitatorQueue.vue — 3-panel layout (filters | PhotoViewer | tag editor)
  • resources/js/views/Teams/components/FacilitatorQueueHeader.vue — Navigation, action buttons (Approve/Save Edits/Revoke/Delete)
  • resources/js/views/Teams/components/FacilitatorQueueFilters.vue — Status toggle (pending/approved/all), date range
  • resources/js/views/Teams/components/TeamMembersList.vue — Per-student stats table
  • resources/js/stores/teamPhotos.js — Team photos Pinia store (CRUD, approve, revoke, delete, updateTags, memberStats)
  • resources/js/views/Teams/TeamsHub.vue — Main teams page (replaces TeamsLayout sidebar + TeamDashboard)
  • resources/js/views/Teams/TeamOverview.vue — Overview tab (stats, team info, all teams list)
  • resources/js/views/Teams/TeamSettingsTab.vue — Consolidated settings tab (privacy, edit, download, leave)
  • resources/js/views/Teams/components/ParticipantGrid.vue — Participant slot management grid
  • resources/js/views/Teams/ParticipantEntry.vue — Token entry page (/session)
  • resources/js/views/Teams/ParticipantWorkspace.vue — Participant upload/photos/tag workspace
Tests
  • tests/Feature/Teams/TeamPhotosTest.php — 35 tests (new_tags, CLO tag edits, member stats, safeguarding, delete, revoke, approval, map)
  • tests/Feature/Teams/ParticipantSessionTest.php — 28 tests (slots, token auth, photos, queue, metrics)

Authorization

Facilitator Queue access control
php
// TeamPhotosController authorization pattern:
// Team leader OR user with 'manage school team' permission
if (! $team->isLeader($user->id) && ! $user->can('manage school team')) {
    return response()->json(['success' => false, 'message' => 'unauthorized'], 403);
}
Roles involved
RoleHow assignedFacilitator access
Team leaderteam.leader = user_idYes — $team->isLeader($userId)
school_managerphp artisan school:assign-manager {email} or admin toggleYes — has manage school team permission

Critical: School managers are NOT admins. They cannot access /api/admin/* endpoints. The admin queue and facilitator queue are completely separate systems with no overlap.

Invariants

  1. School photos start private. PhotoObserver::creating() sets is_public = false when team.isSchool(). This is non-negotiable and cannot be overridden by the user. Community team photos respect the uploading user's public_photos default (users.public_photos, boolean, default true).
  2. All public queries use Photo::public() or where('is_public', true). Missing this leaks school data to maps, clusters, exports, and points API.
  3. School teams must NOT be is_trusted. Trust bypasses the teacher approval step entirely. School teams default to is_trusted = false.
  4. Teacher approval is atomic and idempotent. The WHERE is_public = false clause prevents double-processing of already-approved photos.
  5. Safeguarding uses deterministic numbering. Student names are masked based on team_user.id (creation order), not photo data or pagination.
  6. SchoolDataApproved broadcasts on a private channel (team.{id}). School team names (e.g., "St. X 1st Years 2026") must never appear on public channels.
  7. Admin queue excludes school photos. is_public = false photos never appear in /api/admin/photos. School photos go through teacher approval only.
  8. Participant photos: user_id = facilitator. MetricsService, XP, leaderboards are untouched. participant_id is for attribution only.
  9. Participant isolation. PhotoTagsRequest::authorize() checks $photo->participant_id === $participant->id to prevent cross-participant tagging (all photos share user_id = facilitator).
  10. hasParticipantSessions() returns participant_sessions_enabled && isSchool() — community teams can never have participant sessions.
  11. Privacy defaults. All new teams: leaderboards = false. School teams: safeguarding = true enforced, is_trusted = false enforced.
  12. SchoolManagerInvite email. Queued on role grant (both artisan command and admin toggle). Not sent on revoke.
Show full SKILL.md (296 more words)Show less

Patterns

PhotoObserver — automatic privacy
php
// app/Observers/PhotoObserver.php
public function creating(Photo $photo): void
{
    if (! $photo->team_id) {
        return;
    }

    $team = Team::find($photo->team_id);

    if ($team && $team->isSchool()) {
        $photo->is_public = false;
    }
}
Teacher approval flow
php
// TeamPhotosController::approve()
DB::transaction(function () {
    // Atomic update — WHERE is_public = false prevents double-processing
    Photo::whereIn('id', $approvedIds)
        ->where('is_public', false)
        ->update([
            'is_public' => true,
            'verified' => VerificationStatus::ADMIN_APPROVED->value,
            'team_approved_at' => now(),
            'team_approved_by' => $user->id,
        ]);

    // Fire metrics for each newly-approved photo
    foreach ($affectedPhotos as $photo) {
        event(new TagsVerifiedByAdmin(
            photo_id: $photo->id,
            user_id: $photo->user_id,
            country_id: $photo->country_id,
            state_id: $photo->state_id,
            city_id: $photo->city_id,
            team_id: $photo->team_id
        ));
    }

    event(new SchoolDataApproved($team, $teacher, $count));
});
Photo scopes for team queries
php
// All public photos (excludes unapproved school photos + soft-deleted)
Photo::public()  // ->where('is_public', true)

// All photos for a team (private view — members see everything)
Photo::forTeam($teamId)

// Pending teacher approval
Photo::pendingTeamApproval($teamId)
// ->where('team_id', $teamId)->where('is_public', false)
//   ->where('verified', '>=', VERIFIED)->whereNull('team_approved_at')

// Already approved by teacher
Photo::teamApproved($teamId)
// ->where('team_id', $teamId)->whereNotNull('team_approved_at')
Safeguarding identity masking
php
// MasksStudentIdentity trait
// Builds stable mapping: user_id -> "Student N" from team_user.id order
if ($team->hasSafeguarding() && !$team->isLeader($viewer->id)
    && !$viewer->hasPermissionTo('view student identities')) {
    // Mask names to "Student 1", "Student 2", etc.
}
Team model key methods
php
$team->isSchool()         // type_name === 'school'
$team->isLeader($userId)  // leader === $userId
$team->hasSafeguarding()  // (bool) safeguarding
Database indexes for team photo queries
sql
-- Approval queue: team_id + is_public + verified + created_at
INDEX photos_team_approval_idx ON photos(team_id, is_public, verified, created_at)

-- Team photo listing
INDEX photos_team_public_idx ON photos(team_id, is_public)

-- Public queries
INDEX photos_public_verified_idx ON photos(is_public, verified)
Teacher delete flow
php
// TeamPhotosController::destroy()
// DELETE /api/teams/photos/{photo}?team_id=X
// 1. Check authorization (leader or 'manage school team')
// 2. If processed: MetricsService::deletePhoto() → reverse metrics
// 3. DeletePhotoAction → S3 cleanup
// 4. $photo->delete() → soft-delete
// 5. Decrement photo owner's XP
Teacher revoke flow
php
// TeamPhotosController::revoke()
// POST /api/teams/photos/revoke { team_id, photo_ids? | revoke_all? }
// 1. Check authorization (leader or 'manage school team')
// 2. Query: is_public = true AND team_approved_at IS NOT NULL
// 3. For each processed photo: MetricsService::deletePhoto()
// 4. Atomic update: is_public=false, verified=VERIFIED, clear approval timestamps
// Idempotent: already-private photos filtered by WHERE clause
Safeguarding on global map (PointsController)
php
// PointsController::formatFeatures()
// After building properties array:
if ($photo->team_id && $photo->team && $photo->team->hasSafeguarding()) {
    $properties['name'] = null;
    $properties['username'] = null;
    $properties['social'] = null;
}
// popup.js shows "Contributed by [Team Name]" when name/username are null but team exists
Facilitator Queue — CLO-based tag editing
php
// TeamPhotosController::updateTags()
// PATCH /api/teams/photos/{photo}/tags
// Accepts CLO payload: { tags: [{ category_litter_object_id, litter_object_type_id?, quantity, picked_up?, materials?, brands?, custom_tags? }] }
DB::transaction(function () use ($request, $photo, $user) {
    $photo->photoTags()->each(function ($tag) {
        $tag->extraTags()->delete();
        $tag->delete();
    });
    $photo->update(['summary' => null, 'xp' => 0, 'verified' => VerificationStatus::UNVERIFIED->value]);
    app(AddTagsToPhotoAction::class)->run($user->id, $photo->id, $request->tags);
});
Facilitator Queue — new_tags response format
php
// TeamPhotosController::index() and show() return new_tags
// Same format as UsersUploadsController::getNewTags() and AdminQueueController
// Includes: category_litter_object_id, litter_object_type_id, category, object, extra_tags
Member stats endpoint
php
// TeamPhotosController::memberStats()
// GET /api/teams/photos/member-stats?team_id=X
// Returns per-student: total_photos, pending, approved, litter_count, last_active
// Applies safeguarding pseudonyms via MasksStudentIdentity trait
// Leader or 'manage school team' permission required
Keyboard shortcuts (FacilitatorQueue.vue)
KeyAction
AApprove current photo
DDelete (with confirmation)
ESave edits (when modified)
RRevoke approval (with confirmation)
S / K / ArrowRightNext photo
J / ArrowLeftPrevious photo
EscapeClear search
Controllers/queries that must use is_public = true
  • Maps/GlobalMapController — global map points
  • HomeController — homepage stats
  • CommunityController — community page
  • Leaderboard/LeaderboardController — leaderboards
  • DisplayTagsOnMapController — tag map
  • History/GetPaginatedHistoryController — public history
  • Points/PointsController — points API
  • MapController — map clusters
  • User/ProfileController — public profile

Common Mistakes

  • Querying photos without Photo::public() scope on public-facing endpoints. This leaks school team photos.
  • Setting is_trusted = true on school teams. Trusted teams bypass teacher approval. School teams must always be is_trusted = false.
  • Broadcasting school data on public channels. SchoolDataApproved must use private channel team.{id}.
  • Using non-deterministic ordering for safeguarding masks. Masks must be based on team_user.id (join order), not photo data.
  • Forgetting PhotoObserver when creating photos in tests. The observer auto-fires on Photo::create(). If testing non-school behavior, ensure team_id is null or team is community type.
  • Double-approving photos. The WHERE is_public = false clause in the approval query prevents this, but don't remove it.
  • Allowing per-photo visibility toggle on school photos. PATCH /api/v3/photos/{id}/visibility must return 403 for photos belonging to a school team. School photo privacy is teacher-controlled only (approve/revoke), never user-controlled.
  • Using old category/object string format in updateTags. TeamPhotosController::updateTags() uses CLO format (same as PhotoTagsController::update). Payload uses category_litter_object_id, NOT category/object key strings.
  • Forgetting new_tags in team photo responses. Both index() and show() must include new_tags with category_litter_object_id, litter_object_type_id, and extra_tags for the facilitator queue tag editor to work.

© 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/teams-safeguarding of OpenLitterMap/openlittermap-web.

Open the folder on GitHubat commit ac688aa

Compare with similar skills

Teams Safeguarding 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.

Teams Safeguarding compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Teams Safeguarding this skillOpenLitterMap/openlittermap-web134—~3.4kAutomated safety check: PassGPL-3.0
Tailwindcss Developmentanonaddy/anonaddy4.9k10 repos~865Automated safety check: PassMIT
Kill AI Slopyetone/kill-ai-slop1.3k—~1.4kAutomated safety check: PassApache-2.0
Livewire Developmentcoollabsio/coolify63k—~964Automated safety check: PassMIT
Livewire Developmentyungifez/skuul4091 repos~1.9kAutomated safety check: PassMIT
CurdJaguarJack/catch-admin935—~3.3kAutomated safety check: PassApache-2.0

Similar skills

  • 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
  • Kill AI Slop

    yetone/kill-ai-slop

    Find and remove AI slop — the generic, machine-default visual and copy tics of vibe-coded products — from a web project.

    1.3k GitHub stars~1.4k tokensUpdated 24 days ago
    Frontend & DesignAuto-check passed
  • Livewire Development

    coollabsio/coolify

    A skill your agent uses for any task or question involving Livewire.

    63k GitHub stars~964 tokensUpdated today
    Backend & APIsAuto-check passed
  • Livewire Development

    yungifez/skuul

    A skill your agent uses for any task or question involving Livewire.

    409 GitHub starsUsed in 1 repo~1.9k tokens
    Backend & APIsAuto-check passed
  • Curd

    JaguarJack/catch-admin

    Generates complete CRUD module from database table definition.

    935 GitHub stars~3.3k tokensUpdated 24 days ago
    Documents & OfficeAuto-check passed
  • Configure Nightwatch

    trypostit/trypost

    Configures Laravel Nightwatch data collection, sampling rates, filtering rules, and redaction policies.

    685 GitHub stars~2.7k tokensUpdated yesterday
    Backend & APIsAuto-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 25 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 25 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 25 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 25 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 25 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 25 days ago
    Auto-check passed

Works with

Questions about Teams Safeguarding

What does Teams Safeguarding do?

Teams, school teams, team photos, approval flow, TeamPhotosController, privacy, ispublic, PhotoObserver, MasksStudentIdentity, and safeguarding. Teams Safeguarding is an agent skill from OpenLitterMap/openlittermap-web. Teams, school teams, team photos, approval flow, TeamPhotosController, privacy, ispublic, PhotoObserver, MasksStudentIdentity, and safeguarding.

How do I install Teams Safeguarding in Claude Code?

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

How do I install Teams Safeguarding in Codex?

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

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

What does Teams Safeguarding need to run?

Going by SKILL.md and its folder, Teams Safeguarding needs the command-line tools its instructions call (php).

Does Teams Safeguarding 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 Teams Safeguarding 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 Teams Safeguarding use?

Teams Safeguarding 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 Teams Safeguarding use?

About 3.4k tokens (SKILL.md is roughly 14k 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 Teams Safeguarding?

Skills that share tags, products or a category with Teams Safeguarding: Tailwindcss Development (anonaddy/anonaddy, 4.9k stars), Kill AI Slop (yetone/kill-ai-slop, 1.3k stars), Livewire Development (coollabsio/coolify, 63k stars) and Livewire Development (yungifez/skuul, 409 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Teams Safeguarding?

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.