Skip to content
cccskills
FreePublished on GitHub

canary-token-system

Manage the canary token honeypot system for detecting security scanning

The English summary is being prepared. Showing the original description.

Works withDiscordSlack
See how to install

Files included (1)

  • SKILL.md2.1 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Canary Token System Skill

Manage the canary token honeypot system that detects automated security scanners and penetration testing tools.

When to use this skill

  • Adding new canary tokens
  • Changing canary token paths or secrets
  • Investigating canary token alerts
  • Modifying notification channels

How it works

The canary system plants fake secrets in predictable locations that scanners will find and try to use. When a scanner uses a token, it triggers a notification.

Architecture

public/.well-known/security.txt → contains canary token
API route → validates token → sends notification
src/lib/canary/notify.ts → notification logic (Slack, Discord, Email)

Files

FilePurpose
public/.well-known/security.txtCanary token location
src/lib/canary/notify.tsNotification dispatch (escapeHtml for XSS prevention)
src/app/api/canary/route.tsAPI endpoint for token validation
.github/codeql/codeql-config.ymlCodeQL exclusions for intentional honeypot code

Adding a new canary token

  1. Choose a location scanners will find (e.g., public/robots.txt, public/.env.example)
  2. Add the token string to the file
  3. Add a route handler to validate the token
  4. Add CodeQL exclusion for the path
  5. Test by using the token yourself

Changing notification channels

Edit src/lib/canary/notify.ts. Current channels:

  • Slack: Uses CANARY_SLACK_WEBHOOK env var
  • Discord: Uses CANARY_DISCORD_WEBHOOK env var
  • Email: Uses CANARY_EMAIL env var (via Resend)

Security notes

  • All user-controlled HTML is escaped with escapeHtml() before rendering
  • CodeQL exclusions are in .github/codeql/codeql-config.yml
  • Never log real secrets in CI output
  • Tokens should be long, random strings (32+ chars)

Checklist

  • Token is in a predictable scanner location
  • Notification channel is configured (env vars)
  • CodeQL exclusion added for the path
  • HTML escaping in notification logic
  • Token validated correctly

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Audit and fix accessibility issues across the portfolio to ensure WCAG 2.1 AA compliance.

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 22, 2026

Creates a new blog post document in the Sanity studio. Use when the user wants to write a blog post, publish an article, or schedule a future post.

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 22, 2026

Creates a new certification document in the Sanity studio. Use when the user wants to add a credential, certificate, or professional accreditation to the Certifications collection.

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 22, 2026

Adds a new skill MD file to the studio's skills collection. Use when the user wants to author a new step-by-step recipe for the studio's in-app Skills tool or the .agents mirror.

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 22, 2026

Creates a new project document in the Sanity studio. Use when the user wants to add a new portfolio project, a case study, or a work sample to the Projects collection.

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 22, 2026

Creates a new experience document in the Sanity studio. Use when the user wants to add a job, role, internship, or work history entry to the Experience collection.

The English summary is being prepared. Showing the original description.

PP-Namias/Portfolio2Updated Oct 22, 2026

See all skills by PP-Namias

Report a problem with this skill