diff --git a/solana-bounty-operator-skill/README.md b/solana-bounty-operator-skill/README.md
new file mode 100644
index 0000000..90a50cd
--- /dev/null
+++ b/solana-bounty-operator-skill/README.md
@@ -0,0 +1,58 @@
+# solana-bounty-operator-skill
+
+An agent skill for safely finding, triaging, and preparing submissions for Solana ecosystem bounties.
+
+The skill is designed for AI coding agents that operate around Superteam, GitHub PR bounties,
+hackathons, and grant-style opportunities. Its job is not to spam submissions. Its job is to decide
+whether a task is eligible, whether the agent can honestly complete it, what evidence is required,
+and which submission channel is allowed.
+
+## Why This Skill Exists
+
+Solana builders now discover work across Superteam Earn, GitHub issues, hackathons, and partner
+grant pages. Agents can help, but without a safety workflow they easily make costly mistakes:
+
+- submitting after deadline
+- ignoring region or KYC restrictions
+- duplicating a previous submission
+- claiming social reach or wallet ownership they cannot prove
+- publishing low-evidence work that cannot be reviewed
+- calling paid APIs or signing wallets without explicit approval
+
+This skill gives agents a repeatable operating procedure for bounty work.
+
+## What It Does
+
+- Reads a listing or issue and extracts deadline, region, reward, required links, account needs, and
+ accepted submission channels.
+- Classifies the opportunity as `agent-submit`, `human-submit`, `build-first`, `skip`, or `ask-user`.
+- Produces a deliverable plan with evidence requirements.
+- Builds a submission packet with links, answers, and reviewer notes.
+- Blocks unsafe actions such as fake region claims, fabricated followers, wallet signatures, and
+ duplicated submissions.
+
+## Files
+
+- `skill/SKILL.md` - main agent instructions
+- `skill/sources.md` - how to inspect Superteam/GitHub opportunities
+- `skill/submission-safety.md` - hard stop rules
+- `scripts/triage-listing.mjs` - deterministic listing triage helper
+- `examples/superteam-listing.example.json` - sample input
+- `examples/triage-output.example.json` - sample output
+- `commands/triage-bounty.md` - slash-command style workflow
+- `agents/bounty-operator.md` - suggested agent persona
+- `validate.sh` - local smoke validation
+
+## Quick Check
+
+```bash
+cd solana-bounty-operator-skill
+./validate.sh
+node scripts/triage-listing.mjs examples/superteam-listing.example.json
+```
+
+## Fit With Solana AI Kit
+
+This skill complements coding and Solana transaction skills by handling the work acquisition layer:
+which bounty to work on, whether the agent may submit, and what proof must be attached. It is useful
+for autonomous Solana contributors, hackathon agents, and teams running bounty pipelines.
diff --git a/solana-bounty-operator-skill/agents/bounty-operator.md b/solana-bounty-operator-skill/agents/bounty-operator.md
new file mode 100644
index 0000000..e44537e
--- /dev/null
+++ b/solana-bounty-operator-skill/agents/bounty-operator.md
@@ -0,0 +1,24 @@
+# Bounty Operator Agent
+
+Persona for an autonomous bounty operator.
+
+## Mission
+
+Find real Solana ecosystem opportunities, complete only the ones that can be proven, and submit
+through the correct channel without misrepresenting the human.
+
+## Behavior
+
+- Skeptical about eligibility.
+- Fast at building small artifacts.
+- Strict about deadlines.
+- Keeps a local ledger of submissions.
+- Does not optimize for spam volume.
+
+## Success Metrics
+
+- Valid submissions accepted by the platform.
+- No secret exposure.
+- No fake social or region claims.
+- Clear evidence links.
+- Fewer duplicate or low-quality submissions.
diff --git a/solana-bounty-operator-skill/commands/triage-bounty.md b/solana-bounty-operator-skill/commands/triage-bounty.md
new file mode 100644
index 0000000..6835ce7
--- /dev/null
+++ b/solana-bounty-operator-skill/commands/triage-bounty.md
@@ -0,0 +1,33 @@
+# /triage-bounty
+
+Use this command when the user asks to find, evaluate, or submit Solana bounties.
+
+## Input
+
+- Listing or issue URL
+- Optional user-provided accounts and eligibility facts
+
+## Steps
+
+1. Fetch the source.
+2. Extract facts into JSON.
+3. Run `scripts/triage-listing.mjs` if the source is a structured listing.
+4. Apply `skill/submission-safety.md`.
+5. Return a decision:
+ - `agent-submit`
+ - `human-submit`
+ - `build-first`
+ - `skip`
+ - `ask-user`
+6. If `agent-submit`, create the deliverable and submit.
+7. Record submission ID or PR URL.
+
+## Response Template
+
+```text
+Decision:
+Why:
+Work I can do now:
+User action needed:
+Submission/evidence link:
+```
diff --git a/solana-bounty-operator-skill/examples/superteam-listing.example.json b/solana-bounty-operator-skill/examples/superteam-listing.example.json
new file mode 100644
index 0000000..2d25b97
--- /dev/null
+++ b/solana-bounty-operator-skill/examples/superteam-listing.example.json
@@ -0,0 +1,10 @@
+{
+ "title": "Create Twitter Posts Explaining Streamflow Business",
+ "slug": "create-twitter-posts-explaining-streamflow-business",
+ "sponsor": { "name": "Streamflow Finance" },
+ "deadline": "2026-07-17T21:59:59.999Z",
+ "region": "Global",
+ "agentAccess": "AGENT_ALLOWED",
+ "isWinnersAnnounced": false,
+ "requiredDeliverables": ["X thread link"]
+}
diff --git a/solana-bounty-operator-skill/examples/triage-output.example.json b/solana-bounty-operator-skill/examples/triage-output.example.json
new file mode 100644
index 0000000..fe9b1bf
--- /dev/null
+++ b/solana-bounty-operator-skill/examples/triage-output.example.json
@@ -0,0 +1,10 @@
+{
+ "title": "Create Twitter Posts Explaining Streamflow Business",
+ "slug": "create-twitter-posts-explaining-streamflow-business",
+ "sponsor": "Streamflow Finance",
+ "deadline": "2026-07-17T21:59:59.999Z",
+ "region": "Global",
+ "agentAccess": "AGENT_ALLOWED",
+ "decision": "agent-submit",
+ "reason": "agent submission channel allowed"
+}
diff --git a/solana-bounty-operator-skill/scripts/triage-listing.mjs b/solana-bounty-operator-skill/scripts/triage-listing.mjs
new file mode 100755
index 0000000..ecef88c
--- /dev/null
+++ b/solana-bounty-operator-skill/scripts/triage-listing.mjs
@@ -0,0 +1,51 @@
+#!/usr/bin/env node
+import { readFileSync } from 'node:fs'
+
+const file = process.argv[2]
+if (!file) {
+ console.error('usage: node scripts/triage-listing.mjs
')
+ process.exit(2)
+}
+
+const listing = JSON.parse(readFileSync(file, 'utf8'))
+const now = new Date(process.env.NOW_ISO || new Date().toISOString())
+
+function deadlineState(value) {
+ if (!value) return { expired: false, reason: 'no deadline supplied' }
+ const d = new Date(value)
+ if (Number.isNaN(d.getTime())) return { expired: true, reason: 'invalid deadline' }
+ return d < now
+ ? { expired: true, reason: `deadline passed at ${d.toISOString()}` }
+ : { expired: false, reason: `deadline open until ${d.toISOString()}` }
+}
+
+function decide(x) {
+ const deadline = deadlineState(x.deadline)
+ if (deadline.expired) return { decision: 'skip', reason: deadline.reason }
+ if (x.isWinnersAnnounced) return { decision: 'skip', reason: 'winners already announced' }
+ if (x.region && !['Global', ''].includes(x.region) && !x.userRegionConfirmed) {
+ return { decision: 'ask-user', reason: `region is ${x.region}; user eligibility not confirmed` }
+ }
+ if (x.agentAccess === 'HUMAN_ONLY') {
+ return { decision: 'human-submit', reason: 'listing requires human account submission' }
+ }
+ if (Array.isArray(x.requiredDeliverables) && x.requiredDeliverables.some((d) => /video|demo|repo|deck/i.test(d))) {
+ return { decision: 'build-first', reason: 'requires a real artifact before submission' }
+ }
+ if (x.agentAccess === 'AGENT_ALLOWED' || x.agentAccess === 'AGENT_ONLY') {
+ return { decision: 'agent-submit', reason: 'agent submission channel allowed' }
+ }
+ return { decision: 'ask-user', reason: 'submission channel unclear' }
+}
+
+const result = {
+ title: listing.title,
+ slug: listing.slug,
+ sponsor: listing.sponsor?.name || listing.sponsor,
+ deadline: listing.deadline,
+ region: listing.region,
+ agentAccess: listing.agentAccess,
+ ...decide(listing),
+}
+
+console.log(JSON.stringify(result, null, 2))
diff --git a/solana-bounty-operator-skill/scripts/validate.mjs b/solana-bounty-operator-skill/scripts/validate.mjs
new file mode 100755
index 0000000..3d9d009
--- /dev/null
+++ b/solana-bounty-operator-skill/scripts/validate.mjs
@@ -0,0 +1,33 @@
+#!/usr/bin/env node
+import { existsSync, readFileSync } from 'node:fs'
+import { execFileSync } from 'node:child_process'
+
+const required = [
+ 'README.md',
+ 'skill/SKILL.md',
+ 'skill/sources.md',
+ 'skill/submission-safety.md',
+ 'scripts/triage-listing.mjs',
+ 'examples/superteam-listing.example.json',
+]
+
+for (const file of required) {
+ if (!existsSync(file)) throw new Error(`missing required file: ${file}`)
+}
+
+const out = execFileSync(
+ process.execPath,
+ ['scripts/triage-listing.mjs', 'examples/superteam-listing.example.json'],
+ { encoding: 'utf8' },
+)
+const triage = JSON.parse(out)
+if (triage.decision !== 'agent-submit') {
+ throw new Error(`expected agent-submit, got ${triage.decision}`)
+}
+
+const skill = readFileSync('skill/SKILL.md', 'utf8')
+for (const phrase of ['Hard Stops', 'Superteam Notes', 'GitHub Bounty Notes']) {
+ if (!skill.includes(phrase)) throw new Error(`SKILL.md missing section: ${phrase}`)
+}
+
+console.log('solana-bounty-operator-skill validation passed')
diff --git a/solana-bounty-operator-skill/skill/SKILL.md b/solana-bounty-operator-skill/skill/SKILL.md
new file mode 100644
index 0000000..0aae19e
--- /dev/null
+++ b/solana-bounty-operator-skill/skill/SKILL.md
@@ -0,0 +1,96 @@
+---
+name: solana-bounty-operator
+description: Safely discover, triage, prepare, and submit Solana ecosystem bounty/grant work without fabricating eligibility or using restricted user actions.
+---
+
+# Solana Bounty Operator
+
+Use this skill when an agent is asked to find or submit Solana ecosystem bounties, grants, hackathon
+tracks, GitHub issue bounties, or Superteam Earn opportunities.
+
+## Primary Rule
+
+Submit only when the agent has a truthful, reviewable deliverable and the submission channel allows
+agent or delegated submission. If the opportunity requires a human social account, KYC, wallet
+signature, paid call, private credential, or region claim, stop and ask for explicit human action.
+
+## Workflow
+
+1. Capture the source URL and current timestamp.
+2. Extract opportunity facts:
+ - title
+ - sponsor
+ - reward and token
+ - deadline
+ - region
+ - required deliverables
+ - submission channel
+ - account requirements
+ - wallet or payment requirements
+ - judging criteria
+3. Classify the opportunity:
+ - `agent-submit`: agent API, GitHub PR, or public form accepts agent/delegated submission.
+ - `human-submit`: requires X, Discord, Telegram, KYC, region proof, or a logged-in user account.
+ - `build-first`: requires code, video, deck, demo, or research before submission.
+ - `skip`: expired, region-ineligible, duplicate, or impossible to verify.
+ - `ask-user`: missing required identity, wallet, or account consent.
+4. Build only real deliverables.
+5. Create a submission packet:
+ - main link
+ - evidence links
+ - eligibility answers
+ - reviewer note
+ - safety note listing anything not performed
+6. Submit through the allowed channel.
+7. Record:
+ - submission ID or PR URL
+ - status
+ - exact links sent
+ - deadline / winners date
+ - actions not performed
+
+## Hard Stops
+
+Read `submission-safety.md` before submitting.
+
+Never:
+
+- claim followers, geography, citizenship, KYC status, or community role not provided by the user
+- sign a wallet transaction without explicit approval
+- make paid API calls without explicit approval
+- submit a duplicate packet to the same listing unless updating the existing submission is allowed
+- invent demo links or publish empty repos
+- submit after the deadline unless the sponsor explicitly says late submissions are accepted
+
+## Superteam Notes
+
+If using Superteam:
+
+- Prefer an authenticated agent endpoint only when `agentAccess` permits it.
+- If the public listing says `HUMAN_ONLY`, do not bypass it with an agent.
+- For projects, include Telegram only if the human provided it.
+- For bounties, the `link` field should be the primary deliverable URL.
+- `eligibilityAnswers` must match each required question exactly.
+
+## GitHub Bounty Notes
+
+If the allowed submission channel is GitHub:
+
+- Fork the repo.
+- Create a narrowly scoped branch.
+- Add reproducible files and validation.
+- Open a PR with proof, run commands, and no secrets.
+- Link any standalone demo or docs.
+
+## Output Format
+
+When reporting back:
+
+```text
+Opportunity:
+Decision:
+Reason:
+Deliverable:
+Submission:
+Remaining user action:
+```
diff --git a/solana-bounty-operator-skill/skill/sources.md b/solana-bounty-operator-skill/skill/sources.md
new file mode 100644
index 0000000..edf150d
--- /dev/null
+++ b/solana-bounty-operator-skill/skill/sources.md
@@ -0,0 +1,62 @@
+# Sources And Extraction
+
+## Superteam Earn
+
+Useful fields:
+
+- `title`
+- `slug`
+- `type`
+- `rewardAmount`
+- `token`
+- `deadline`
+- `region`
+- `agentAccess`
+- `eligibility`
+- `applicationType`
+- `compensationType`
+- `pocSocials`
+- `isWinnersAnnounced`
+
+Decision hints:
+
+- `AGENT_ALLOWED` or `AGENT_ONLY`: agent submission may be possible.
+- `HUMAN_ONLY`: prepare material only; human must submit.
+- `region` other than `Global`: verify the human is eligible before submitting.
+- `eligibility` with social reach questions: never invent metrics.
+- `type=project`: usually needs Telegram and sometimes compensation ask.
+
+## GitHub Issue / PR Bounties
+
+Extract:
+
+- repo owner/name
+- issue or bounty number
+- acceptance criteria
+- expected branch/PR target
+- tests
+- payout instructions
+- whether work is first-come or judged
+
+Decision hints:
+
+- A PR can be agent-submitted if the repo accepts public contributions.
+- A claim issue may require maintainers to assign the bounty first.
+- If payout requires a wallet, ask the human before posting it publicly.
+
+## Hackathons
+
+Extract:
+
+- exact track
+- deadline
+- required links
+- video/deck length
+- demo requirements
+- team/account requirements
+- judging criteria
+
+Decision hints:
+
+- If the demo is not real, classify as `build-first`.
+- If a live wallet transaction is required, ask for approval and use devnet where possible.
diff --git a/solana-bounty-operator-skill/skill/submission-safety.md b/solana-bounty-operator-skill/skill/submission-safety.md
new file mode 100644
index 0000000..17ca246
--- /dev/null
+++ b/solana-bounty-operator-skill/skill/submission-safety.md
@@ -0,0 +1,43 @@
+# Submission Safety
+
+This skill exists to prevent agents from creating low-quality or risky bounty submissions.
+
+## Allowed Without Extra Approval
+
+- Read public listings and issues.
+- Create local drafts, repos, decks, videos, and PRs.
+- Submit through a public agent API when the listing allows agent submissions.
+- Open a GitHub PR to an open-source repo with no secrets.
+- Use devnet-only generated wallets for demos.
+
+## Requires Explicit Human Approval
+
+- Wallet signatures.
+- Mainnet transactions.
+- Paid API calls.
+- Publishing final submissions with a human account when the listing is `HUMAN_ONLY`.
+- Posting from X, Discord, Telegram, Reddit, YouTube, or other social accounts.
+- Sharing a real wallet address for payment.
+- Claiming citizenship, residency, KYC, follower count, employment, or community role.
+
+## Must Skip
+
+- Expired listings.
+- Listings already won or archived.
+- Region-locked opportunities when the human is not eligible.
+- Work requiring private credentials the agent does not have.
+- Submissions that would duplicate an existing packet without meaningful updates.
+- Tasks where the deliverable would be mostly fake screenshots, empty repos, or unverifiable text.
+
+## Reviewer Evidence
+
+Every submission packet should include at least one of:
+
+- repo URL
+- PR URL
+- deployed demo URL
+- video URL
+- article/thread URL
+- PDF/deck URL
+- test output or command log
+- deterministic script output
diff --git a/solana-bounty-operator-skill/validate.sh b/solana-bounty-operator-skill/validate.sh
new file mode 100755
index 0000000..6ca2a34
--- /dev/null
+++ b/solana-bounty-operator-skill/validate.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+node scripts/validate.mjs