Skip to content
Back to skills

Repo Homepage Set

ASecurity

Audit and set the GitHub repo homepage URL — the link on the repo card's "About" panel and every search result. Detects candidates from docs sites, registries, and demos; applies via gh repo edit after approval. Sub-skill of repo-seo-curator.

  • 2 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 19, 2026
ai-agentspythonrustgobashnodegitdocumentation

Works with

  • cli

Security analysis

A92/100
  • mediumUses curl or wget to download content

Pro shows the line behind each finding and how to fix it

Scanned September 19, 2026

npx -y skills add jamestexas/agents --skill repo-homepage-set --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Repo Homepage Set?

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

Security grade badge for Repo Homepage Set
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/jamestexas-repo-homepage-set/badge)](https://www.skillsdirectory.com/skills/jamestexas-repo-homepage-set)

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: repo-homepage-set
description: Audit and set the GitHub repo homepage URL — the link on the repo card's "About" panel and every search result. Detects candidates from docs sites, registries, and demos; applies via gh repo edit after approval. Sub-skill of repo-seo-curator.
allowed-tools: Read Glob Grep Bash(gh repo view *) Bash(jq *) Bash(curl *)
argument-hint: <owner/repo> [<owner/repo> ...] [--dry-run] [--apply]
---

<!-- Author: jamestexas — drafted by claude-opus-4-7 (2026-05-16) -->

# /repo-homepage-set — GitHub Repo Homepage URL

Set the `homepageUrl` field on a GitHub repository. This is the small link icon on the repo card's "About" panel.

## Arguments

`$ARGUMENTS`

- **`<owner/repo>`** — one or more target repos. Defaults to the repo containing the current working directory.
- **`--dry-run`** *(default)* — propose only.
- **`--apply`** — present proposal, prompt for approval, then write via `gh repo edit`.

## What this solves

The homepage URL is the *one outbound link* GitHub gives a repository card. Setting it sends interested readers somewhere useful instead of nowhere. Surfaces:

- Repo's About panel (top right of the repo page)
- GitHub search results (shown below the description)
- Topic browser cards
- Some integrations (e.g. Slack unfurls)

Most of the user's public repos have **no homepage set**, which means a visitor who's interested has no obvious "next step."

## Candidate sources, by priority

For each repo, the homepage should be the *most useful* place a stranger could go after the README. In priority order:

1. **Dedicated docs site** — e.g. `docs.mache.dev`, `https://mache.io`
2. **Published package page** — `crates.io/crates/<name>`, `npmjs.com/package/<name>`, `pypi.org/project/<name>`
3. **Live demo / hosted app** — for things that have a runnable UI
4. **Org homepage** — for repos that are part of a named ecosystem (e.g. `agentic-research/*` → some `agentic-research.org` URL if one exists)
5. **Parent project page** — for sub-components, point at the parent's docs
6. **Leave unset** — when none of the above apply, an unset homepage is better than a guessed one

## Hard rules

- **Never point at the GitHub repo itself.** That's where the visitor already is. Setting `homepageUrl` to `https://github.com/owner/repo` is a no-op that wastes a click.
- **Never point at a 404 or a placeholder.** If the docs site is "coming soon," leave the field empty.
- **Prefer HTTPS.** Convert `http://` to `https://` if both work.
- **No trailing slashes** unless the URL canonically has one.
- **No query strings or anchors** — the homepage should be a stable landing surface.
- **No URL shorteners** — bare domains only. Tracking links here are user-hostile.

## Workflow

### Phase 1: Inventory

```bash
gh repo view <owner/repo> --json name,description,homepageUrl,visibility,isFork,isArchived,repositoryTopics
```

Skip with a printed reason if `isFork` or `isArchived`.

### Phase 2: Signal gathering

For each repo, look for candidates in this order:

1. **README** — first search for an obvious "Documentation:" or "Docs:" link near the top. Many READMEs already point at their docs site, you just need to detect it.
2. **Package manifests**:
   - `Cargo.toml` → `documentation = "..."` or `homepage = "..."` fields
   - `package.json` → `"homepage": "..."` field (note: npm uses this same field name)
   - `pyproject.toml` → `[project.urls]` table, look for `Documentation` or `Homepage`
3. **Probe registries** for published packages — for each detected package name:
   - Rust: `curl -fsI https://crates.io/crates/<name>` (200 = exists)
   - Node: `curl -fsI https://www.npmjs.com/package/<name>`
   - Python: `curl -fsI https://pypi.org/project/<name>/`
4. **Search the README for explicit URLs** — `https://*.dev`, `https://*.io`, `https://docs.*`
5. **Check the org `.github` repo** for an org-level homepage
6. **Check repositoryTopics for ecosystem hints** — `agentic-research`, `art-ecosystem` may map to an ecosystem page

### Phase 3: Verify candidates

For each candidate URL, run a quick health check:

```bash
curl -fsLI "<url>" -o /dev/null -w "%{http_code} %{url_effective}\n" --max-time 5
```

- **200** — usable
- **3xx ending at 200** — usable; record the final URL
- **4xx / 5xx / timeout** — discard

Never propose a URL that fails the health check.

### Phase 4: Proposal

```
## <owner/repo>

Current homepage: <url or "(not set)">

Candidates found:
  1. https://docs.mache.dev          [200 OK]                   ← recommended
  2. https://crates.io/crates/mache  [200 OK]
  3. https://github.com/agentic-research  [200 OK, org page]

Recommendation: https://docs.mache.dev
  Why: dedicated docs site, README references it as primary entry point.

Rejected:
  - https://mache-demo.dev — returned 404
  - https://github.com/agentic-research/mache — same as the repo itself
```

If no candidates pass health check, **propose leaving it unset** and report what was tried.

### Phase 5: Approval

- `--dry-run` (default): stop. Print hint to re-run with `--apply`.
- `--apply`: print "Apply N homepage changes? (yes/no)" and wait.

### Phase 6: Apply

```bash
gh repo edit "<owner>/<repo>" --homepage "<url>"
```

Verify by re-reading:

```bash
gh repo view "<owner>/<repo>" --json homepageUrl
```

### Phase 7: Report

```
Applied:
  agentic-research/mache           → https://docs.mache.dev
  agentic-research/cloister        → https://crates.io/crates/cloister
Skipped:
  agentic-research/cloister-fork   — fork, skipped
  agentic-research/x-ray           — no usable candidates, left unset
Failed:
  agentic-research/foo             — gh edit returned: <error>
```

## Examples

```
/repo-homepage-set agentic-research/mache
→ dry-run proposal

/repo-homepage-set agentic-research/{mache,rosary,ley-line-open} --apply
→ proposal for three, prompts, writes

/repo-homepage-set
→ uses current working directory's repo
```

## Important rules

- **Default to `--dry-run`.** The homepage is publicly visible immediately.
- **Verify before proposing.** Never propose a URL you haven't health-checked.
- **If unsure, leave it unset.** An unset homepage is honest. A wrong one is worse than nothing.
- **One field per pass.** Don't bundle with topic or description changes.
- **Don't touch forks or archived repos** unless explicitly named.

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.