Skip to content
Back to skills

Detect Webfinger

ASecurity

Detects whether a codebase implements the WebFinger protocol endpoint (RFC 7033). Use this skill whenever the user asks whether a repo, project, or codebase supports WebFinger, has a /.well-known/webfinger endpoint, implements the JRD response format, or handles acct: URI lookups. Also trigger when the user is auditing a codebase for ActivityPub or federated identity support, since WebFinger is a common dependency.

  • 9 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added May 27, 2026
developmentpythongorubyphpnodeexpressdjangorailsspringgit

Security analysis

A100/100

Scanned May 27, 2026

npx -y skills add reiver/vibefed --skill detect-webfinger --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Detect Webfinger?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Detect Webfinger
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/reiver-detect-webfinger/badge)](https://www.skillsdirectory.com/skills/reiver-detect-webfinger)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: detect-webfinger
description: >
  Detects whether a codebase implements the WebFinger protocol endpoint
  (RFC 7033). Use this skill whenever the user asks whether a repo, project,
  or codebase supports WebFinger, has a /.well-known/webfinger endpoint,
  implements the JRD response format, or handles acct: URI lookups. Also
  trigger when the user is auditing a codebase for ActivityPub or federated
  identity support, since WebFinger is a common dependency.
---

# Detect WebFinger Endpoint

WebFinger (RFC 7033) is a protocol that allows discovery of information about
people or resources using a standard URL pattern: `/.well-known/webfinger`.
It is commonly used by ActivityPub implementations (Mastodon, etc.) and
federated identity systems.

## Step 1 — Fast Signal Search

Search the codebase for the string `webfinger` (case-insensitive) across all
source files. This single search catches the vast majority of implementations.

```
Search query: webfinger
Case: insensitive
Scope: all source files (exclude: node_modules, vendor, .git, dist, build)
```

If **no matches** are found, proceed to Step 2 (fallback search).
If **matches are found**, proceed to Step 3 (classify results).

## Step 2 — Fallback Search (if Step 1 found nothing)

Some implementations register WebFinger indirectly under a generic
well-known handler. Search for:

- `/.well-known/` (route registration)
- `well_known` (snake_case variant common in Python/Ruby)
- `jrd+json` (the WebFinger response MIME type — very specific signal)
- `acct:` (the URI scheme WebFinger uses for user lookups)

If any of these match, include the files in Step 3 classification.
If still nothing — report: **WebFinger not detected**.

## Step 3 — Classify Each Match

For each file containing a match, determine which category it falls into:

### Category A — Implementation (confirmed)
The file contains executable code that:
- Registers a route or handler at `/.well-known/webfinger`
- Processes a `resource` query parameter
- Returns a JSON response (JRD format) with a `subject` field

### Category B — Library/Framework delegation
The file imports or references a WebFinger library (e.g. `node-webfinger`,
`ostatus`, `activitypub`, `webfinger-rack`, `go-webfinger`) without directly
defining the handler. The endpoint likely exists but is provided by the
dependency.

### Category C — Reference only (not an implementation)
The match appears in:
- Comments or documentation strings
- Test fixtures or mock data
- Configuration files referencing an external WebFinger server
- README or markdown files

### Category D — Ambiguous
The file handles `/.well-known/` generically and may or may not route
WebFinger requests. Read the surrounding logic to determine.

## Step 4 — Check for Framework-Specific Patterns

If the codebase language/framework is identifiable, also look for these
common patterns:

| Framework | Pattern to look for |
|---|---|
| Express / Node | `app.get('/.well-known/webfinger'` |
| Rails | `get '/.well-known/webfinger'` in routes.rb |
| Django | `path('.well-known/webfinger'` in urls.py |
| Spring Boot | `@GetMapping("/.well-known/webfinger")` |
| Mastodon / ActivityPub | Check for `webfinger_controller` or `webfinger_resource` |
| PHP | `$_GET['resource']` near a `well-known` path check |

## Step 5 — Report Results

Provide a clear summary with:

1. **Verdict**: WebFinger detected / Not detected / Possibly delegated to library
2. **Evidence**: List the specific files and line numbers (if available) that
   contain the implementation
3. **Implementation style**: Direct route handler / Library delegation /
   Framework built-in
4. **Completeness notes** (if applicable): e.g. "Handler found but no `rel`
   parameter filtering detected" or "Missing `application/jrd+json` content
   type header"
5. **Caveats**: e.g. "WebFinger may be handled upstream by a reverse proxy
   (nginx/caddy) and never reach the application code"

## What a Complete WebFinger Implementation Looks Like

For reference, a complete implementation handles:
- Route: `GET /.well-known/webfinger`
- Required query param: `resource` (e.g. `acct:user@example.com`)
- Optional query param: `rel` (filters which link types to return)
- Response Content-Type: `application/jrd+json`
- Response body: JSON with at minimum a `subject` field, typically also
  `links` and/or `aliases`
- HTTP 404 if the resource is not found
- HTTP 400 if the `resource` param is missing

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.