star-prompt

star-prompt is a skill for Claude Code from tellang/triflux. It costs 67 tokens per session (2,030 once invoked), scanned A, original, MIT.

A setup change that adds a GitHub star request to a command-line tool's installation flow. GitHub stars are public bookmarks users can give to repositories on GitHub.

In plain words
What is it for?
Use it when adding a star request after setup or post-installation. It supports a blocking prompt by default and a softer confirmation mode through the --soft option.
Why use it?
It gives users a prompt to star the repository after setup, while handling non-interactive environments and cases where GitHub authentication or the command-line tool is unavailable.

Skill for Claude Code

Written for Claude Code: shipped in a Claude Code plugin. Also seen: names the AskUserQuestion tool.

Part of the triflux plugin — 29 skills, 1 agent, 12 hooks shipped together

Good fit Use it when adding a star request after setup or post-installation. It supports a blocking prompt by default and a softer confirmation mode through the --soft option.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/tellang/triflux/star-prompt
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.

Any agent
npx skills add tellang/triflux --skill star-prompt
Clone the repo
git clone --depth 1 https://github.com/tellang/triflux

Made for: Claude Code.

Or install triflux, the plugin that ships this one along with the rest of its 29 skills, 1 agent, 12 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 star-prompt

README.md
[![agentmods](https://agentmods.dev/badge/skills/tellang/triflux/star-prompt/github.svg)](https://agentmods.dev/skills/tellang/triflux/star-prompt)
Your own site
<a href="https://agentmods.dev/skills/tellang/triflux/star-prompt"><img src="https://agentmods.dev/badge/skills/tellang/triflux/star-prompt/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for star-prompt

Your own site · 80×15
<a href="https://agentmods.dev/skills/tellang/triflux/star-prompt"><img src="https://agentmods.dev/badge/skills/tellang/triflux/star-prompt.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 67 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 2,030 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 1 finding. A grade says what 26 rules found in the file — not that it is safe. Third-party audits
  • NVIDIA SkillSpector pass 7 Sept 2026
How audits are shown
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.1 $0.00067 $0.02030
Opus 5 $0.00034 $0.01015
Sonnet 5 $0.00013 $0.00406
Haiku 4.5 $0.00007 $0.00203

Measured 12d ago against content hash 9951798db23c, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-12, from the pricing page.

Security

Grade A, and why

star-prompt 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 12d 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.

Runs shell commandslowCapability

Expected in a hook, worth knowing in a rule or an instructions file.

import { execFileSync } from "node:child_process";
packages/triflux/skills/star-prompt/SKILL.md · 221 lines

How it starts

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

tfx-star-prompt — GitHub Star Request Prompt

CLI 도구의 setup/postinstall 완료 시점에 GitHub 리포 스타 요청을 추가한다. 기본 모드는 aggressive(모달 차단형)이며, --soft를 전달하면 기존 부드러운 confirm 모드로 폴백한다. CI/비인터랙티브 환경에서는 자동으로 soft 모드로 강등한다.

동작 흐름

detectInteractive() ─── false → soft 모드 강제
       │
       ✓ true
       │
gh --version ─── 실패 → URL만 표시
       │
       ✓ 설치됨
       │
gh auth status ─── 실패 → URL만 표시
       │
       ✓ 인증됨
       │
gh api user/starred/{owner}/{repo}
       ├─ 성공 → "이미 함께하고 계시군요. ⭐" + markPrompted()
       ├─ 404  → 미스타로 진행
       └─ 그 외 에러 → 프롬프트 없이 URL만 표시 (마커 남기지 않음)
       │
       ✗ 미스타
       │
이미 프롬프트 본 유저(마커 존재)면 즉시 스킵
       │
aggressive 기본: AskUserQuestion([예, 누를게요] / [아니오]) 블로킹 선택
soft(--soft): confirm("⭐ 하나가 큰 차이를 만듭니다.")
       │
       ├─ 아니오 → aggressive: 안내 + URL / soft: URL만 + markPrompted()
       └─ 예
       │
       Y
       │
gh api -X PUT /user/starred/{owner}/{repo}
       ├─ 성공 → aggressive: "감사합니다! 여러분의 ⭐가 프로젝트를 성장시킵니다."
       │         soft: "함께해 주셔서 감사합니다. ⭐"
       └─ 실패 → URL 폴백
       │
모든 프롬프트 완료 경로는 markPrompted() 호출

구현 패턴

유틸리티 계약

  • ok(message): 성공 메시지 출력(초록/강조 톤)
  • info(message): 일반 안내 메시지 출력
  • warn(message): 경고/실패 폴백 메시지 출력
  • confirm(message, defaultValue): soft 모드용 Y/n 확인
  • askUserQuestion({ question, options }): aggressive 모달 선택 UI
    • 옵션은 정확히 [예, 누를게요], [아니오]
    • 선택 전까지 흐름을 블로킹한다

전체 starRequest 교체 패턴

아래 패턴으로 기존 starRequest 함수를 전면 교체한다.

import fs from "node:fs";
import os from "node:os";
import path from "node:path";
import { execFileSync } from "node:child_process";

function detectInteractive() {
  if (!process.stdout.isTTY) return false;
  if (process.env.CI) return false;
  if (process.env.TERM === "dumb") return false;
  return true;
}

function runGh(args) {
  return execFileSync("gh", args, {
    timeout: 10000,
    encoding: "utf8",
    stdio: ["pipe", "pipe", "pipe"],
  });
}

function getHttpStatus(error) {
  const out = [error?.stdout, error?.stderr].filter(Boolean).join("\n");
  const match = out.match(/HTTP\s+(\d{3})/i) || out.match(/\b(\d{3})\b/);
  return match ? Number(match[1]) : null;
}

export async function starRequest({
  owner,
  repo,
  soft = false,
  askUserQuestion,
  confirm,
  ok,
  info,
  warn,
}) {
  const repoUrl = `https://github.com/${owner}/${repo}`;
  const interactive = detectInteractive();
  const useSoft = soft || !interactive;

  const MARKER_DIR = path.join(os.homedir(), ".config", "star-prompt");
  const MARKER = path.join(MARKER_DIR, `${owner}-${repo}.prompted`);

  const markPrompted = () => {
    fs.mkdirSync(MARKER_DIR, { recursive: true });
    fs.writeFileSync(MARKER, new Date().toISOString(), "utf8");
  };

  if (fs.existsSync(MARKER)) return;

  try {
    runGh(["--version"]);
  } catch {
    info(repoUrl);
    return;
  }

  try {
    runGh(["auth", "status"]);
  } catch {
    info(repoUrl);
    return;
  }

  let alreadyStarred = false;
  try {
    runGh(["api", `user/starred/${owner}/${repo}`]);
    alreadyStarred = true;
  } catch (error) {
    const status = getHttpStatus(error);
    if (status === 404) {
      alreadyStarred = false;
    } else {
      // API 에러(404 외): 프롬프트 없이 URL만 출력, 마커 미기록
      warn(repoUrl);
      return;
    }
  }

  if (alreadyStarred) {
    ok("이미 함께하고 계시군요. ⭐");
    markPrompted();
    return;
  }

  let accepted = false;
  if (useSoft) {
    accepted = await confirm("⭐ 하나가 큰 차이를 만듭니다.", true);
  } else {
    const answer = await askUserQuestion({
      question: "⭐ 이 프로젝트가 마음에 드셨나요? 스타를 누르시겠습니까?",
      options: ["예, 누를게요", "아니오"],
    });
    accepted = answer === "예, 누를게요";
  }

  if (!accepted) {
    if (useSoft) {
      info(repoUrl);
    } else {
      info(`괜찮습니다. 나중에 마음이 바뀌시면: ${repoUrl}`);
    }
    markPrompted();
    return;
  }

  try {
    runGh(["api", "-X", "PUT", `/user/starred/${owner}/${repo}`]);
    if (useSoft) {
      ok("함께해 주셔서 감사합니다. ⭐");
    } else {
      ok("감사합니다! 여러분의 ⭐가 프로젝트를 성장시킵니다.");
    }
  } catch {
    warn(repoUrl);
  } finally {
    markPrompted();
  }
}

Read the full file on GitHub · 221 lines

Files

What ships with it

1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.

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. 12d ago First seen · 221 lines · 67 tokens per session scan A 9951798db23c

Subscribe to this mod's changes

star-prompt is a skill published in the GitHub repository tellang/triflux (7 stars, last pushed 4d ago), licensed MIT. It adds 67 tokens to every session and 2,030 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 1 finding (runs shell commands). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

lucia-chat

Set two agent sessions talking through the Luciazero Agent Bus and watch it live in a terminal: pick the pair, open the windows, read the transcript. Use for "ให้ codex กับ claude คุยกัน" or "watch the bus".

ohm41321/luciazero · 55 tokens

ready

Make an unfamiliar repository agent-ready with a verify command, smoke tests, guardrails, and project notes. Use for repository setup, agentic engineering, verify commands, hooks, or allowlists; skip when verification and scope are already clear.

ohm41321/luciazero · 50 tokens

handoff

Write a state capsule so the next session — or a different agent/harness — can resume unfinished work without re-deriving context. Use when a session is ending with work incomplete, when the user says "handoff", "pack up", "ส่งต่อ", "continue tomorrow", when switching between Claude Code and Codex mid-task, or when…

ohm41321/luciazero · 86 tokens

done

Run the closeout ritual before handing back non-trivial work; full verification, revert-probe honesty, independent review, and scope reporting. Use before declaring completion, opening a PR, wrapping up a change, or "ปิดงาน".

ohm41321/luciazero · 50 tokens

retro

Record durable lessons, null results, and footguns after hard work or debugging. Use when the user asks for a retro, dead ends need preserving, a task disproves an approach, or "จดบทเรียน". Keep repo knowledge separate from machine-local memory.

ohm41321/luciazero · 55 tokens

show

Visualize code structure, changes, and verification evidence in the smallest useful view. Use for connections, flows, diffs, file maps, Mermaid diagrams, evidence maps, or focused HTML; show facts and label unknowns.

ohm41321/luciazero · 47 tokens