firebase-publish

firebase-publish is a command for Claude Code from Pierry/harness-kit. It costs 20 tokens per session (971 once invoked), scanned A, original, MIT.

A command that publishes a static website to Firebase Hosting, a service for serving websites online. It can create or reuse a Firebase project and deploy the site.

In plain words
What is it for?
Use it to deploy the current static site and receive its live public URL.
Why use it?
It removes the manual setup and upload work needed to make a static site publicly available. It also checks important login and project conditions before deployment.

Command for Claude Code

Part of the harness-kit plugin — 14 skills, 17 commands, 4 agents, 4 hooks shipped together

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add commands/pierry/harness-kit/firebase-publish
Clone the repo
git clone --depth 1 https://github.com/Pierry/harness-kit

Made for: Claude Code.

Or install harness-kit, the plugin that ships this one along with the rest of its 14 skills, 17 commands, 4 agents, 4 hooks.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for firebase-publish

README.md
[![agentmods](https://agentmods.dev/badge/commands/pierry/harness-kit/firebase-publish.svg)](https://agentmods.dev/commands/pierry/harness-kit/firebase-publish)
Your own site
<a href="https://agentmods.dev/commands/pierry/harness-kit/firebase-publish"><img src="https://agentmods.dev/badge/commands/pierry/harness-kit/firebase-publish.svg" alt="Measured on agentmods" height="20"></a>
Per session 20 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 971 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 1 finding. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00020 $0.00971
Opus 5 $0.00010 $0.00485
Sonnet 5 $0.00004 $0.00194
Haiku 4.5 $0.00002 $0.00097

Measured 3d ago against content hash 3197f7f6cf44, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

firebase-publish scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 3d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Makes network callslowCapability

Not a fault in itself. Listed so you know the mod talks to something, and to what.

GOTCHA: when `public` is the repo root, `**/.*` does NOT exclude a dotdir's non-dot children, so `.claude/**` would leak PRDs/PRPs/internals publicly. Always ignore `.claude/**`, `.git/**`, and `*.md` explicitly. After d
.claude/commands/sse/firebase-publish.md · 67 lines

How it starts

The opening of the file, as written. The whole thing — 67 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Publish static site to Firebase Hosting. Create project if missing, else reuse. Deploy.

Print header card before deploy, footer card after live URL returns. Format: .claude/scripts/stage-card.md.

Hard safety rules

  • NEVER delete. No projects:delete, no hosting:sites:delete, no hosting:channel:delete, no resource removal. If wrong project made, tell user to delete in console. Do not attempt.
  • Create AT MOST ONE project per run. After projects:create, re-check firebase projects:list. Confirm exists. Do NOT loop create on ambiguous output. CLI prints Your Firebase project is ready! on success, not Success. Match loose, verify by list, stop after one.
  • Outward-facing publish. Live site = public. Confirm PROJECT_ID with user before create unless user passed it as arg.

Inputs

  • PROJECT_ID. user arg, else derive from feature_id/repo slug, propose, confirm. Globally unique, lowercase, 6-30 chars.
  • SITE_ID. default = PROJECT_ID.

Preconditions

  1. firebase --version exists. Missing → tell user npm i -g firebase-tools. Stop.
  2. firebase login:list. Not logged in → tell user run ! firebase login. Stop. Never write creds.

Steps

  1. Resolve PROJECT_ID (above).
  2. firebase projects:list. PROJECT_ID present → reuse, skip create. Absent → firebase projects:create <PROJECT_ID> --display-name "<name>". Then re-run projects:list, confirm present. Not present → stop, surface error, ask user.
  3. Pin default: write .firebaserc {"projects":{"default":"<PROJECT_ID>"}} if absent or different.
  4. Ensure firebase.json hosting block exists. Missing → write minimal:
    { "hosting": { "public": ".", "ignore": ["firebase.json", ".firebaserc", ".firebase/**", ".git/**", "**/.git/**", ".gitignore", ".claude/**", "**/.claude/**", "**/node_modules/**", "*.md"], "cleanUrls": true } }
    
    Confirm public points at the dir holding index.html. GOTCHA: when public is the repo root, **/.* does NOT exclude a dotdir's non-dot children, so .claude/** would leak PRDs/PRPs/internals publicly. Always ignore .claude/**, .git/**, and *.md explicitly. After deploy, verify the file count is small and curl -o /dev/null -w '%{http_code}' <url>/.claude/... returns 404.
  5. Stage first: firebase hosting:channel:deploy preview --project <PROJECT_ID> --expires 7d. Capture preview URL. Show user.
  6. Promote: firebase deploy --only hosting --project <PROJECT_ID>.
  7. Live URLs: https://<SITE_ID>.web.app and https://<SITE_ID>.firebaseapp.com.
  8. Verify no leak: deploy log file count should match the site (small). curl -s -o /dev/null -w '%{http_code}' https://<SITE_ID>.web.app/.claude/... must return 404, home must return 200. Same check on the preview channel URL. Leak found → fix ignore, redeploy live AND preview.

Read the full file on GitHub · 67 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 3d ago First seen · 67 lines · 20 tokens per session scan A 3197f7f6cf44

Subscribe to this mod's changes

firebase-publish is a command published in the GitHub repository Pierry/harness-kit (3 stars, last pushed 1mo ago), licensed MIT. It adds 20 tokens to every session and 971 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.