Skip to content

Harden GitHub bounty cron scouting - #24480

Open
ixhxpns wants to merge 8 commits into
NousResearch:mainfrom
ixhxpns:codex/github-bounty-income-cron
Open

Harden GitHub bounty cron scouting#24480
ixhxpns wants to merge 8 commits into
NousResearch:mainfrom
ixhxpns:codex/github-bounty-income-cron

Conversation

@ixhxpns

@ixhxpns ixhxpns commented May 12, 2026

Copy link
Copy Markdown

Summary

  • make the repo-local github-bounty-income cron definition strictly no-agent/read-only with no default toolsets
  • add PATH/env setup and bounded subprocess timeouts to the bounty scout script
  • prevent unattended clone/fetch while keeping TAKE as a user-confirmation reminder only
  • add bounty-target-execution skill for safe Algora/GitHub bounty verification, TAKE gating, DevOps command planning, and communication drafts
  • define the two-team bounty architecture: github-bounty-income-30m as read-only scout/scorer and github-bounty-execution-team as manually confirmed execution team with per-action external confirmation

Verification

  • python3 -m py_compile /Users/jason/gittools/HermesAgent/.hermes/scripts/github_bounty_income_30m.py /Users/jason/.hermes/scripts/bounty_income_pipeline.py /Users/jason/.hermes/scripts/bounty_income_report.py
  • HERMES_PIPELINE_STAGE_STATUS=... /Users/jason/.hermes/scripts/bounty_income_report.py
  • HERMES_HOME=/Users/jason/gittools/HermesAgent/.hermes BOUNTY_SCOUT_LIMIT_PER_QUERY=1 BOUNTY_SCOUT_ENRICH_LIMIT=1 BOUNTY_SCOUT_PIPELINE_TIMEOUT_SECONDS=1 BOUNTY_SCOUT_COMMAND_TIMEOUT_SECONDS=1 python3 /Users/jason/gittools/HermesAgent/.hermes/scripts/github_bounty_income_30m.py
  • BOUNTY_SCOUT_TIMEOUT_SECONDS=1 BOUNTY_REPO_GATE_TIMEOUT_SECONDS=5 BOUNTY_REPORT_TIMEOUT_SECONDS=10 BOUNTY_PIPELINE_TIMEOUT_SECONDS=30 /Users/jason/.hermes/scripts/bounty_income_pipeline.py
  • git diff --check -- skills/github/bounty-target-execution/SKILL.md
  • browser-use inspection of https://algora.io/bounties confirmed visible Algora candidates: Twenty IMAP, Kyo gRPC Support, Isaac RAG Pipeline

Runtime notes

@ixhxpns

ixhxpns commented May 12, 2026

Copy link
Copy Markdown
Author

Update: adjusted the bounty cron wording so that after explicit TAKE confirmation, the authorized follow-up workflow includes claim/reservation when rules allow it, creating a working branch, making the minimal patch, committing, pushing, and opening the PR/submission. The hard safety boundary remains: no unauthorized scanning, no platform-rule bypassing, no spam, no fabricated findings, and no public disclosure of private vulnerabilities.

@alt-glitch alt-glitch added type/feature New feature or request comp/cron Cron scheduler and job management P3 Low — cosmetic, nice to have labels May 12, 2026
@ixhxpns

ixhxpns commented May 13, 2026

Copy link
Copy Markdown
Author

Update: added a read-only manual bounty watchlist for Kyo gRPC #390, ISAAC-497 Enhanced RAG Pipeline, and Twenty IMAP. The no-agent cron report now includes a Manual Watchlist section with repo/link, amount, status, required skills, difficulty, competition risk, existing PR signals, recommended action, reason, and next safe read-only command. Also tightened PR detection to avoid treating plain issue references as PRs. The current guardrail is read-only: no claim, branch, code change, commit, push, or PR from unattended runs; unauthorized scanning remains prohibited.

@ixhxpns

ixhxpns commented May 13, 2026

Copy link
Copy Markdown
Author

Update: wired https://algora.io/bounties into the no-agent bounty cron as a public HTML read-only source. Each run now includes a Public Bounty Sources section with extracted highlights from Algora's public listing, currently Twenty (YC S23) ,500 IMAP, Kyo #390 gRPC Support, and Isaac #45 [ISAAC-497]. The source config explicitly avoids deep-link dependence, stealth browser flows, CAPTCHA workarounds, and proxies.

@ixhxpns ixhxpns changed the title chore(cron): add GitHub bounty income scout Harden GitHub bounty cron scouting May 13, 2026

@teknium1 teknium1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the safety-oriented scouting and TAKE-gating work. The current implementation needs a substantial re-scope before it can be salvaged.

Problems

  • .hermes/ is explicitly runtime state, not a code artifact (.gitignore:111-114; commit e2a92ce64). Meanwhile cron resolves scripts only from active HERMES_HOME/scripts (cron/scheduler.py:2044-2065), so the PR's repo-root .hermes job and script lack a supported installation path.
  • The script restores GITHUB_TOKEN/GH_TOKEN from .env (.hermes/scripts/github_bounty_income_30m.py:54-67) after the cron subprocess sanitizer deliberately strips those credentials (tools/environments/local.py:391-404).
  • The pipeline deadline is not applied to post-scout source/watchlist calls (github_bounty_income_30m.py:772,792-793), which retain independent 25/30-second operations (:176-184, :234-244).
  • Both new skill descriptions exceed the 60-character hard limit in AGENTS.md:888-900; the second skill has no matching skill test (AGENTS.md:948-950).

Suggested changes

  • Rework this around a supported profile-aware install/config surface; do not commit user runtime state.
  • Preserve credential sanitization, enforce one end-to-end deadline, and add focused tests for the script and both skills.

Automated hermes-sweeper review.

Comment thread .hermes/cron/jobs.json
"deliver": "local",
"origin": null,
"enabled_toolsets": [],
"workdir": "/Users/jason/gittools/HermesAgent",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This hardcodes the contributor's macOS checkout. More fundamentally, current cron resolves script under the active profile's HERMES_HOME/scripts (cron/scheduler.py:2044-2065), while .hermes/ is explicitly ignored runtime state. Please replace this checked-in runtime job with a supported profile-aware installation/configuration path.

line = line[len("export ") :].strip()
key, value = line.split("=", 1)
key = key.strip()
if key in {"GITHUB_TOKEN", "GH_TOKEN"} and key not in os.environ:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cron intentionally sanitizes child environments and unconditionally strips GH_TOKEN and GITHUB_TOKEN (tools/environments/local.py:391-404). Reloading them here bypasses that security boundary before spawning gh; use an explicitly supported credential path instead.

ranked = sorted(enriched, key=lambda c: c.score, reverse=True)
take = next((candidate for candidate in ranked if candidate.gate == "TAKE"), None)
cloned = maybe_clone(take)
source_results = inspect_sources()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The deadline is only checked during scouting/enrichment. These source and watchlist calls run after that budget and can each spend independent HTTP/subprocess timeouts, so BOUNTY_SCOUT_PIPELINE_TIMEOUT_SECONDS is not an end-to-end bound. Pass remaining time into these calls or skip them when the deadline has elapsed.

@@ -0,0 +1,287 @@
---
name: bounty-target-execution
description: "Use when evaluating or executing an authorized bounty target from Algora, GitHub issues, or similar platforms, requiring target verification, TAKE gating, read-only scouting, explicit confirmation before external actions, command planning, and communication drafts."

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New skills must have a one-sentence description of at most 60 characters ending in a period (AGENTS.md:888-900). Please shorten this description; the same rule also applies to github-bounty-workflow.

@teknium1 teknium1 added sweeper:risk-security-boundary Sweeper risk: may affect sandboxing, auth, credentials, or sensitive data sweeper:risk-compatibility Sweeper risk: may break existing users, config, migrations, defaults, or upgrades sweeper:risk-automation Sweeper risk: may affect CI, automerge, label sync, or maintainer automation sweeper:risk-platform-windows Sweeper risk: may break or behave differently on native Windows sweeper:blast-contained Sweeper blast radius: contained — one narrow path / opt-in / few users labels Jul 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/cron Cron scheduler and job management P3 Low — cosmetic, nice to have sweeper:blast-contained Sweeper blast radius: contained — one narrow path / opt-in / few users sweeper:risk-automation Sweeper risk: may affect CI, automerge, label sync, or maintainer automation sweeper:risk-compatibility Sweeper risk: may break existing users, config, migrations, defaults, or upgrades sweeper:risk-platform-windows Sweeper risk: may break or behave differently on native Windows sweeper:risk-security-boundary Sweeper risk: may affect sandboxing, auth, credentials, or sensitive data type/feature New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants