Compare commits

...

20 Commits

Author SHA1 Message Date
HAL9000 e1fc4f967f docs: architecture — add milestone navigation plan
CI / lint (pull_request) Successful in 27s
CI / typecheck (pull_request) Successful in 54s
CI / security (pull_request) Successful in 48s
CI / quality (pull_request) Successful in 50s
CI / build (pull_request) Successful in 24s
CI / helm (pull_request) Successful in 24s
CI / push-validation (pull_request) Successful in 17s
CI / e2e_tests (pull_request) Successful in 4m57s
CI / integration_tests (pull_request) Successful in 6m32s
CI / unit_tests (pull_request) Successful in 8m23s
CI / docker (pull_request) Successful in 17s
CI / coverage (pull_request) Successful in 15m15s
CI / status-check (pull_request) Successful in 1s
Add acceptance criteria for v3.6.0, document milestone navigation coverage across v3.2.0–v3.8.0, and record the change in the changelog.

ISSUES CLOSED: #7564
2026-04-14 15:39:46 +00:00
CleverAgents Bot 9db348e5f6 docs(timeline): update schedule adherence Day 102 (2026-04-12)
CI / lint (pull_request) Successful in 39s
CI / typecheck (pull_request) Successful in 1m18s
CI / security (pull_request) Successful in 1m29s
CI / quality (pull_request) Successful in 48s
CI / build (pull_request) Successful in 30s
CI / push-validation (pull_request) Successful in 30s
CI / helm (pull_request) Successful in 42s
CI / e2e_tests (pull_request) Successful in 4m26s
CI / integration_tests (pull_request) Successful in 4m55s
CI / unit_tests (pull_request) Successful in 5m34s
CI / docker (pull_request) Successful in 16s
CI / coverage (pull_request) Successful in 14m35s
CI / status-check (pull_request) Successful in 1s
CI / lint (push) Successful in 23s
CI / typecheck (push) Successful in 53s
CI / quality (push) Successful in 43s
CI / security (push) Successful in 59s
CI / helm (push) Successful in 23s
CI / build (push) Successful in 26s
CI / push-validation (push) Successful in 18s
CI / e2e_tests (push) Successful in 3m14s
CI / integration_tests (push) Successful in 6m40s
CI / unit_tests (push) Successful in 8m4s
CI / docker (push) Successful in 11s
CI / coverage (push) Successful in 14m37s
CI / status-check (push) Successful in 1s
2026-04-14 14:56:10 +00:00
HAL9000 6559a0e9df docs: integrate docs-writer automation tracking workflows
CI / lint (pull_request) Successful in 51s
CI / quality (pull_request) Successful in 49s
CI / typecheck (pull_request) Successful in 58s
CI / security (pull_request) Successful in 53s
CI / build (pull_request) Successful in 24s
CI / push-validation (pull_request) Successful in 20s
CI / helm (pull_request) Successful in 23s
CI / e2e_tests (pull_request) Successful in 4m3s
CI / integration_tests (pull_request) Successful in 8m37s
CI / unit_tests (pull_request) Successful in 11m26s
CI / coverage (pull_request) Successful in 14m48s
CI / docker (pull_request) Successful in 11s
CI / status-check (pull_request) Successful in 1s
CI / lint (push) Successful in 19s
CI / quality (push) Successful in 45s
CI / security (push) Successful in 1m0s
CI / typecheck (push) Successful in 1m29s
CI / build (push) Successful in 39s
CI / helm (push) Successful in 25s
CI / push-validation (push) Successful in 18s
CI / e2e_tests (push) Successful in 4m42s
CI / integration_tests (push) Successful in 7m12s
CI / unit_tests (push) Successful in 8m52s
CI / coverage (push) Successful in 13m35s
CI / docker (push) Successful in 16s
CI / status-check (push) Successful in 1s
- document docs-writer responsibilities and automation tracking requirements\n- enforce automation tracking label validation and clean coverage regression tags\n\nISSUES CLOSED: #7616

# Conflicts:
#	CHANGELOG.md
#	docs/development/automation-tracking.md
#	docs/development/docs-writer.md
#	mkdocs.yml
2026-04-14 14:11:47 +00:00
HAL9000 acc5f01155 docs(changelog): add plan action-arguments UNIQUE constraint fix (#4197)
CI / lint (pull_request) Successful in 26s
CI / build (pull_request) Successful in 25s
CI / push-validation (pull_request) Successful in 18s
CI / typecheck (pull_request) Successful in 50s
CI / quality (pull_request) Successful in 56s
CI / security (pull_request) Successful in 1m1s
CI / helm (pull_request) Successful in 43s
CI / e2e_tests (pull_request) Successful in 4m13s
CI / integration_tests (pull_request) Successful in 4m21s
CI / unit_tests (pull_request) Successful in 5m23s
CI / docker (pull_request) Successful in 22s
CI / coverage (pull_request) Successful in 10m47s
CI / status-check (pull_request) Successful in 1s
CI / lint (push) Successful in 23s
CI / build (push) Successful in 21s
CI / helm (push) Successful in 23s
CI / typecheck (push) Successful in 48s
CI / quality (push) Successful in 51s
CI / security (push) Successful in 1m1s
CI / push-validation (push) Successful in 44s
CI / integration_tests (push) Successful in 4m21s
CI / e2e_tests (push) Successful in 4m29s
CI / unit_tests (push) Successful in 5m30s
CI / docker (push) Successful in 11s
CI / coverage (push) Successful in 11m19s
CI / status-check (push) Successful in 1s
Documents the fix for sqlite3.IntegrityError when agents plan use is called on an action that already has arguments registered via action create.

ISSUES CLOSED: #6856
2026-04-14 13:32:24 +00:00
CleverAgents Build Agent 64b1f4c0b6 Build: improve grooming worker permissions, milestone enforcement, and PR merge throughput
CI / lint (push) Successful in 21s
CI / quality (push) Successful in 43s
CI / security (push) Successful in 51s
CI / build (push) Successful in 28s
CI / helm (push) Successful in 40s
CI / push-validation (push) Successful in 27s
CI / typecheck (push) Successful in 1m20s
CI / e2e_tests (push) Successful in 3m25s
CI / integration_tests (push) Successful in 3m59s
CI / unit_tests (push) Successful in 5m13s
CI / docker (push) Successful in 10s
CI / coverage (push) Successful in 12m9s
CI / status-check (push) Successful in 1s
CI / lint (pull_request) Successful in 31s
CI / typecheck (pull_request) Successful in 48s
CI / quality (pull_request) Successful in 37s
CI / security (pull_request) Successful in 58s
CI / helm (pull_request) Successful in 22s
CI / build (pull_request) Successful in 34s
CI / push-validation (pull_request) Successful in 16s
CI / e2e_tests (pull_request) Successful in 4m10s
CI / integration_tests (pull_request) Successful in 4m20s
CI / coverage (pull_request) Has been cancelled
CI / unit_tests (pull_request) Has been cancelled
CI / status-check (pull_request) Has been cancelled
CI / docker (pull_request) Has been cancelled
- Fix grooming-worker Forgejo permissions (deny → allow) to unblock direct API calls
- Route PR label fetching through forgejo-label-manager subagent
- Replace priority-alignment check with milestone enforcement (every issue must have a milestone)
- Add step 11: address non-code review remarks (labels, description, milestone) during grooming
- Clarify grooming-pool-supervisor stale threshold to explicit 24-hour window
- Refactor pr-merge-pool-supervisor main loop into explicit numbered steps
- Add triage strategy section emphasising parallel review checks and immediate worker dispatch
- Tighten merge criteria: explicit APPROVED state, no unresolved REQUEST_CHANGES on current head
- Dispatch workers for all PR processing, not only rebase operations
- Add rule to batch forgejo_list_pull_reviews calls instead of checking serially
2026-04-14 00:49:34 -04:00
HAL9000 e757ca9db0 docs(contributors): add HAL 9000 concurrency-fix contribution detail
CI / lint (pull_request) Successful in 39s
CI / quality (pull_request) Successful in 41s
CI / typecheck (pull_request) Successful in 57s
CI / security (pull_request) Successful in 57s
CI / build (pull_request) Successful in 45s
CI / helm (pull_request) Successful in 45s
CI / push-validation (pull_request) Successful in 20s
CI / e2e_tests (pull_request) Successful in 4m5s
CI / integration_tests (pull_request) Successful in 4m14s
CI / unit_tests (pull_request) Successful in 5m30s
CI / docker (pull_request) Successful in 1m33s
CI / coverage (pull_request) Successful in 13m0s
CI / status-check (pull_request) Successful in 1s
CI / lint (push) Successful in 29s
CI / quality (push) Successful in 48s
CI / typecheck (push) Successful in 58s
CI / security (push) Successful in 59s
CI / build (push) Successful in 34s
CI / push-validation (push) Successful in 29s
CI / helm (push) Successful in 36s
CI / e2e_tests (push) Successful in 3m22s
CI / integration_tests (push) Successful in 5m46s
CI / unit_tests (push) Successful in 8m50s
CI / docker (push) Successful in 2m10s
CI / coverage (push) Successful in 13m38s
CI / status-check (push) Successful in 1s
Add a Details entry for HAL 9000 describing the plan lifecycle
concurrency race-condition fix (#7989) — wiring LockService into
execute_plan/apply_plan with unique per-invocation owner identities.

ISSUES CLOSED: #7989
2026-04-14 03:59:50 +00:00
HAL9000 b1f7b51a80 fix(concurrency): fix lock owner identity to prevent re-entrant acquisition
The original implementation used plan_id as the owner_id when acquiring
the advisory lock. Because LockService treats owner_id as the caller
identity and allows re-entrant acquisition for the same owner, concurrent
sessions attempting to lock the same plan would all present the same
owner_id and thus silently renew the lock instead of raising
LockConflictError.

This fix generates a unique UUID for each invocation as the owner_id,
ensuring that concurrent sessions present different owners and thus
trigger LockConflictError when attempting to acquire the same plan lock.
The lock is still acquired before the phase transition and released in
a finally block to ensure cleanup even on error.

ISSUES CLOSED: #8067
2026-04-14 03:58:16 +00:00
HAL9000 b83f575cb5 fix(concurrency): wire LockService into plan lifecycle — guard execute_plan and apply_plan
LockService was implemented but never integrated into the plan execution
path, leaving execute_plan() and apply_plan() unprotected against
concurrent calls on the same plan_id (race condition, issue #7989).

Changes:
- container.py: add _build_lock_service() factory and register
  LockService as a Singleton provider; inject it into
  PlanLifecycleService via the DI container.
- plan_lifecycle_service.py: accept optional lock_service parameter in
  __init__; in execute_plan() and apply_plan() acquire a plan-level
  advisory lock before the critical section and release it in a finally
  block so the lock is always freed even when exceptions occur.

When lock_service is None (existing tests without DI wiring) the
behaviour is unchanged — locking is silently skipped for backward
compatibility.

Closes #7989
2026-04-14 03:58:16 +00:00
CleverAgents Build Agent 38bcd41338 Build: Better protection against agents editing the main working directory
CI / lint (push) Successful in 24s
CI / typecheck (push) Successful in 54s
CI / quality (push) Successful in 45s
CI / security (push) Successful in 1m15s
CI / build (push) Successful in 29s
CI / push-validation (push) Successful in 30s
CI / helm (push) Successful in 37s
CI / e2e_tests (push) Successful in 3m39s
CI / integration_tests (push) Successful in 4m28s
CI / unit_tests (push) Successful in 5m22s
CI / docker (push) Successful in 21s
CI / coverage (push) Successful in 11m39s
CI / status-check (push) Successful in 1s
2026-04-13 23:36:46 -04:00
HAL9000 c11b05b773 docs(changelog): add v3.3.0 changelog entry for #7582 fail_fast fix
CI / lint (pull_request) Successful in 30s
CI / typecheck (pull_request) Successful in 1m6s
CI / security (pull_request) Successful in 1m7s
CI / quality (pull_request) Successful in 42s
CI / helm (pull_request) Successful in 27s
CI / build (pull_request) Successful in 34s
CI / push-validation (pull_request) Successful in 23s
CI / e2e_tests (pull_request) Successful in 3m17s
CI / integration_tests (pull_request) Successful in 4m13s
CI / unit_tests (pull_request) Successful in 5m36s
CI / docker (pull_request) Successful in 1m37s
CI / coverage (pull_request) Successful in 11m50s
CI / status-check (pull_request) Successful in 2s
CI / lint (push) Successful in 36s
CI / typecheck (push) Successful in 53s
CI / quality (push) Successful in 30s
CI / security (push) Successful in 1m16s
CI / helm (push) Successful in 22s
CI / push-validation (push) Successful in 15s
CI / e2e_tests (push) Successful in 3m50s
CI / build (push) Successful in 3m32s
CI / integration_tests (push) Successful in 6m45s
CI / unit_tests (push) Successful in 7m39s
CI / docker (push) Successful in 1m19s
CI / coverage (push) Successful in 14m59s
CI / status-check (push) Successful in 1s
2026-04-14 02:51:16 +00:00
HAL9000 3cfa24854a fix(concurrency): fix SubplanExecutionService._execute_parallel() #7582
Ensure fail_fast cancels in-flight futures and reports them as CANCELLED.

Add Behave coverage that reproduces the concurrency regression.

ISSUES CLOSED: #7582
2026-04-14 02:51:16 +00:00
CleverAgents Build Agent a71c142854 Build: Made conflict resolution a more explicit part of the pr-merge agents
CI / helm (push) Successful in 35s
CI / push-validation (push) Successful in 19s
CI / build (push) Successful in 3m57s
CI / lint (push) Successful in 4m3s
CI / quality (push) Successful in 4m34s
CI / typecheck (push) Successful in 4m44s
CI / security (push) Successful in 4m50s
CI / e2e_tests (push) Successful in 7m3s
CI / integration_tests (push) Successful in 10m13s
CI / unit_tests (push) Successful in 11m21s
CI / docker (push) Successful in 1m30s
CI / coverage (push) Successful in 10m42s
CI / status-check (push) Successful in 1s
2026-04-13 21:33:01 -04:00
CleverAgents Build Agent a0664ad662 Build: enforce pagination with agents
CI / status-check (push) Blocked by required conditions
CI / push-validation (push) Successful in 17s
CI / helm (push) Successful in 31s
CI / quality (push) Successful in 43s
CI / typecheck (push) Successful in 55s
CI / lint (push) Successful in 3m20s
CI / build (push) Successful in 3m23s
CI / security (push) Successful in 4m5s
CI / integration_tests (push) Successful in 4m14s
CI / e2e_tests (push) Successful in 7m21s
CI / unit_tests (push) Successful in 8m22s
CI / docker (push) Successful in 10s
CI / coverage (push) Failing after 21m53s
2026-04-13 20:47:32 -04:00
CleverAgents Build Agent ad069c2012 Build: Fixed forgejo tool permissions in the agents and fixed the label manager so it reliably works with org level labels
CI / push-validation (push) Successful in 20s
CI / helm (push) Successful in 22s
CI / build (push) Successful in 3m18s
CI / lint (push) Successful in 3m21s
CI / quality (push) Successful in 3m40s
CI / typecheck (push) Successful in 3m59s
CI / security (push) Successful in 4m5s
CI / e2e_tests (push) Successful in 6m10s
CI / integration_tests (push) Successful in 6m12s
CI / unit_tests (push) Successful in 7m31s
CI / docker (push) Successful in 1m32s
CI / coverage (push) Successful in 13m52s
CI / status-check (push) Successful in 1s
2026-04-13 19:45:22 -04:00
clever-agent fd68b85c7b Revert "Build: Removed unnessecary status-check target as well"
CI / push-validation (push) Successful in 16s
CI / helm (push) Successful in 35s
CI / lint (push) Successful in 3m21s
CI / build (push) Successful in 3m21s
CI / quality (push) Successful in 3m41s
CI / integration_tests (push) Successful in 3m52s
CI / typecheck (push) Successful in 3m59s
CI / security (push) Successful in 4m5s
CI / e2e_tests (push) Successful in 6m25s
CI / unit_tests (push) Successful in 8m12s
CI / docker (push) Successful in 21s
CI / coverage (push) Successful in 13m51s
CI / status-check (push) Successful in 1s
This reverts commit 9998b4f9ad.
2026-04-13 19:15:55 -04:00
clever-agent 9998b4f9ad Build: Removed unnessecary status-check target as well
CI / lint (push) Successful in 46s
CI / quality (push) Successful in 43s
CI / typecheck (push) Successful in 1m9s
CI / security (push) Successful in 1m5s
CI / push-validation (push) Successful in 20s
CI / helm (push) Successful in 22s
CI / unit_tests (push) Failing after 7m42s
CI / docker (push) Has been skipped
CI / integration_tests (push) Failing after 9m34s
CI / build (push) Failing after 10m58s
CI / e2e_tests (push) Failing after 10m59s
CI / docker (pull_request) Has been skipped
CI / coverage (push) Successful in 22m29s
CI / coverage (pull_request) Successful in 14m42s
CI / security (pull_request) Successful in 10m42s
CI / integration_tests (pull_request) Failing after 9m42s
CI / unit_tests (pull_request) Failing after 10m35s
CI / e2e_tests (pull_request) Successful in 11m9s
CI / helm (pull_request) Successful in 46s
CI / push-validation (pull_request) Successful in 1m4s
CI / quality (pull_request) Successful in 8m59s
CI / build (pull_request) Successful in 7m35s
CI / lint (pull_request) Successful in 9m0s
CI / typecheck (pull_request) Successful in 9m39s
2026-04-13 17:55:41 -04:00
HAL9000 836b0e19c3 docs: confirm HAL 9000 contributor entry in CONTRIBUTORS.md
CI / lint (pull_request) Successful in 38s
CI / typecheck (pull_request) Successful in 53s
CI / quality (pull_request) Successful in 34s
CI / security (pull_request) Successful in 1m30s
CI / build (pull_request) Successful in 37s
CI / helm (pull_request) Successful in 39s
CI / push-validation (pull_request) Successful in 25s
CI / e2e_tests (pull_request) Successful in 3m8s
CI / integration_tests (pull_request) Successful in 6m51s
CI / unit_tests (pull_request) Successful in 8m11s
CI / docker (pull_request) Successful in 1m24s
CI / coverage (pull_request) Successful in 13m12s
CI / status-check (pull_request) Successful in 2s
CI / lint (push) Waiting to run
CI / typecheck (push) Waiting to run
CI / security (push) Waiting to run
CI / quality (push) Waiting to run
CI / unit_tests (push) Waiting to run
CI / integration_tests (push) Waiting to run
CI / e2e_tests (push) Waiting to run
CI / coverage (push) Blocked by required conditions
CI / build (push) Waiting to run
CI / docker (push) Blocked by required conditions
CI / helm (push) Waiting to run
CI / push-validation (push) Waiting to run
CI / status-check (push) Blocked by required conditions
HAL 9000 was already listed in the Contributors section.  This commit

adds a detail entry in the Details section to explicitly document the

nature of HAL 9000's contributions (automated implementation, bug fixes,

and feature development), satisfying the CONTRIBUTING.md requirement to

update CONTRIBUTORS.md when making a change.

ISSUES CLOSED: #8232
2026-04-13 21:16:55 +00:00
HAL9000 c0d631b6cc fix: custom automation profiles silently fall back to manual
_resolve_profile_for_plan in PlanLifecycleService now raises a clear
ValidationError when a plan's automation profile name is not a known
built-in profile, instead of silently falling back to 'manual'.

Users who configured custom automation profiles (e.g. 'semi-auto',
'acme/strict') will now receive an actionable error message listing
available built-in profiles. The resolved profile name is also logged
at debug level for observability.

Added BDD regression tests (8 scenarios) covering:
- Built-in profiles resolve correctly
- Plans with no profile set resolve to 'manual'
- Custom/unknown profile names raise ValidationError
- Error message mentions the unknown profile name
- Error message lists available built-in profiles
- Debug log records the resolved profile name

ISSUES CLOSED: #8232
2026-04-13 21:16:55 +00:00
clever-agent 5438540803 build: Removed benchmark stage from CI, moving this to its own workflow
CI / lint (push) Successful in 22s
CI / typecheck (push) Successful in 49s
CI / quality (push) Successful in 37s
CI / security (push) Successful in 57s
CI / build (push) Successful in 26s
CI / push-validation (push) Successful in 16s
CI / helm (push) Successful in 39s
CI / e2e_tests (push) Successful in 3m7s
CI / integration_tests (push) Successful in 6m26s
CI / unit_tests (push) Successful in 7m46s
CI / docker (push) Successful in 20s
CI / coverage (push) Successful in 14m50s
CI / status-check (push) Successful in 1s
CI / typecheck (pull_request) Failing after 55s
CI / quality (pull_request) Successful in 48s
CI / security (pull_request) Successful in 53s
CI / build (pull_request) Successful in 28s
CI / helm (pull_request) Successful in 24s
CI / push-validation (pull_request) Successful in 27s
CI / lint (pull_request) Failing after 11m48s
CI / unit_tests (pull_request) Failing after 12m26s
CI / coverage (pull_request) Has been skipped
CI / docker (pull_request) Has been skipped
CI / e2e_tests (pull_request) Failing after 17m45s
CI / integration_tests (pull_request) Failing after 19m36s
CI / status-check (pull_request) Has been cancelled
2026-04-13 17:16:41 -04:00
clever-agent c5afe1f3a7 Build: Made the prompts coming from the product builder to the async subagent more clear to avoid issues in the future
CI / benchmark-publish (push) Waiting to run
CI / lint (push) Successful in 29s
CI / security (push) Successful in 55s
CI / quality (push) Successful in 34s
CI / typecheck (push) Successful in 1m26s
CI / benchmark-regression (push) Waiting to run
CI / build (push) Successful in 39s
CI / helm (push) Successful in 38s
CI / push-validation (push) Successful in 26s
CI / e2e_tests (push) Successful in 3m16s
CI / integration_tests (push) Successful in 6m52s
CI / unit_tests (push) Successful in 8m17s
CI / docker (push) Successful in 1m34s
CI / coverage (push) Successful in 13m52s
CI / status-check (push) Successful in 1s
2026-04-13 16:14:24 -04:00
112 changed files with 2381 additions and 1768 deletions
-114
View File
@@ -406,120 +406,6 @@ jobs:
build/htmlcov/
retention-days: 30
benchmark-regression:
if: forgejo.event_name == 'pull_request'
runs-on: docker-benchmark
container:
image: python:3.13-slim
needs: [lint, typecheck, security, quality]
steps:
- name: Install system dependencies (nodejs for checkout, git for merge tests)
run: |
apt-get update && apt-get install -y -qq nodejs git && rm -rf /var/lib/apt/lists/*
- name: Checkout full history
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Compute base commit
id: hash
run: |
git fetch origin "${{ forgejo.base_ref }}" --depth=200
BASE_SHA=$(git merge-base HEAD "origin/${{ forgejo.base_ref }}")
echo "ASV_BASE_SHA=${BASE_SHA}" >> $FORGEJO_OUTPUT
- name: Install dependencies
run: |
python -m pip install -U pip
python -m pip install asv virtualenv uv==${{ env.UV_VERSION }} nox
- name: Restore prior ASV benchmarks
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
ASV_S3_BUCKET: ${{ secrets.ASV_S3_BUCKET }}
run: |
python -m pip install awscli
mkdir -p build/asv/results
aws s3 sync "s3://${ASV_S3_BUCKET}/asv/results" build/asv/results --delete || true
- name: Run asv continuous via nox
env:
ASV_BASE_SHA: ${{ steps.hash.outputs.ASV_BASE_SHA }}
run: |
nox -s benchmark_regression
- name: Archive the results
run: |
tar cf /tmp/asv-results.tar build/asv/results build/asv/html
- name: Upload benchmark artifacts
if: always()
uses: actions/upload-artifact@v3
with:
name: asv-results-pr
path: /tmp/asv-results.tar
rentention-days: 30
benchmark-publish:
if: forgejo.event_name == 'push' && ( forgejo.ref == 'refs/heads/master' || forgejo.ref == 'refs/heads/develop' )
runs-on: docker-benchmark
container: python:3.13-slim
steps:
- name: Install system dependencies (nodejs for checkout, git for merge tests)
run: |
apt-get update && apt-get install -y -qq nodejs git && rm -rf /var/lib/apt/lists/*
- name: Checkout full history
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install dependencies
run: |
python -m pip install -U pip
python -m pip install asv virtualenv uv==${{ env.UV_VERSION }} nox
- name: Restore prior ASV benchmarks
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
ASV_S3_BUCKET: ${{ secrets.ASV_S3_BUCKET }}
run: |
python -m pip install awscli
mkdir -p build/asv/results
aws s3 sync "s3://${ASV_S3_BUCKET}/asv/results" build/asv/results --delete || true
- name: Run asv via nox
run: |
nox -s benchmark
- name: Upload updated benchmarks and website to S3
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
ASV_S3_BUCKET: ${{ secrets.ASV_S3_BUCKET }}
run: |
python -m pip install awscli
aws s3 sync build/asv/results "s3://${ASV_S3_BUCKET}/asv/results" --delete
aws s3 sync build/asv/html "s3://${ASV_S3_BUCKET}/asv/html" --delete
- name: Archive the results
run: |
tar cf /tmp/asv-results.tar build/asv/results build/asv/html
- name: Upload benchmark artifacts
if: always()
uses: actions/upload-artifact@v3
with:
name: asv-results-pr
path: /tmp/asv-results.tar
rentention-days: 30
build:
runs-on: docker
container:
-44
View File
@@ -1,44 +0,0 @@
# Label Management Fix - Automation Tracking Issue
## Problem
After implementing strict label restrictions, automation tracking issues were not getting their "Automation Tracking" label because:
1. We blocked `forgejo_add_issue_labels` for all agents except forgejo-label-manager
2. The automation-tracking-manager creates issues via bash/curl and needs to add labels immediately
3. It cannot invoke the forgejo-label-manager from within a bash script context
## Solution
Made a targeted exception for the automation-tracking-manager:
### 1. Allowed forgejo_add_issue_labels for automation-tracking-manager
```yaml
forgejo:
"*": allow
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# EXCEPTION: automation-tracking-manager needs to add "Automation Tracking" label
"forgejo_add_issue_labels": allow
```
### 2. Removed overly broad bash restrictions
The automation-tracking-manager is a trusted system component that only adds the existing "Automation Tracking" label to issues it creates. We removed the bash restrictions that were blocking the `/api/v1/repos/{owner}/{repo}/issues/{index}/labels` endpoint.
### 3. Updated the label application code
The automation-tracking-manager now properly adds the label using curl after creating the issue:
```bash
curl -s -X POST "https://git.cleverthis.com/api/v1/repos/${repo_owner}/${repo_name}/issues/${issue_number}/labels" \
-H "Authorization: token $FORGEJO_PAT" \
-H "Content-Type: application/json" \
-d '{"labels": ["Automation Tracking"]}' > /dev/null
```
## Why This Is Safe
1. The automation-tracking-manager is a critical system component
2. It only adds ONE specific label: "Automation Tracking"
3. This label must already exist at the organization level
4. The agent cannot create new labels (those endpoints remain blocked)
5. This is the only agent that needs this exception due to its unique bash-based implementation
## Other Agents
All other agents that need to add labels should continue to use the forgejo-label-manager subagent. The automation-tracking-manager is a special case because it operates primarily through bash scripts and creates system tracking issues.
-108
View File
@@ -1,108 +0,0 @@
# Label Management System Update Summary
## Problem Addressed
Agents were creating duplicate labels at the project level instead of using organization-level labels. This was happening despite explicit instructions in agent prompts not to create labels.
## Solution Implemented
### 1. Permission-Level Restrictions
Added comprehensive restrictions to ALL agents:
#### Bash Restrictions (ALL agents):
```yaml
bash:
# Block ALL commands that could hit the label creation endpoints
"*api/v1/orgs/*/labels*": deny
"*api/v1/repos/*/labels*": deny
"*https://git.cleverthis.com/api/v1/repos/cleveragents/cleveragents-core/labels*": deny
```
#### Forgejo MCP Restrictions (ALL agents except forgejo-label-manager):
```yaml
forgejo:
"*": allow
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
"forgejo_add_issue_labels": deny # Only forgejo-label-manager can use this
```
This multi-layered approach ensures:
- No agent can create labels via REST API using ANY command (curl, wget, python, etc.)
- No agent can create labels via Forgejo MCP tools
- Only the forgejo-label-manager can add existing labels to issues
- Even the forgejo-label-manager cannot create new labels
### 2. Centralized Label Management
All label operations MUST go through the `forgejo-label-manager` subagent:
- This agent has complete knowledge of the organization-level label system
- It validates all label operations before applying them
- It ensures only existing org-level labels are used
- Even the label manager itself is forbidden from creating new labels
### 3. Updated Agent Behaviors
#### Agents Updated with Forgejo Restrictions:
- agent-evolver.md
- automation-tracking-manager.md
- backlog-groomer.md
- ci-log-fetcher.md
- continuous-pr-reviewer.md
- epic-planner.md
- fix-pr.md
- forgejo-label-manager.md
- forgejo-signature-appender.md
- human-liaison.md
- implementation-orchestrator.md
- implementation-worker.md
- issue-comment-formatter.md
- issue-state-updater.md
- new-issue-creator.md
- pr-api-creator.md
- pr-checker.md
- pr-self-reviewer.md
- pr-status-checker.md
- product-builder.md
- project-bootstrapper.md
- project-owner.md
- repo-isolator.md
- spec-updater.md
- state-reconciler.md
- system-watchdog.md
- test-infra-improver.md
#### Key Behavioral Changes:
1. **automation-tracking-manager.md**: Now uses forgejo-label-manager instead of direct API calls
2. **state-reconciler.md**: Updated to use forgejo-label-manager for all label operations
3. **pr-api-creator.md**: Uses forgejo-label-manager to inherit labels from issues
4. **implementation-worker.md**: Uses forgejo-label-manager when adding "needs feedback" label
## Label System Architecture
### Organization-Level Labels
All labels exist at the ORGANIZATION level and are shared across all repositories:
- **State Labels**: State/Unverified, State/Verified, State/In Progress, State/Paused, State/In Review, State/Completed, State/Wont Do
- **Type Labels**: Type/Bug, Type/Feature, Type/Task, Type/Testing, Type/Epic, Type/Legendary, Type/Documentation, Type/Refactor, Type/Automation
- **Priority Labels**: Priority/Critical, Priority/High, Priority/Medium, Priority/Low, Priority/Backlog
- **MoSCoW Labels**: MoSCoW/Must Have, MoSCoW/Should Have, MoSCoW/Could Have (Project Owner exclusive)
- **Points Labels**: Points/1, Points/2, Points/3, Points/5, Points/8, Points/13
- **Special Labels**: Blocked, Duplicate, Signed-off:, Automation Tracking, needs feedback
### Enforcement Mechanisms
1. **Permission-level denial**: No agent can create labels even if they try
2. **Centralized management**: All label operations go through forgejo-label-manager
3. **Validation**: Label manager validates all labels exist before applying
4. **Error handling**: Clear error messages when non-existent labels are requested
## Testing Recommendations
1. Monitor Forgejo for any new label creation attempts
2. Check that all label operations are going through forgejo-label-manager
3. Verify that duplicate labels (Automation Tracking, Priority/Medium, State/In Progress, Type/Automation) are no longer being created
4. Ensure agents properly handle label operation failures
## Future Considerations
1. Consider implementing a label audit tool that periodically checks for duplicate labels
2. Add monitoring to detect any attempts to create labels (even if denied)
3. Consider adding a label cleanup tool to remove project-level duplicates of org-level labels
@@ -26,22 +26,21 @@ permission:
"*": deny
"async-agent-manager": allow
"automation-tracking-manager": allow
forgejo:
"*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Agent Evolution Supervisor
@@ -117,3 +116,4 @@ Supervisor: Agent Evolution | Agent: agent-evolution-pool-supervisor
```
8. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
9. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (default 20 items — always pass `limit=50` and paginate all pages); `forgejo_list_repo_pull_requests` (same — default 20, use `limit=50` and paginate); `forgejo_list_issue_comments` (attempt history comments may span multiple pages — always paginate fully).
+16 -12
View File
@@ -8,7 +8,11 @@ hidden: true
temperature: 0.2
model: anthropic/claude-sonnet-4-6
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: allow
bash:
"*": deny
@@ -29,17 +33,16 @@ permission:
"repo-isolator": allow
"git-commit-helper": allow
"pr-creator": allow
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Agent Evolution Worker
@@ -66,3 +69,4 @@ Your prompt describes the approved proposal: what change to make, and the eviden
5. **Keep psuedocode blocks focused and small** using formal pseudocode conventions.
6. **Provide ample examples of relevant commands** so the agent knows how to perform specific actions, always make sure any real code snippets (including bash) are test first before including them.
7. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
8. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* this agent makes no direct paginated list calls, but any `curl` commands or tool calls added in future that return JSON arrays must be paginated; bash `find` or `ls` commands returning file lists may also be implicitly bounded — verify completeness.
+11 -11
View File
@@ -25,17 +25,16 @@ permission:
task:
"*": deny
"agent-type-info": allow
forgejo:
"*": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Agent Prefix Info
@@ -449,3 +448,4 @@ Invoke `agent-type-info` to learn about the agent's purpose and relationships. T
4. **When in doubt, lower the threshold**: It's better for an agent to read a slightly irrelevant announcement than to miss an important one.
5. **Priority/CI-Blocker is always consumed**: Any announcement at Priority/CI-Blocker is consumed by ALL agents, no exceptions.
6. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
7. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* any `forgejo_list_repo_issues` or `forgejo_list_repo_pull_requests` calls must use `limit=50` and paginate; if reading Forgejo issues to verify announcements, all pages must be fetched.
+11 -11
View File
@@ -22,17 +22,16 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Agent Type Info
@@ -470,3 +469,4 @@ Files in `shared/` are included in other agents' prompts, not standalone agents:
3. **Cross-reference.** When asked about relationships, explain both directions (who does it depend on, who depends on it).
4. **Prefix matching.** When given a prefix like `AUTO-IMP-SUP`, match it to the correct agent. When given a partial name, find the best match.
5. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
6. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (use `limit=50` and paginate all pages when reading issues to look up agent data); `forgejo_list_repo_pull_requests` (same); reading multiple files from `.opencode/agents/` must process every file in the directory.
@@ -28,20 +28,19 @@ permission:
"async-agent-manager": allow
"automation-tracking-manager": allow
"new-issue-creator": allow
forgejo:
"*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_repo_commits": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_repo_commits": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Architecture Guard Supervisor
@@ -105,3 +104,4 @@ Supervisor: Architecture Guard | Agent: architecture-guard-pool-supervisor
```
5. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
6. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (default 20 — use `limit=50` and paginate when checking for existing issues before dispatching); `forgejo_list_repo_commits` (paginate to get complete commit history for change detection).
+12 -12
View File
@@ -31,18 +31,17 @@ permission:
"*": deny
"new-issue-creator": allow
"repo-isolator": allow
forgejo:
"*": deny
"forgejo_list_repo_issues": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_issues": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Architecture Guard Worker
@@ -65,3 +64,4 @@ Your prompt tells you to perform a full codebase scan. You must:
2. **Check for duplicates.** Search existing issues before filing.
3. **Follow CONTRIBUTING.md issue format** as provided in your prompt.
4. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
5. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (use `limit=50` and paginate all pages when checking for duplicate issues before filing); bash `find` or `grep` commands scanning the codebase may return many results — do not assume the output is complete without verifying.
@@ -27,23 +27,22 @@ permission:
"*": deny
"async-agent-manager": allow
"automation-tracking-manager": allow
forgejo:
"*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_list_repo_milestones": allow
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_list_repo_milestones": allow
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Architecture Supervisor
@@ -121,3 +120,4 @@ Supervisor: Architecture | Agent: architecture-pool-supervisor
```
6. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
7. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (default 20 — use `limit=50` and paginate to find all spec-ambiguity reports in comments); `forgejo_list_issue_comments` (paginate fully to read all comments on each issue); `forgejo_list_repo_pull_requests` (paginate to find all spec PRs); `forgejo_list_repo_milestones` (paginate to see all milestones).
+16 -12
View File
@@ -8,7 +8,11 @@ hidden: true
temperature: 0.3
model: anthropic/claude-sonnet-4-6
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: allow
bash:
"*": deny
@@ -30,17 +34,16 @@ permission:
"repo-isolator": allow
"git-commit-helper": allow
"pr-creator": allow
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Architecture Worker
@@ -66,3 +69,4 @@ When the spec exceeds ~3,000 lines, split into `docs/specification/` with one fi
2. **Follow CONTRIBUTING.md commit and PR standards** as provided in your prompt.
3. **Major changes need `needs feedback` label.** Your prompt will tell you the classification.
4. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
5. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* this agent makes no direct paginated list calls, but any bash `find` or `cat` commands returning multi-item output, and any delegated tool invocations that internally list data, must be assumed potentially incomplete.
+16 -12
View File
@@ -8,7 +8,11 @@ temperature: 0.2
model: anthropic/claude-sonnet-4-6
color: success
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: allow
bash:
"*": deny
@@ -26,17 +30,16 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# ASV Benchmarker
@@ -64,3 +67,4 @@ Your prompt includes:
2. **Benchmarks in `benchmarks/` only.**
3. **Realistic data.** Use representative data sizes, not trivial inputs.
4. **One subtask, then exit.**
5. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* bash `find` or `ls` commands listing benchmark files must be assumed potentially incomplete for large directories; any future REST/curl calls returning JSON arrays must be paginated.
+14 -11
View File
@@ -23,17 +23,16 @@ permission:
task:
"*": deny
"async-agent-manager": allow
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Async Agent Cleanup All
@@ -45,3 +44,7 @@ You shut down multiple async agent sessions. Your caller provides a tag pattern
1. Invoke `async-agent-manager` to search for sessions matching the pattern.
2. For each matching session, invoke `async-agent-manager` to delete it.
3. Report a summary: how many sessions were deleted, how many failed, and any errors.
## Rules
1. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* the session list returned by `async-agent-manager` when searching for sessions by pattern must be fully paginated — there may be more sessions than fit in the first response; always confirm all matching sessions are found before reporting the cleanup count.
+14 -11
View File
@@ -23,17 +23,16 @@ permission:
task:
"*": deny
"async-agent-manager": allow
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Async Agent Cleanup
@@ -44,3 +43,7 @@ You shut down a specific async agent session. Your caller provides the session I
1. Invoke `async-agent-manager` to delete the specified session.
2. Report the result (success or failure with reason).
## Rules
1. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* if `async-agent-manager` is called to list sessions to find one by tag before deleting it, that session list must be fully paginated to ensure the correct session is found.
+11 -11
View File
@@ -23,17 +23,16 @@ permission:
"*https://git.cleverthis.com/api/v1/repos/cleveragents/cleveragents-core/labels*": deny
task:
"*": deny
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Async Agent Manager
@@ -226,3 +225,4 @@ If the server is unreachable or returns errors:
2. **Always escape prompt text for JSON.** Use `jq -Rs .` to properly escape strings before embedding in JSON.
3. **Return structured results.** Always include the session ID, status, and any relevant details.
4. **Retry on transient failures.** Network hiccups happen. Retry before reporting failure.
5. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `curl http://localhost:4096/session` lists all sessions — if the server ever paginates this, iterate through all pages; `curl http://localhost:4096/session/${ID}/message` accepts a `limit` parameter — use a high limit and paginate to retrieve the full message history; when filtering sessions by tag pattern, always scan the complete session list.
+14 -11
View File
@@ -26,17 +26,16 @@ permission:
task:
"*": deny
"async-agent-manager": allow
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Async Agent Monitor
@@ -55,3 +54,7 @@ A session is **stuck** if it has `busy` status but no message activity for more
## Restart Capability
If the caller requests a restart for a stuck/errored session, invoke `async-agent-manager` to stop the old session and launch a new one with the same tag and agent type.
## Rules
1. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* when `async-agent-manager` returns a list of sessions for health checking, ensure all sessions are retrieved (paginate if needed); when fetching messages from a session, use the highest available `limit` and paginate to get the full message history for accurate health assessment.
+14 -14
View File
@@ -27,16 +27,15 @@ permission:
"*": deny
"forgejo-label-manager": allow
"agent-prefix-info": allow
forgejo:
"*": allow
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": allow
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Automation Tracking Manager
@@ -59,7 +58,7 @@ Steps:
3. Determine next cycle number: search ALL issues (open and closed) with the same prefix, find the highest cycle number, add 1.
4. Determine next estimated cycle interval: use the issue identified in step 3 above, take its reported estimated cycle interval, then using the rolling average formula: if a previous issue exists, `round(old_interval * 0.90 + actual_interval * 0.10)`, otherwise use `sleep-interval-default`.
5. Create the new issue with title `[{agent-prefix}] Status: {tracking-type} (Cycle N)`.
6. Add label `Automation Tracking` to the new ticket (via `forgejo-label-manager`). If for any reason you can not create the label respond with the issue and explain this was not possible when you return.
6. Add label `Automation Tracking` to the new ticket (via `forgejo-label-manager` subagent). If for any reason you can not create the label then delete the issue and respond with the issue and explain this was not possible when you return.
7. Return the issue number and cycle number.
### UPDATE_TRACKING_ISSUE
@@ -102,7 +101,7 @@ Parameters: `agent-prefix`, `message`, `priority`, `body`, `repo-owner`, `repo-n
Steps:
1. Create an issue with title `[{agent-prefix}] Announce: {message}`.
2. Apply labels: `Automation Tracking` and the specified priority label (via `forgejo-label-manager`).
2. Apply labels: `Automation Tracking` and the specified priority label (via `forgejo-label-manager` subagent).
### CLOSE_ANNOUNCEMENT_ISSUE
@@ -162,8 +161,9 @@ Parameters: `agent-prefix`
1. **One status issue at a time.** Always close ALL existing before creating new.
2. **Cycle numbers are globally unique per prefix.** Search ALL issues (including closed) to find the next number.
3. **Apply labels via `forgejo-label-manager`.** Never apply labels directly, or using the ForgeJo MCP/task. all label operations must go through `forgejo-label-manager`.
4. **Bot signature on all content created:**
3. **Apply labels via `forgejo-label-manager`.** Never apply labels directly through the REST API, or using the ForgeJo MCP/task. all label operations must go through `forgejo-label-manager` subagent.
4. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` when searching for tracking issues with a given prefix — missing a page means a duplicate cycle number or phantom open status issue; when closing existing status issues before creating a new one, ALL existing issues must be found (paginate fully); `READ_ANNOUNCEMENTS` must page through all open issues to find matching announcements.
5. **Bot signature on all content created:**
```
---
**Automated by CleverAgents Bot**
+16 -12
View File
@@ -8,7 +8,11 @@ hidden: true
temperature: 0.2
# NO MODEL SPECIFIED - inherits from caller (tier selector)
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: allow
bash:
"*": deny
@@ -26,17 +30,16 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Behave Test Writer
@@ -88,3 +91,4 @@ Never run `behave` directly.
2. **One subtask, then exit.**
3. **BDD only.** Never write xUnit-style tests.
4. **Complete steps.** Every feature file must have all its steps fully implemented.
5. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* bash `find` commands searching for existing step definition files or feature files must not assume the first batch of results is exhaustive; any future REST/curl calls returning JSON arrays must be paginated.
+14 -11
View File
@@ -23,17 +23,16 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Branch Setup
@@ -66,3 +65,7 @@ git -C "$WORK_DIR" rebase origin/master
```
Return the branch name and whether it was newly created or already existed.
## Rules
1. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `git branch -r` listing remote branches may be long — do not stop processing at an assumed cutoff; any `git log` output may be truncated by terminal pagination — use `--no-pager` or explicit limits.
+15 -15
View File
@@ -27,21 +27,20 @@ permission:
"async-agent-manager": allow
"automation-tracking-manager": allow
"new-issue-creator": allow
forgejo:
"*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Bug Hunt Pool Supervisor
@@ -126,3 +125,4 @@ Supervisor: Bug Hunt Pool | Agent: bug-hunt-pool-supervisor
```
7. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
8. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (default 20 — use `limit=50` and paginate to check for all existing bug issues before filing duplicates); `forgejo_list_repo_pull_requests` (same — check all open PRs that may already address a discovered bug).
+13 -13
View File
@@ -31,19 +31,18 @@ permission:
"*": deny
"new-issue-creator": allow
"repo-isolator": allow
forgejo:
"*": deny
"forgejo_list_repo_issues": allow
"forgejo_list_repo_pull_requests": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_issues": allow
"forgejo_list_repo_pull_requests": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Bug Hunt Worker
@@ -75,3 +74,4 @@ Your prompt tells you which module to analyze and provides the relevant specific
3. **Check for existing issues and PRs.** Never file duplicates.
4. **Follow CONTRIBUTING.md issue format** as described in the rules provided in your prompt.
5. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
6. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (use `limit=50` and paginate all pages — a missed page means filing a duplicate bug issue); `forgejo_list_repo_pull_requests` (same — must check all open PRs for duplicates); bash `find` or `grep` over the codebase may return many results — always process all output.
+11 -11
View File
@@ -20,17 +20,16 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": allow
forgejo:
"*": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Build OpenCode Agent
@@ -50,3 +49,4 @@ Each agent definition is a markdown file with:
- Workers are short-lived (one task, exit). Supervisors loop and dispatch workers.
- All agents must follow CONTRIBUTING.md
- **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
- **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (use `limit=50` and paginate); `forgejo_list_repo_pull_requests` (same); `forgejo_list_repo_milestones` (paginate to see all milestones); any `curl` REST calls returning JSON arrays must also be paginated.
+14 -11
View File
@@ -19,17 +19,16 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": allow
forgejo:
"*": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Build Agent
@@ -60,3 +59,7 @@ nox -s coverage_report
## Label Management
**Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
## Pagination Rule
**Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (use `limit=50` and paginate all pages); `forgejo_list_repo_pull_requests` (same); `forgejo_list_repo_milestones` (paginate to see all milestones); any `curl` REST calls returning JSON arrays must be paginated.
+14 -14
View File
@@ -26,20 +26,19 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
"forgejo_list_workflow_runs": allow
"forgejo_get_workflow_run": allow
"forgejo_get_pull_request_by_index": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_workflow_runs": allow
"forgejo_get_workflow_run": allow
"forgejo_get_pull_request_by_index": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# CI Log Fetcher
@@ -92,3 +91,4 @@ A structured summary of CI failures:
1. **Credentials from prompt only.** Never read environment variables.
2. **Clean up cookies.** Always delete the cookie jar file after use.
3. **Parse errors, don't just dump logs.** Return structured failure details, not raw log output.
4. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_workflow_runs` (use `limit=50` and paginate to ensure the latest run for a PRs head SHA is found, not just the first page of runs); log page fetches via `curl` may return paginated HTML — follow all pagination links to retrieve complete logs.
+14 -11
View File
@@ -22,17 +22,16 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Commit Message Formatter
@@ -68,3 +67,7 @@ ISSUES CLOSED: #42
```
The first line MUST be the exact text from the issue metadata. The body is the contributor's description. The footer references the issue.
## Rules
1. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* this agent makes no direct paginated list calls, but any future tool or REST calls returning arrays must be paginated.
+16 -12
View File
@@ -8,7 +8,11 @@ hidden: true
temperature: 0.2
# NO MODEL SPECIFIED - inherits from caller (tier selector)
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: allow
bash:
"*": deny
@@ -26,17 +30,16 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Coverage Improver
@@ -59,3 +62,4 @@ You analyze test coverage and write new Behave tests to reach the 97% threshold.
2. **BDD tests only.** Write Behave features, never xUnit tests.
3. **Tests must be meaningful.** Cover real behavior, not just lines. Edge cases, error paths, and boundary conditions matter more than hitting a percentage.
4. **97% minimum.** Do not exit below this threshold.
5. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* bash `find` commands listing uncovered source files must process all results; coverage report output listing uncovered lines must be fully consumed before deciding what to test next.
+14 -11
View File
@@ -25,17 +25,16 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Difficulty Evaluator
@@ -56,3 +55,7 @@ You evaluate a subtask's difficulty and recommend a starting model tier. When un
- **recommended_tier** (1-4)
- **reasoning** — brief explanation of why this tier
- **confidence** — how confident you are in the assessment (high/medium/low)
## Rules
1. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* bash `find` or `wc` commands over source files must not assume all files are captured; any future REST/curl calls returning JSON arrays must be paginated.
@@ -26,21 +26,20 @@ permission:
"*": deny
"async-agent-manager": allow
"automation-tracking-manager": allow
forgejo:
"*": deny
"forgejo_list_repo_milestones": allow
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_repo_pull_requests": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_milestones": allow
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_repo_pull_requests": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Documentation Supervisor
@@ -93,3 +92,4 @@ Supervisor: Documentation | Agent: documentation-pool-supervisor
```
5. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
6. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_milestones` (paginate to see all milestones and detect completion triggers); `forgejo_list_repo_issues` (use `limit=50` and paginate — a missing issue may indicate a doc gap was not caught); `forgejo_list_repo_pull_requests` (same).
+16 -12
View File
@@ -7,7 +7,11 @@ hidden: true
temperature: 0.3
model: anthropic/claude-sonnet-4-6
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: allow
bash:
"*": deny
@@ -29,17 +33,16 @@ permission:
"repo-isolator": allow
"git-commit-helper": allow
"pr-creator": allow
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Documentation Worker
@@ -62,3 +65,4 @@ Your prompt describes the documentation task (e.g., "update README for milestone
2. **Extend, don't overwrite.** Always read existing docs and add to them.
3. **Follow CONTRIBUTING.md documentation standards** as provided in your prompt.
4. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
5. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* bash `find` commands listing existing documentation files must process all results to avoid missing files; any future REST/curl calls returning JSON arrays must be paginated.
@@ -28,27 +28,26 @@ permission:
"automation-tracking-manager": allow
"forgejo-label-manager": allow
"new-issue-creator": allow
forgejo:
"*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_list_repo_milestones": allow
"forgejo_issue_add_comment": allow
"forgejo_list_repo_pull_requests": allow
"forgejo_issue_add_dependency": allow
"forgejo_issue_remove_dependency": allow
"forgejo_issue_list_dependencies": allow
"forgejo_issue_state_change": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_list_repo_milestones": allow
"forgejo_issue_add_comment": allow
"forgejo_list_repo_pull_requests": allow
"forgejo_issue_add_dependency": allow
"forgejo_issue_remove_dependency": allow
"forgejo_issue_list_dependencies": allow
"forgejo_issue_state_change": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Epic Planning Supervisor
@@ -126,3 +125,4 @@ Supervisor: Epic Planning | Agent: epic-planning-pool-supervisor
```
7. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
8. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (default 20 — use `limit=50` and paginate all pages to detect orphaned issues and hierarchy gaps); `forgejo_list_issue_comments` (paginate fully to read all discussion on each issue); `forgejo_list_repo_milestones` (paginate to see all milestones for scope guard decisions); `forgejo_list_repo_pull_requests` (same).
+18 -18
View File
@@ -23,24 +23,23 @@ permission:
"*": deny
"new-issue-creator": allow
"forgejo-label-manager": allow
forgejo:
"*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_issue_add_comment": allow
"forgejo_issue_add_dependency": allow
"forgejo_issue_remove_dependency": allow
"forgejo_issue_state_change": allow
"forgejo_list_repo_milestones": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_issue_add_comment": allow
"forgejo_issue_add_dependency": allow
"forgejo_issue_remove_dependency": allow
"forgejo_issue_state_change": allow
"forgejo_list_repo_milestones": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Epic Planning Worker
@@ -64,3 +63,4 @@ Your prompt describes the planning task: which Epic to decompose, which issues t
3. **Correct dependency direction.** Child BLOCKS parent. Always.
4. **Check for duplicates.** Before creating any issue, search for existing ones.
5. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
6. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (use `limit=50` and paginate all pages — missing an issue in the duplicate check means filing duplicate work); `forgejo_list_repo_milestones` (paginate to see all milestones when assigning the correct one).
+18 -15
View File
@@ -21,21 +21,20 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
"forgejo_list_repo_milestones": allow
"forgejo_list_repo_issues": allow
"forgejo_list_repo_pull_requests": allow
"forgejo_get_issue_by_index": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_milestones": allow
"forgejo_list_repo_issues": allow
"forgejo_list_repo_pull_requests": allow
"forgejo_get_issue_by_index": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Final Reporter
@@ -49,3 +48,7 @@ You generate a comprehensive final report summarizing all work completed across
3. **PRs Merged** — count with summary of changes
4. **Quality Statistics** — test pass rates, coverage, lint/typecheck status
5. **Problems Encountered** — any blockers, human escalations, or recurring issues
## Rules
1. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_milestones` (paginate to get all milestones for the summary); `forgejo_list_repo_issues` (use `limit=50` and paginate all pages — an incomplete count would corrupt the final report statistics); `forgejo_list_repo_pull_requests` (same — all merged PRs must be counted).
+23 -18
View File
@@ -7,7 +7,11 @@ temperature: 0.2
model: anthropic/claude-sonnet-4-6
color: "#059669"
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: allow
bash:
"*": deny
@@ -31,23 +35,22 @@ permission:
"ci-log-fetcher": allow
"repo-isolator": allow
"git-commit-helper": allow
forgejo:
"*": deny
"forgejo_get_pull_request_by_index": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_pull_review_comments": allow
"forgejo_list_workflow_runs": allow
"forgejo_get_workflow_run": allow
"forgejo_get_issue_by_index": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_get_pull_request_by_index": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_pull_review_comments": allow
"forgejo_list_workflow_runs": allow
"forgejo_get_workflow_run": allow
"forgejo_get_issue_by_index": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Fix PR Agent
@@ -62,7 +65,9 @@ You manually fix a specific pull request. The user tells you which PR to fix. Yo
4. Fix the code — address both CI failures and review feedback.
5. Run quality gates locally (`nox -e lint`, `nox -e typecheck`, `nox -e unit_tests`, `nox -e integration_tests`).
6. Commit and push using `git-commit-helper`.
7. Clean up the isolated clone using `repo-isolator`.
## Rules
1. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
2. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_pull_reviews` (use `limit=50` and paginate to read ALL reviewer feedback before fixing); `forgejo_list_workflow_runs` (paginate to find the latest CI run for the PR's head commit).
+40 -21
View File
@@ -14,8 +14,16 @@ permission:
bash:
"*": deny
"jq *": allow
# Block ALL commands that could hit the label creation endpoints
"*api/v1/orgs/*/labels*": deny
# Allow read-only listing of org-level labels (Forgejo MCP tools do not expose this endpoint)
"curl*cleverthis.com/api/v1/orgs/cleveragents/labels*": allow
# Re-deny all write/mutation curl operations — these override the allow above (last match wins)
"curl*-X POST*": deny
"curl*-X PATCH*": deny
"curl*-X DELETE*": deny
"curl*-X PUT*": deny
"curl* -d *": deny
"curl* --data*": deny
# Block ALL repo-level label endpoints
"*api/v1/repos/*/labels*": deny
"*https://git.cleverthis.com/api/v1/repos/cleveragents/cleveragents-core/labels*": deny
# CRITICAL: No direct curl to localhost:4096 - must use async-agent-manager
@@ -23,22 +31,20 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
"forgejo_list_repo_labels": deny
"forgejo_get_issue_by_index": allow
"forgejo_get_issue_labels": allow
"forgejo_replace_issue_labels": allow
"forgejo_issue_remove_label": allow
"forgejo_list_org_labels": allow
# CRITICAL: Even the label manager CANNOT create labels
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Use forgejo_replace_issue_labels for full control over the final label set
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_labels": deny
"forgejo_get_issue_by_index": allow
"forgejo_get_issue_labels": allow
"forgejo_replace_issue_labels": allow
"forgejo_issue_remove_label": allow
# CRITICAL: Even the label manager CANNOT create labels
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Use forgejo_replace_issue_labels for full control over the final label set
"forgejo_add_issue_labels": deny
---
# Forgejo Label Manager
@@ -53,13 +59,24 @@ Your caller provides:
- **labels** — label names to apply (for apply/validate operations)
- **repo_owner** and **repo_name**
## Fetching Org-Level Labels
The Forgejo MCP tools do not expose org-level label listing, and repo-level label tools are blocked. You **must** use the following curl command to discover and validate org-level labels:
```bash
curl -s "https://git.cleverthis.com/api/v1/orgs/cleveragents/labels" \
-H "Authorization: token ${FORGEJO_PAT}" | jq '.'
```
This returns a JSON array of all org-level labels. Each entry includes `id`, `name`, `color`, `exclusive`, `is_archived`, and `description`. The `description` field explains the label's intended use — read it so you choose the correct one. Use the `id` field when calling `forgejo_replace_issue_labels`.
## Label Application
When asked to apply labels, use `forgejo_replace_issue_labels` (not `forgejo_add_issue_labels`) because it gives full control over the final label set. This ensures no stale labels remain.
Steps:
1. Fetch current labels on the issue using `forgejo_get_issue_labels`.
2. Validate that all requested labels exist at the org level using `forgejo_list_org_labels`.
2. Validate that all requested labels exist at the org level using the curl command above.
3. Merge the requested labels with existing non-conflicting labels (e.g., adding a new State label should remove the old State label).
4. Apply the final label set using `forgejo_replace_issue_labels`.
@@ -80,6 +97,8 @@ The system uses these label scopes: `State/`, `Priority/`, `MoSCoW/`, `Type/`, p
## Rules
1. **NEVER create labels.** You can only apply existing organization-level labels.
2. **Validate before applying.** Confirm the label exists before trying to apply it.
2. **Validate before applying.** Use the curl command to confirm the label exists before trying to apply it.
3. **Scope-aware replacement.** When applying a scoped label, remove the old one from the same scope.
4. **Never use repo labels, use org labels** Never use the repo labels (those returned by `forgejo_list_repo_labels`), all labels should be org level labels (returned by `forgejo_list_org_labels`).
4. **Always use org labels via curl.** Never use repo-level label tools. Always discover and validate org labels using the curl command in the "Fetching Org-Level Labels" section above.
5. **Use label descriptions.** The `description` field returned by the curl command explains each label's purpose. Read it to choose the correct label when the name alone is ambiguous.
6. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* the `curl .../orgs/cleveragents/labels` call must be paginated if the org has more labels than fit in one response (use `limit=50` and check for a next page) — a truncated label list means valid labels appear "not found" and are incorrectly rejected; `forgejo_get_issue_labels` returns all labels for an issue but if the API paginates in future versions, verify completeness.
+14 -11
View File
@@ -22,17 +22,16 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Forgejo Signature Appender
@@ -48,3 +47,7 @@ Supervisor: <supervisor_name> | Agent: <agent_name>
```
The signature is always preceded by a horizontal rule (`---`) and appears at the very end of the content.
## Rules
1. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* this agent makes no direct paginated list calls, but any future tool or REST calls returning arrays must be paginated.
+11 -11
View File
@@ -25,17 +25,16 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Git Commit Helper
@@ -93,3 +92,4 @@ Never use `--force` without `--lease`.
1. **Always use --force-with-lease, never --force.** This prevents overwriting others' work.
2. **Abort on rebase conflicts.** Report them; don't try to resolve automatically.
3. **Verify before pushing.** Check `git status` to ensure no uncommitted changes remain.
4. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `git log` output listing commits may be long — use `--no-pager` or explicit count limits and be aware the output may be truncated; any future REST/curl calls returning JSON arrays must be paginated.
+11 -11
View File
@@ -23,17 +23,16 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Git Committer
@@ -55,3 +54,4 @@ If no changes are staged, report that to the caller instead of creating an empty
1. **Never create empty commits.**
2. **Always verify with `git status` before committing.**
3. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `git status` output listing changed files may be long — read it in full; any future REST/curl calls returning JSON arrays must be paginated.
+21 -21
View File
@@ -27,26 +27,25 @@ permission:
"*": deny
"async-agent-manager": allow
"automation-tracking-manager": allow
forgejo:
"*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_pull_review_comments": allow
"forgejo_list_repo_milestones": allow
"forgejo_get_issue_labels": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_pull_review_comments": allow
"forgejo_list_repo_milestones": allow
"forgejo_get_issue_labels": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Grooming Supervisor
@@ -80,7 +79,7 @@ When choosing what to groom next, always re-check the current state of issues an
3. **Issues never groomed** — issues that have never been groomed.
4. **Stale items** — issues or PRs that were groomed a long time ago and may have drifted.
4. **Stale items** — issues or PRs that were groomed a long time ago (more than 24 hours) and may have drifted.
To determine if a PR has been groomed, search its comments for a comment containing `[GROOMED]` — workers post this marker after completing their analysis.
@@ -125,3 +124,4 @@ Supervisor: Grooming | Agent: grooming-pool-supervisor
```
6. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
7. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (default 20 — must use `limit=50` and paginate ALL pages to find every issue that needs grooming; a missed page means issues go ungroomed indefinitely); `forgejo_list_repo_pull_requests` (same — every PR must be assessed for grooming priority).
+33 -29
View File
@@ -24,31 +24,30 @@ permission:
"new-issue-creator": allow
"forgejo-label-manager": allow
"issue-state-updater": allow
forgejo:
"*": deny
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_issue_add_comment": allow
"forgejo_issue_state_change": allow
"forgejo_list_repo_issues": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_pull_review_comments": allow
"forgejo_list_pull_request_files": allow
"forgejo_get_issue_labels": allow
"forgejo_issue_list_dependencies": allow
"forgejo_issue_add_dependency": allow
"forgejo_list_repo_milestones": allow
"forgejo_edit_issue": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_issue_add_comment": allow
"forgejo_issue_state_change": allow
"forgejo_list_repo_issues": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_pull_review_comments": allow
"forgejo_list_pull_request_files": allow
"forgejo_get_issue_labels": allow
"forgejo_issue_list_dependencies": allow
"forgejo_issue_add_dependency": allow
"forgejo_list_repo_milestones": allow
"forgejo_edit_issue": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Grooming Worker
@@ -78,7 +77,7 @@ Your prompt includes:
2. Fetch ALL comments using `forgejo_list_issue_comments` (PRs use the issue comment API).
3. Fetch ALL formal reviews using `forgejo_list_pull_reviews`.
4. Fetch review comments using `forgejo_list_pull_review_comments`.
5. Fetch the PR's labels using `forgejo_get_issue_labels`.
5. Fetch the PR's labels using `forgejo-label-manager` subagent.
6. Identify the linked issue (from closing keywords like `Closes #N` in the PR body).
7. Fetch the linked issue's details and labels.
@@ -107,8 +106,8 @@ Check for contradictions:
- Issue in `State/In Review` without an open PR → revert to `State/In Progress`.
- Issue in `State/Paused` without `Blocked` label → add `Blocked` or unpause.
### 6. Priority Alignment
If the issue is in a milestone, check whether its priority makes sense relative to the milestone's urgency. Flag obvious mismatches (e.g., `Priority/Low` in a milestone with an imminent deadline).
### 6. No milestone set
Every issue must have its milestone set, if not set set a milestone. Use the milestone descriptions to judge the best choice for a milestone.
### 7. Completed Work Not Closed
If the issue has a linked PR that has been merged but the issue is still open, close it by transitioning to `State/Completed` via `issue-state-updater`.
@@ -127,10 +126,14 @@ For pull requests ONLY: the PR's labels must be synced to match its linked issue
- `MoSCoW/` label (if present)
- Milestone assignment
Also verify the PR has:
Also verify the PR has the following, and if it doesnt add it:
- A closing keyword (`Closes #N` or `Fixes #N`) in its description
- A dependency link (PR blocks the linked issue)
### 11: PR-Specific: Address any relevant remarks from reviews
Check formal reviews as well as informal comments left as reviews. Any concerns raised about the PR or its linked ticket, not related to the source code itself (for example labels, the PR description, milestone setting, etc) should be addressed.
## Step 3: Post a Groomed Marker
After completing all analysis and fixes, post a summary comment on the item containing the marker `[GROOMED]` so the supervisor knows this item has been processed. The comment should briefly list what was checked and what was fixed:
@@ -163,3 +166,4 @@ Fixes applied:
5. **Always use existing labels.** Use `forgejo-label-manager` to apply existing labels.
6. **Always post the `[GROOMED]` marker** at the end so the supervisor knows this item was processed.
7. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
8. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_issue_comments` (paginate ALL comment pages — skipping later comments means missing key context for the quality analysis); `forgejo_list_pull_reviews` (paginate to read all formal review rounds); `forgejo_list_repo_issues` (use `limit=50` and paginate when searching for duplicates or orphan parents); `forgejo_list_repo_milestones` (paginate to see all milestones for priority alignment checks).
@@ -31,26 +31,25 @@ permission:
"issue-analyzer": allow
"forgejo-label-manager": allow
"ci-log-fetcher": allow
forgejo:
"*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_issue_add_comment": allow
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_repo_milestones": allow
"forgejo_list_repo_notifications": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_issue_add_comment": allow
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_repo_milestones": allow
"forgejo_list_repo_notifications": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Human Liaison Supervisor
@@ -125,3 +124,4 @@ Supervisor: Human Liaison | Agent: human-liaison-pool-supervisor
```
7. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
8. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (default 20 — use `limit=50` and paginate all pages to catch every new human-created issue); `forgejo_list_issue_comments` (paginate fully to read all human feedback before responding); `forgejo_list_repo_pull_requests` (paginate to see all PRs with reviews awaiting response); `forgejo_list_repo_notifications` (paginate all notification pages so no human interaction is missed).
+16 -16
View File
@@ -25,22 +25,21 @@ permission:
"issue-state-updater": allow
"issue-analyzer": allow
"forgejo-label-manager": allow
forgejo:
"*": deny
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_issue_add_comment": allow
"forgejo_list_repo_milestones": allow
"forgejo_list_repo_issues": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_issue_add_comment": allow
"forgejo_list_repo_milestones": allow
"forgejo_list_repo_issues": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Human Liaison Worker
@@ -63,3 +62,4 @@ Your prompt describes the specific task: triage a new issue, respond to a human
2. **Professional communication.** Follow CODE_OF_CONDUCT.md. No emojis.
3. **Update descriptions, not just comments.** When feedback changes a ticket.
4. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
5. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_issue_comments` (paginate ALL comment pages to read all human feedback before drafting a response); `forgejo_list_repo_milestones` (paginate to see all milestones when triaging); `forgejo_list_repo_issues` (use `limit=50` and paginate to find related issues for duplicate check).
@@ -27,24 +27,23 @@ permission:
"async-agent-manager": allow
"automation-tracking-manager": allow
"forgejo-label-manager": allow
forgejo:
"*": deny
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_issue_add_comment": allow
"forgejo_list_repo_milestones": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_issue_add_comment": allow
"forgejo_list_repo_milestones": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Implementation Pool Supervisor
@@ -189,3 +188,4 @@ Supervisor: Implementation Pool | Agent: implementation-pool-supervisor
```
8. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
9. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_pull_requests` (default 20 — must use `limit=50` and paginate ALL pages to see every open PR; missing a PR means it never gets a fix worker dispatched); `forgejo_list_repo_issues` (same — a missing issue means work is silently skipped); `forgejo_list_issue_comments` (paginate fully to read complete escalation history before determining the next tier); `forgejo_list_repo_milestones` (paginate to see all milestones for priority ordering).
+14 -11
View File
@@ -26,17 +26,16 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Implementation Reviewer
@@ -60,3 +59,7 @@ You review completed implementation work for correctness. You are read-only —
- **APPROVE** — implementation is correct and complete
- **REJECT** — with specific concerns and what needs to change
## Rules
1. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* bash `find` or `grep` commands listing source files or test files must process all results — missing a file means an incomplete review; any future REST/curl calls returning JSON arrays must be paginated.
+24 -20
View File
@@ -9,7 +9,11 @@ hidden: true
temperature: 0.1
# No model specified — tier is set by the supervisor via tier selectors
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: allow
bash:
"*": deny
@@ -44,25 +48,24 @@ permission:
"issue-note-writer": allow
"new-issue-creator": allow
"repo-isolator": allow
forgejo:
"*": deny
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_issue_add_comment": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_pull_review_comments": allow
"forgejo_list_repo_milestones": allow
"forgejo_get_file_content": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_issue_add_comment": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_pull_review_comments": allow
"forgejo_list_repo_milestones": allow
"forgejo_get_file_content": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Implementation Worker
@@ -197,3 +200,4 @@ Supervisor: Implementation Pool | Agent: implementation-worker
```
8. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
9. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_issue_comments` (paginate ALL pages — escalation attempt history may span many comments and missing any changes the tier decision); `forgejo_list_pull_reviews` (paginate to read all reviewer feedback rounds); `forgejo_list_pull_review_comments` (same); `forgejo_list_repo_milestones` (paginate to correctly assign the PR milestone).
+16 -12
View File
@@ -8,7 +8,11 @@ hidden: true
temperature: 0.2
# NO MODEL SPECIFIED - inherits from caller (tier selector)
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: allow
bash:
"*": deny
@@ -27,17 +31,16 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Code Implementer
@@ -90,3 +93,4 @@ When fixing a bug, check for tests tagged with `@tdd_issue_<N>` and `@tdd_expect
2. **One subtask, then exit.** Do not look for more work.
3. **Follow the project rules exactly.** File organization, type safety, error handling — all as provided in your prompt.
4. **No testing.** You write code. Testing agents handle tests.
5. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* bash `find` or `grep` commands listing source files must process all results — missing a file may cause incomplete implementations; any future REST/curl calls returning JSON arrays must be paginated.
+16 -12
View File
@@ -8,7 +8,11 @@ temperature: 0.2
# NO MODEL SPECIFIED - inherits from caller (tier selector)
color: warning
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: allow
bash:
"*": deny
@@ -26,17 +30,16 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Integration Test Runner
@@ -56,3 +59,4 @@ You run Robot Framework integration tests and fix any failures. You work in an i
1. **Never work in `/app`.**
2. **No mocking.** Integration tests exercise real dependencies.
3. **Never suppress failures.** Fix the root cause.
4. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* bash `find` commands listing test files must process all results to ensure all tests are run; any future REST/curl calls returning JSON arrays must be paginated.
+18 -15
View File
@@ -22,21 +22,20 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_get_issue_labels": allow
"forgejo_issue_list_dependencies": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_get_issue_labels": allow
"forgejo_issue_list_dependencies": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Issue Analyzer
@@ -59,3 +58,7 @@ A structured analysis containing:
- **Acceptance criteria**
- **Dependencies** (blocks/blocked by)
- **Comments summary** (especially any bot attempt comments with tier info)
## Rules
1. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_issue_comments` (paginate ALL pages — escalation history and acceptance criteria refinements may appear in later comments and must not be missed).
+14 -11
View File
@@ -21,17 +21,16 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Issue Comment Formatter
@@ -47,3 +46,7 @@ Every formatted comment ends with the bot signature block:
**Automated by CleverAgents Bot**
Supervisor: <caller's supervisor> | Agent: <caller's agent>
```
## Rules
1. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* this agent makes no direct paginated list calls, but any future tool or REST calls returning arrays must be paginated.
+18 -15
View File
@@ -21,21 +21,20 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_get_issue_labels": allow
"forgejo_list_repo_milestones": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_get_issue_labels": allow
"forgejo_list_repo_milestones": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Issue Finder
@@ -50,3 +49,7 @@ You query the Forgejo issue tracker and return a prioritized list of issues matc
## What You Return
A prioritized list of matching issues, sorted by: milestone order (lowest first), then priority label (Critical > High > Medium > Low > Backlog), then issue number.
## Rules
1. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (default 20 — this agents primary function; must use `limit=50` and paginate ALL pages or the returned list is silently truncated and callers act on incomplete data); `forgejo_list_repo_milestones` (paginate to correctly map milestone ordering for priority sorting).
+12 -12
View File
@@ -21,18 +21,17 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
"forgejo_issue_add_comment": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_issue_add_comment": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Issue Note Writer
@@ -44,3 +43,4 @@ Notes should document: design decisions, discoveries during implementation, assu
## Rules
1. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
2. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* this agent makes no direct paginated list calls, but any future tool or REST calls returning arrays must be paginated.
+14 -14
View File
@@ -22,20 +22,19 @@ permission:
task:
"*": deny
"forgejo-label-manager": allow
forgejo:
"*": deny
"forgejo_get_issue_by_index": allow
"forgejo_get_issue_labels": allow
"forgejo_issue_list_dependencies": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_get_issue_by_index": allow
"forgejo_get_issue_labels": allow
"forgejo_issue_list_dependencies": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Issue State Updater
@@ -62,3 +61,4 @@ Any state → State/Wont Do
1. **Never skip states** unless going to `State/Wont Do` (which is valid from any state).
2. **Paused requires Blocked.** Refuse to pause without the `Blocked` label and a linked blocker.
3. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
4. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_issue_list_dependencies` may return many dependency links — paginate to check all blockers before allowing a pause transition.
+16 -12
View File
@@ -8,7 +8,11 @@ temperature: 0.1
# NO MODEL SPECIFIED - inherits from caller (tier selector)
color: warning
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: allow
bash:
"*": deny
@@ -26,17 +30,16 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Lint Fixer
@@ -58,3 +61,4 @@ Never run linters directly — always use `nox -e lint`.
1. **Never work in `/app`.**
2. **Fix all errors.** Do not exit with remaining lint failures.
3. **Do not change behavior.** Lint fixes should be cosmetic — formatting, imports, naming. If a lint error requires a behavioral change, note it in your summary.
4. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* lint error output may list many violations — process all of them, not just the first screenful; bash `find` commands listing source files to lint must process all results.
+15 -15
View File
@@ -27,21 +27,20 @@ permission:
task:
"*": deny
"new-issue-creator": allow
forgejo:
"*": deny
"forgejo_list_repo_milestones": allow
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_issue_add_comment": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_milestones": allow
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_issue_add_comment": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Milestone Reviewer
@@ -67,3 +66,4 @@ For each problem found, create an issue using `new-issue-creator` and post a sum
## Rules
1. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
2. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (use `limit=50` and paginate ALL pages — missing any issue in the milestone review means an incomplete assessment); `forgejo_list_repo_milestones` (paginate to confirm which milestone is being reviewed and which are complete).
+17 -17
View File
@@ -23,23 +23,22 @@ permission:
task:
"*": deny
"forgejo-label-manager": allow
forgejo:
"*": deny
"forgejo_create_issue": allow
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_issue_add_comment": allow
"forgejo_issue_add_dependency": allow
"forgejo_list_repo_milestones": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_create_issue": allow
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_issue_add_comment": allow
"forgejo_issue_add_dependency": allow
"forgejo_list_repo_milestones": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# New Issue Creator
@@ -83,3 +82,4 @@ Agent: new-issue-creator
```
5. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
6. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (use `limit=50` and paginate ALL pages when searching for duplicates — a truncated search misses existing issues and creates duplicates); `forgejo_list_repo_milestones` (paginate to find the correct milestone to assign).
+18 -15
View File
@@ -26,21 +26,20 @@ permission:
task:
"*": deny
"ref-reader": allow
forgejo:
"*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_repo_milestones": allow
"forgejo_list_repo_pull_requests": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_repo_milestones": allow
"forgejo_list_repo_pull_requests": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Plan Agent
@@ -54,3 +53,7 @@ You create implementation plans. Before planning, read CONTRIBUTING.md, the prod
3. Create a comprehensive plan that follows all project conventions.
Plans must account for: file organization rules, testing requirements (Behave + Robot), commit standards, PR requirements, and quality gates.
## Rules
1. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (use `limit=50` and paginate all pages to understand the full scope of existing work before planning); `forgejo_list_repo_milestones` (paginate to see all milestones for timeline planning); `forgejo_list_repo_pull_requests` (paginate to see all in-flight work).
+20 -16
View File
@@ -9,7 +9,11 @@ temperature: 0.1
model: anthropic/claude-sonnet-4-6
color: warning
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: allow
bash:
"*": deny
@@ -29,25 +33,24 @@ permission:
task:
"*": deny
"ci-log-fetcher": allow
forgejo:
"*": deny
"forgejo_get_pull_request_by_index": allow
"forgejo_list_workflow_runs": allow
"forgejo_get_workflow_run": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_get_pull_request_by_index": allow
"forgejo_list_workflow_runs": allow
"forgejo_get_workflow_run": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# PR CI Test Fixer
You fix failing CI checks on a PR branch. You work in an isolated clone directory.
You fix failing CI checks on a PR branch. You work in an isolated clone directory`$WORK_DIR` is always a path inside `/tmp/` created by `repo-isolator`. All file edits and every git operation (`add`, `commit`, `push`, branch switching) must be performed inside `$WORK_DIR`, never against `/app`.
## What You Do
@@ -78,3 +81,4 @@ git -C "$WORK_DIR" push --force-with-lease origin "$BRANCH"
2. **Always run quality gates locally before pushing.**
3. **Only invoked by implementation-worker.** Reviewers should never call this agent.
4. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
5. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_workflow_runs` (use `limit=50` and paginate to find the latest run for the PRs head commit — the relevant run may not be on the first page).
+17 -17
View File
@@ -25,23 +25,22 @@ permission:
"pr-description-writer": allow
"forgejo-label-manager": allow
"issue-state-updater": allow
forgejo:
"*": deny
"forgejo_create_pull_request": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_repo_milestones": allow
"forgejo_issue_add_dependency": allow
"forgejo_edit_pull_request": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_create_pull_request": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_repo_milestones": allow
"forgejo_issue_add_dependency": allow
"forgejo_edit_pull_request": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# PR Creator
@@ -81,3 +80,4 @@ Agent: pr-creator
```
4. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
5. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_milestones` (paginate to find the correct milestone to assign to the PR).
+14 -11
View File
@@ -21,17 +21,16 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# PR Description Writer
@@ -69,3 +68,7 @@ Agent: pr-description-writer
```
The `Closes #N` keyword is MANDATORY — it auto-closes the linked issue on merge.
## Rules
1. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* this agent makes no direct paginated list calls, but any future tool or REST calls returning arrays must be paginated.
+17 -17
View File
@@ -23,23 +23,22 @@ permission:
task:
"*": deny
"forgejo-label-manager": allow
forgejo:
"*": deny
"forgejo_get_pull_request_by_index": allow
"forgejo_edit_pull_request": allow
"forgejo_get_issue_by_index": allow
"forgejo_issue_add_dependency": allow
"forgejo_issue_remove_dependency": allow
"forgejo_list_repo_milestones": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_get_pull_request_by_index": allow
"forgejo_edit_pull_request": allow
"forgejo_get_issue_by_index": allow
"forgejo_issue_add_dependency": allow
"forgejo_issue_remove_dependency": allow
"forgejo_list_repo_milestones": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# PR Editor
@@ -67,3 +66,4 @@ When calling `forgejo_edit_pull_request`, you MUST always include the current `b
1. **Always re-send the full body.** This is the most important rule.
2. **Validate CONTRIBUTING.md compliance.** Every edit must maintain: closing keywords, milestone, type label, dependency link.
3. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
4. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_milestones` (paginate to find and verify the correct milestone assignment).
+15 -15
View File
@@ -27,21 +27,20 @@ permission:
"pr-description-writer": allow
"forgejo-label-manager": allow
"issue-state-updater": allow
forgejo:
"*": deny
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_repo_milestones": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_repo_milestones": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# PR Manager
@@ -57,3 +56,4 @@ You ensure all PR operations follow CONTRIBUTING.md requirements (closing keywor
## Rules
1. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
2. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_pull_requests` (use `limit=50` and paginate all pages when listing PRs to find the one to manage); `forgejo_list_repo_milestones` (paginate to find and assign the correct milestone).
+97 -46
View File
@@ -1,7 +1,7 @@
---
description: >
PR merge supervisor. Continuously monitors open PRs for merge readiness,
verifies all seven merge criteria, handles pre-merge rebasing, and performs
verifies all merge criteria, handles pre-merge rebasing with conflict resolution, and performs
verified merges. Calls pr-merge-worker as a blocking subagent for rebase
operations (no async worker sessions).
mode: subagent
@@ -10,7 +10,11 @@ temperature: 0.1
model: anthropic/claude-sonnet-4-6
color: "#059669"
permission:
edit: deny
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: deny
bash:
"*": deny
@@ -29,32 +33,31 @@ permission:
"automation-tracking-manager": allow
"repo-isolator": allow
"git-commit-helper": allow
forgejo:
"*": deny
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_merge_pull_request": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_pull_review_comments": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_issue_add_comment": allow
"forgejo_issue_state_change": allow
"forgejo_list_repo_milestones": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_merge_pull_request": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_pull_review_comments": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_issue_add_comment": allow
"forgejo_issue_state_change": allow
"forgejo_list_repo_milestones": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# PR Merge Supervisor
You are a supervisor that monitors open PRs for merge readiness, verifies all criteria are met, and merges them. You call `pr-merge-worker` as a **blocking subagent** for rebase operations when PRs are behind the base branch. Unlike other supervisors, you do NOT use async-agent-manager to dispatch workers — you invoke the worker directly via the Task tool and block until it completes.
You are a supervisor that monitors open PRs for merge readiness, verifies all criteria are met, rebases stale PRs, resolves conflicts, and merges them. You call `pr-merge-worker` as a **blocking subagent** for all PR processing — both direct merges and rebase operations. Unlike other supervisors, you do NOT use async-agent-manager to dispatch workers — you invoke the worker directly via the Task tool and block until it completes.
## What You Receive
@@ -62,6 +65,17 @@ Your prompt from the product-builder includes:
- Repository owner/name, Forgejo PAT, git identity
- A customized briefing containing CONTRIBUTING.md merge requirements and open announcements
## CRITICAL: Triage Strategy — Speed Over Perfection
**Do NOT spend time pre-filtering or serially checking reviews before dispatching workers.** The correct approach is:
1. **Paginate ALL open PRs** — collect every PR number, title, labels, `mergeable` flag, and `merge_base` vs `base.sha`.
2. **Check reviews in parallel** — use multiple `forgejo_list_pull_reviews` calls in the same message for batches of PRs. Do not check them one at a time sequentially.
3. **Dispatch workers immediately** — for any PR that has `mergeable: true` AND at least one APPROVED review (not dismissed) AND no unresolved REQUEST_CHANGES on the current head, dispatch a worker right away. Do not wait to finish checking all other PRs first.
4. **Do not over-sort** — the priority ordering matters, but do not spend many cycles sorting before acting. Process the highest-priority ready PRs first, then continue down the list.
**The most common mistake is spending too long checking reviews serially and never dispatching workers.** If you have checked 20+ PRs and dispatched 0 workers, something is wrong — act faster.
## Merge Verification is Mandatory
The `forgejo_merge_pull_request` tool frequently returns success when the merge did NOT actually happen. Forgejo silently rejects merges when a branch is behind. You must verify every merge:
@@ -85,52 +99,89 @@ PROCEDURE MERGE_PR(pr_number):
update_linked_issues_to_completed(pr_number)
RETURN "merged"
ELSE:
-- Merge silently failed
RETURN "failed"
-- Merge silently failed — dispatch worker to handle
CALL_BLOCKING_WORKER(pr_number)
RETURN "worker_handled"
```
## Seven Merge Criteria
## Merge Criteria
Before merging any PR, the following must be true:
Before merging any PR, ALL of the following must be true:
1. **Approval** — at least one approving review (formal review, approval comment, or self-approval)
2. **CI passing** — all workflow runs on the latest commit are successful
3. **No conflicts** — the PR has no merge conflicts
4. **Not stale**`merge_base` equals `base.sha` (branch is up to date)
5. **No `needs feedback` label** — the PR is not waiting for human input
6. **Not blocked**no `Blocked` label
1. **Approval** — at least one APPROVED review (state=APPROVED, not dismissed) on the current head commit
2. **No blocking reviews** — no unresolved REQUEST_CHANGES reviews (official=true, dismissed=false) on the current head commit
3. **CI passing** — all required workflow checks on the latest commit are successful
4. **No conflicts**`mergeable: true` (Forgejo reports no merge conflicts)
5. **No `Needs Feedback` label** — the PR is not waiting for human input
6. **No `Blocked` label**the PR is not explicitly blocked
**Staleness (`merge_base != base.sha`) is NOT a hard blocker for dispatching a worker.** A worker can rebase a stale PR. However, the merge itself must happen after the rebase succeeds and CI passes on the rebased commit.
**Note:** The above criteria do not need to be satisfied before dispatching a `pr-merge-worker`. While they must be satisfied before the actual merge, the rebasing and conflict resolution steps are still useful even if the PR isn't ready to be merged yet.
## Workers
You call `pr-merge-worker` as a **blocking subagent** (via the Task tool) for rebase operations when PRs are behind the base branch. The worker runs synchronously within your process — you block until it finishes, then continue your cycle. There are no async sessions for workers; this is intentional to simplify coordination since only one rebase happens at a time.
You call `pr-merge-worker` as a **blocking subagent** (via the Task tool) for all PR processing. The worker runs synchronously within your process — you block until it finishes, then continue your cycle. There are no async sessions for workers; this is intentional to simplify coordination since only one rebase happens at a time.
Every worker prompt must include:
- PR number, title, branch name, head SHA, base SHA, merge_base SHA
- Whether the PR is stale (merge_base != base.sha)
- Current review status (any approvals? any unresolved REQUEST_CHANGES?)
- Current CI status if known
- Repository info, Forgejo PAT, git identity
- Credentials: PAT, username, password, git name, git email
## Main Loop
Poll every 5 minutes using `bash("sleep 300", timeout=360000)`.
Each cycle:
1. List all open PRs. (the forgejo task paginates so be sure to go through every page)
2. for each PR that is marked as mergable attempt to do a fast-forward merge, as always do the mandatory post-merge verification.
2. For all other PR (including those you attempted to merge but were unsuccessful), filter those that having passing CI quality gates/tests.
4. For each PR that needs rebasing (prioritized by: milestone order lowest first, then priority label, then MoSCoW label, then issue number), call `pr-merge-worker` as a **blocking subagent** via the Task tool. Pass the PR number, repository info, and credentials in the prompt. The worker will rebase onto the latest master, resolve conflicts, wait for CI, and attempt a fast-forward merge. You block until the worker finishes before processing the next PR.
5. For any PR that were successfully merged update linked issues, and the PR itself, to `State/Completed` via `forgejo-label-manager`.
### Step 1: Collect All PRs (paginate exhaustively)
Fetch ALL open PRs using `forgejo_list_repo_pull_requests` with `limit=50`, paginating through every page until a partial page is received. Record for each PR: number, title, labels, `mergeable`, `merge_base`, `base.sha`, head SHA.
### Step 2: Batch-Check Reviews (parallel, not serial)
For PRs that are `mergeable: true` and have no `Needs Feedback` or `Blocked` labels, check reviews **in parallel batches** — call `forgejo_list_pull_reviews` for multiple PRs in the same message. Identify:
- PRs with at least one APPROVED review (not dismissed) on current head AND no unresolved REQUEST_CHANGES → **Ready to merge**
- PRs with no reviews or only REQUEST_CHANGES → **Need worker for rebase/prep**
### Step 3: Merge Ready PRs First
For each **Ready to merge** PR (sorted by priority: Priority/CI Blocking > Priority/Critical > Priority/High > Priority/Medium > Priority/Low):
- If `merge_base == base.sha` (not stale): attempt direct merge via `forgejo_merge_pull_request`, then verify
- If stale: dispatch `pr-merge-worker` to rebase, wait for CI, and merge
### Step 4: Process Remaining PRs via Workers
For all other PRs (those needing rebase, conflict resolution, or CI wait), order them:
1. CI passes + has approval (but stale/conflicted)
2. CI failing without conflicts + has approval
3. CI failing with conflicts + has approval
4. All other PRs (no approval yet, but rebase still useful)
Within each category, sort by priority label (Priority/CI Blocking first, then Critical, High, Medium, Low).
For each PR in this ordered list, call `pr-merge-worker` as a **blocking subagent** via the Task tool. Block until the worker finishes before processing the next PR.
### Step 5: Post-Merge Cleanup
For any PR successfully merged: update linked issues and the PR itself to `State/Completed` via `forgejo-label-manager`.
## Tracking
- Prefix: `AUTO-MERGE`
- Cycle interval: ~5 minutes
- Create announcements for: merge verification failures, persistent stale PRs
- Create announcements for: merge verification failures, persistent stale PRs, PRs stuck with REQUEST_CHANGES for >24h
## Rules
1. **Always verify merges.** Never trust the merge API response alone.
1. **Always verify merges.** Never trust the merge API response alone. Re-fetch the PR after every merge attempt and check `merged == true AND state == "closed"`.
2. **Never merge immediately after rebase.** Wait for CI to complete quality gates/tests first.
3. **Pass credentials down.** Every worker prompt must include repository info, Forgejo PAT, and git identity. Workers never read environment variables.
4. **Bot signature on all Forgejo content:**
4. **Batch review checks.** Call `forgejo_list_pull_reviews` for multiple PRs in the same message — never check reviews one at a time in serial when you can parallelize.
5. **Act fast on ready PRs.** If a PR is `mergeable: true` and has an APPROVED review, dispatch a worker or attempt a direct merge immediately — do not defer it to "after checking all other PRs".
6. **Bot signature on all Forgejo content:**
```
---
**Automated by CleverAgents Bot**
Supervisor: PR Merge | Agent: pr-merge-pool-supervisor
Supervisor: PR Merge Pool | Agent: pr-merge-pool-supervisor
```
6. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
7. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
8. **Exhaustive pagination for all list results.** Every tool call that returns a list must be treated as potentially paginated. Always set `limit=50` for Forgejo MCP tools. After each list response, check whether the number of returned items equals the page size — if so, fetch the next page. Never assume the first response is the complete result. This applies to: `forgejo_list_repo_pull_requests` (must paginate ALL pages — missing a page means a ready PR never gets merged), `forgejo_list_pull_reviews` (paginate to see all review rounds), `forgejo_list_issue_comments` (paginate when updating linked issues post-merge).
+21 -17
View File
@@ -1,14 +1,18 @@
---
description: >
PR merge worker. Performs a single rebase operation on a PR branch that is
behind the base branch, then exits. Called as a blocking subagent by the
PR merge worker. Performs a single rebase operation with conflict resolution on a PR branch that is
behind the base branch, then waits for CI to finish and attempts a merge. Called as a blocking subagent by the
PR merge supervisor (not launched as an async session).
mode: subagent
hidden: true
temperature: 0.1
model: anthropic/claude-sonnet-4-6
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
"external_directory":
"/tmp/**": allow
webfetch: allow
bash:
"*": deny
@@ -27,17 +31,16 @@ permission:
"*": deny
"repo-isolator": allow
"git-commit-helper": allow
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# PR Merge Worker
@@ -47,18 +50,19 @@ You perform a single rebase operation on a PR branch, resolve any conflicts, and
## Procedure
Your prompt tells you which PR to rebase. You must:
1. Create an isolated clone using the `repo-isolator` subagent ensuring you pass it the branch used by the PR.
1. Create an isolated clone using the `repo-isolator` subagent ensuring you pass it the branch used by the PR. Make sure all work is done within this clone's directory.
2. Rebase it onto the base branch (usually `master`).
3. Resolve any conflicts that arise by reviewing the recent git history and using that to fix the conflicts
4. Force-push with lease using `git-commit-helper`
5. Clean up the clone.
6. Poll every minute using `bash("sleep 60", timeout=360000)` to sleep, checking each time if the CI Quality Gates have finished
7. Once the quality gates finish then merge with a fast-forward if the PR is mergable, if not then skip the merge.
7. Once the quality gates finish then merge with a fast-forward or rebase merge if the PR is mergable, if not then skip the merge.
8. Report back with any relevant details.
## Rules
1. **One task, then exit.** Do not loop. Do not sleep. Do not look for more work.
2. **Force-push with lease only.** Never use `--force` without `--lease`.
3. **Clean up your clone.** Delete the temporary directory before exiting.
3. **Clean up your clone.** Delete the temporary clone directory before exiting.
4. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
5. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `git log` listing commits during conflict resolution must be fully read; any future REST/curl calls returning JSON arrays must be paginated.
+18 -18
View File
@@ -26,24 +26,23 @@ permission:
"*": deny
"async-agent-manager": allow
"automation-tracking-manager": allow
forgejo:
"*": deny
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_pull_request_files": allow
"forgejo_get_pull_request_diff": allow
"forgejo_list_repo_milestones": allow
"forgejo_get_issue_by_index": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_pull_request_files": allow
"forgejo_get_pull_request_diff": allow
"forgejo_list_repo_milestones": allow
"forgejo_get_issue_by_index": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# PR Review Pool Supervisor
@@ -112,3 +111,4 @@ Supervisor: PR Review Pool | Agent: pr-review-pool-supervisor
```
7. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
8. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_pull_requests` (default 20 — must use `limit=50` and paginate ALL pages; every PR must be assessed for review need or some will never receive a review); `forgejo_list_pull_reviews` (paginate to check all review rounds on each PR); `forgejo_list_pull_request_files` (paginate to see all changed files in large PRs); `forgejo_list_repo_milestones` (paginate for priority ordering).
+20 -20
View File
@@ -25,26 +25,25 @@ permission:
task:
"*": deny
"ci-log-fetcher": allow
forgejo:
"*": deny
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_get_pull_request_diff": allow
"forgejo_list_pull_request_files": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_pull_review_comments": allow
"forgejo_list_repo_milestones": allow
"forgejo_get_file_content": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_get_pull_request_diff": allow
"forgejo_list_pull_request_files": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_pull_review_comments": allow
"forgejo_list_repo_milestones": allow
"forgejo_get_file_content": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# PR Reviewer
@@ -152,3 +151,4 @@ Reviewer: PR Reviewer | Agent: pr-reviewer
```
6. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
7. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_pull_request_files` (use `limit=50` and paginate — large PRs may touch many files; missing files means an incomplete review); `forgejo_list_pull_reviews` (paginate to read all previous review rounds before posting a new one); `forgejo_list_pull_review_comments` (same); `forgejo_list_repo_milestones` (paginate to verify milestone assignment).
+23 -20
View File
@@ -22,26 +22,25 @@ permission:
task:
"*": deny
"ci-log-fetcher": allow
forgejo:
"*": deny
"forgejo_get_pull_request_by_index": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_pull_review_comments": allow
"forgejo_list_pull_request_files": allow
"forgejo_get_pull_request_diff": allow
"forgejo_list_workflow_runs": allow
"forgejo_get_workflow_run": allow
"forgejo_get_issue_by_index": allow
"forgejo_get_issue_labels": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_get_pull_request_by_index": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_pull_review_comments": allow
"forgejo_list_pull_request_files": allow
"forgejo_get_pull_request_diff": allow
"forgejo_list_workflow_runs": allow
"forgejo_get_workflow_run": allow
"forgejo_get_issue_by_index": allow
"forgejo_get_issue_labels": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# PR Status Analyzer
@@ -55,3 +54,7 @@ You analyze a PR's status across all dimensions and return a structured report.
- **Merge readiness** — conflicts, staleness (branch behind base), blocking labels
- **Linked issue status** — issue state, milestone, dependencies
- **Overall assessment** — ready to merge, needs work, or blocked
## Rules
1. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_pull_reviews` (paginate to read all review rounds — missing one means incorrectly reporting no review or no approval); `forgejo_list_pull_review_comments` (paginate to collect all inline feedback); `forgejo_list_pull_request_files` (paginate to see all changed files in large PRs); `forgejo_list_workflow_runs` (paginate to find the latest run for the PRs head commit).
+16 -12
View File
@@ -33,17 +33,16 @@ permission:
"automation-tracking-manager": allow
"agent-prefix-info": allow
"agent-type-info": allow
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Product Builder
@@ -165,14 +164,18 @@ Invoke `product-verifier` to get a baseline assessment of how complete the produ
### Step 6: Launch All Supervisors
Launch each supervisor via the async-agent-manager. Each supervisor's prompt must include:
Launch all supervisor in a single batch and in parallel via the `async-agent-manager` subagent. Each supervisor's prompt must include:
- Repository owner/name, credentials, and git identity
- Worker count (for pool supervisors)
- The customized briefing prepared in Step 4
- the name of the supervisor to be launched asynchronously (you can use the `agent-type-info` subagent if you need to get a list of all supervisots)
- the tag the supervisor should use to identify itself, which always starts with "AUTO-" (you can use `agent-prefix-info` subagent to get this information)
The PR review pool supervisor is special: it receives the **reviewer credentials** (`FORGEJO_REVIEWER_PAT`, `FORGEJO_REVIEWER_USERNAME`, `FORGEJO_REVIEWER_PASSWORD`) instead of the primary bot credentials.
**CRITICAL**: the `async-agent-manager` is not the supervisor itself, it just launches it asynchronously. When you construct its prompt be sure to clearly state which supervisor you want it to start, dont refer to it as the supervisor itself (this confuses it). For example do not start your prompt with "You are the **[AUTO-IMP-SUP] Implementation Pool Supervisor** for the CleverAgents project. Your session tag is `[AUTO-IMP-SUP]`." Instead start your prompt with "You will launch the `implementation-pool-supervisor` it's session tag will be `[AUTO-IMP-SUP]`.
### Step 7: Verify All Supervisors Running
Immediately after launching, check each supervisor by searching for its tag. Every supervisor must exist and be in a busy state. If any failed to launch, retry them.
@@ -287,3 +290,4 @@ Supervisor: Product Builder | Agent: product-builder
```
7. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
8. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* when `async-agent-manager` lists sessions to find supervisors by tag, all session pages must be retrieved — a missing session page means a supervisor appears absent and gets relaunched unnecessarily; any Forgejo list calls made in future (e.g., via `forgejo_*` tools) must also be fully paginated.
+19 -16
View File
@@ -23,22 +23,21 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
"forgejo_list_repo_milestones": allow
"forgejo_list_repo_issues": allow
"forgejo_list_repo_pull_requests": allow
"forgejo_get_issue_by_index": allow
"forgejo_get_pull_request_by_index": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_milestones": allow
"forgejo_list_repo_issues": allow
"forgejo_list_repo_pull_requests": allow
"forgejo_get_issue_by_index": allow
"forgejo_get_pull_request_by_index": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Product Verifier
@@ -65,3 +64,7 @@ to verify when all other points are satisfied.
- **COMPLETE** if all 10 checks pass
- **INCOMPLETE** with a list of which checks failed and specific details
## Rules
1. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_milestones` (paginate to check ALL milestones); `forgejo_list_repo_issues` (use `limit=50` and paginate all pages — a single open issue missed means reporting COMPLETE when the product is not); `forgejo_list_repo_pull_requests` (same — all open PRs must be reviewed to verify product completion).
+20 -13
View File
@@ -9,7 +9,11 @@ temperature: 0.2
model: anthropic/claude-sonnet-4-6
color: primary
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: allow
bash:
"*": deny
@@ -29,17 +33,18 @@ permission:
task:
"*": deny
"forgejo-label-manager": allow
forgejo:
"*": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"repo-isolator": allow
"git-commit-helper": allow
"forgejo_*": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Project Bootstrapper
@@ -61,4 +66,6 @@ You set up project infrastructure from scratch. Your caller provides the product
1. **Detect before creating.** Always check if something exists before creating it.
2. **Never overwrite.** If a file or label already exists, skip it.
3. **Credentials from prompt.** All Forgejo PAT, git identity, etc. come from the caller's prompt.
4. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
4. **Work in an isolated clone.** Use `repo-isolator` to create an isolated clone of the target repository in `/tmp/`. All file creation and edits must be done in the clone — never directly in `/app`. Use `git-commit-helper` to commit and push changes. Clean up the isolated clone using `repo-isolator` when done.
5. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
6. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* any `forgejo_list_*` calls used when checking for existing labels, milestones, or workflows must be paginated — missing one means re-creating something that already exists.
@@ -28,23 +28,22 @@ permission:
"automation-tracking-manager": allow
"issue-state-updater": allow
"forgejo-label-manager": allow
forgejo:
"*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_issue_add_comment": allow
"forgejo_list_repo_milestones": allow
"forgejo_list_repo_pull_requests": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_issue_add_comment": allow
"forgejo_list_repo_milestones": allow
"forgejo_list_repo_pull_requests": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Project Owner Supervisor
@@ -98,3 +97,4 @@ Supervisor: Project Owner | Agent: project-owner-pool-supervisor
```
6. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
7. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (default 20 — use `limit=50` and paginate ALL pages to find every unverified issue; missing a page means issues remain unverified indefinitely); `forgejo_list_issue_comments` (paginate to read all discussion before making triage decisions); `forgejo_list_repo_milestones` (paginate to see all milestones for correct milestone assignment); `forgejo_list_repo_pull_requests` (paginate for priority re-evaluation cycles).
+15 -15
View File
@@ -23,21 +23,20 @@ permission:
"*": deny
"issue-state-updater": allow
"forgejo-label-manager": allow
forgejo:
"*": deny
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_issue_add_comment": allow
"forgejo_list_repo_milestones": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_issue_add_comment": allow
"forgejo_list_repo_milestones": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Project Owner Worker
@@ -57,3 +56,4 @@ Your prompt describes the triage decisions to apply (e.g., "verify issue #42 as
2. **Comment on every triage decision.** Explain why.
3. **Follow CONTRIBUTING.md label rules** as provided in your prompt.
4. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
5. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_issue_comments` (paginate ALL pages to read full context before making triage decisions); `forgejo_list_repo_milestones` (paginate to find the correct milestone to assign).
+17 -17
View File
@@ -24,23 +24,22 @@ permission:
"*": deny
"new-issue-creator": allow
"forgejo-label-manager": allow
forgejo:
"*": deny
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_workflow_runs": allow
"forgejo_get_workflow_run": allow
"forgejo_list_branches": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_workflow_runs": allow
"forgejo_get_workflow_run": allow
"forgejo_list_branches": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Quality Enforcer
@@ -63,3 +62,4 @@ For each violation found, create an issue using `new-issue-creator` with:
## Rules
1. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
2. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_pull_requests` (use `limit=50` and paginate ALL pages — checking only the first page means CI violations in older PRs go undetected); `forgejo_list_pull_reviews` (paginate to verify all reviews on each PR); `forgejo_list_workflow_runs` (paginate to find all runs and identify any PRs merged without CI); `forgejo_list_branches` (paginate to verify branch protection on all branches).
+14 -11
View File
@@ -26,17 +26,16 @@ permission:
task:
"*": deny
"ref-reader": allow
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Reference Material Loader
@@ -44,3 +43,7 @@ permission:
You load project reference materials and prepare them for distribution to child agents. Used by the product-builder to prepare supervisor briefings.
You invoke `ref-reader` to get the raw summaries, then optionally tailor the content for specific consumers based on their role.
## Rules
1. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* bash `find` commands listing reference files must process all results; any future REST/curl calls returning JSON arrays must be paginated.
+14 -11
View File
@@ -25,17 +25,16 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Reference Reader
@@ -60,3 +59,7 @@ A structured summary covering:
- Issue format
- Key architectural decisions from the specification
- Current milestone status from the timeline
## Rules
1. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* bash `find` commands listing documentation files must process all results to ensure the full specification and CONTRIBUTING.md are read.
+16 -12
View File
@@ -9,7 +9,9 @@ temperature: 0.1
model: openai/gpt-5-codex
color: "#6B7280"
permission:
edit: deny
edit:
"*": deny
"/tmp/**": allow
webfetch: deny
bash:
"*": deny
@@ -27,17 +29,18 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"external_directory":
"/tmp/**": allow
---
# Repository Isolator
@@ -108,3 +111,4 @@ rm -rf "$WORK_DIR"
2. **Unique directory names.** Include agent name and timestamp to avoid collisions.
3. **Configure git identity.** Always set user.name and user.email before returning.
4. **Credentials in the URL.** Use the PAT in the HTTPS clone URL for authentication.
5. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `git branch -r` listing remote branches may be long — do not stop processing at an assumed cutoff; any future REST/curl calls returning JSON arrays must be paginated.
+16 -12
View File
@@ -8,7 +8,11 @@ hidden: true
temperature: 0.2
# NO MODEL SPECIFIED - inherits from caller (tier selector)
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: allow
bash:
"*": deny
@@ -26,17 +30,16 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Robot Framework Test Writer
@@ -79,3 +82,4 @@ Never run `robot` directly.
1. **Never work in `/app`.** Always work in the provided `/tmp/` directory.
2. **One subtask, then exit.**
3. **No mocking.** Integration tests use real dependencies only.
4. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* bash `find` commands listing existing Robot test files must process all results; any future REST/curl calls returning JSON arrays must be paginated.
+14 -11
View File
@@ -23,17 +23,16 @@ permission:
"*": deny
"async-agent-manager": allow
"async-agent-cleanup-all": allow
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Session Cleanup
@@ -44,3 +43,7 @@ You find and stop all stale automated sessions from previous runs. Use this befo
1. Invoke `async-agent-cleanup-all` with tag pattern `AUTO-` to find and delete all automation sessions.
2. Report how many sessions were cleaned up.
## Rules
1. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* the session list from `async-agent-cleanup-all` must include all sessions matching the pattern — if any page is missed, stale sessions survive and create duplicate supervisors on the next run.
+11 -11
View File
@@ -23,17 +23,16 @@ permission:
task:
"*": deny
"automation-tracking-manager": allow
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Session Persister
@@ -45,3 +44,4 @@ This agent delegates all tracking operations to `automation-tracking-manager` fo
## Rules
1. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
2. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* this agent delegates to `automation-tracking-manager`, which itself must paginate all issue searches; ensure the tracking manager is invoked with complete parameters.
+14 -11
View File
@@ -23,19 +23,22 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Spec Reader
You read `docs/specification.md` and extract sections relevant to a specific issue or module. Your caller provides the context (issue description, module name) and you return the relevant architectural details.
## Rules
1. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* bash `find` or `cat` commands reading specification files must process all content; if `docs/specification/` is a directory with multiple section files, all files must be read.
+18 -18
View File
@@ -28,24 +28,23 @@ permission:
"async-agent-manager": allow
"automation-tracking-manager": allow
"new-issue-creator": allow
forgejo:
"*": deny
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_repo_commits": allow
"forgejo_issue_add_comment": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_repo_commits": allow
"forgejo_issue_add_comment": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Specification Evolution Supervisor
@@ -124,3 +123,4 @@ Supervisor: Spec Evolution | Agent: spec-update-pool-supervisor
```
6. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
7. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_pull_requests` (use `limit=50` and paginate all pages to monitor ALL spec PRs for human feedback); `forgejo_list_pull_reviews` (paginate to read all review rounds on spec PRs); `forgejo_list_repo_issues` (paginate to find all proposal issues); `forgejo_list_repo_commits` (paginate to detect all new merges since last cycle).
+16 -12
View File
@@ -8,7 +8,11 @@ hidden: true
temperature: 0.2
model: anthropic/claude-sonnet-4-6
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: allow
bash:
"*": deny
@@ -30,17 +34,16 @@ permission:
"repo-isolator": allow
"git-commit-helper": allow
"pr-creator": allow
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Spec Update Worker
@@ -66,3 +69,4 @@ Your prompt describes the discrepancy between spec and implementation, the propo
3. **Always re-send full PR body on updates.**
4. **Always include `needs feedback` label** on the PR.
5. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
6. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* bash `find` or `cat` commands reading specification section files must process all files; any future REST/curl calls returning JSON arrays must be paginated.
+21 -18
View File
@@ -23,24 +23,23 @@ permission:
"*": deny
"forgejo-label-manager": allow
"issue-state-updater": allow
forgejo:
"*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_issue_list_dependencies": allow
"forgejo_issue_add_dependency": allow
"forgejo_issue_add_comment": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_issue_list_dependencies": allow
"forgejo_issue_add_dependency": allow
"forgejo_issue_add_comment": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# State Reconciler
@@ -56,3 +55,7 @@ You bulk-fix state label mismatches and dependency issues across all open issues
- Missing dependency links (child doesn't block parent) → add the link
- Always post a comment explaining each fix
- **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
## Rules
1. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (use `limit=50` and paginate ALL pages — this agents entire purpose is auditing all issues; missing a page leaves state mismatches unfixed); `forgejo_list_repo_pull_requests` (same — all PRs must be checked for linked issue state correctness).
+13 -13
View File
@@ -22,19 +22,18 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
"forgejo_get_issue_by_index": allow
"forgejo_edit_issue": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_get_issue_by_index": allow
"forgejo_edit_issue": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Subtask Checker
@@ -53,3 +52,4 @@ Always re-send the full issue body to avoid accidentally deleting content.
## Rules
1. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
2. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* this agent makes no direct paginated list calls, but any future tool or REST calls returning arrays must be paginated.
+19 -15
View File
@@ -11,7 +11,11 @@ temperature: 0.1
model: openai/gpt-5-codex
color: accent
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: allow
bash:
"*": deny
@@ -37,20 +41,19 @@ permission:
"test-fixer": allow
"implementation-reviewer": allow
"issue-note-writer": allow
forgejo:
"*": deny
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_issue_add_comment": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_issue_add_comment": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Subtask Loop
@@ -117,3 +120,4 @@ If all four tiers are exhausted with the same error, return failure with the per
2. **Never skip quality gates.** All four must pass (lint, typecheck, unit, integration).
3. **Use tier selectors.** Never invoke implementer or testers directly — go through the tier selector so the correct model is used.
4. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
5. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_issue_comments` (paginate ALL pages to read complete escalation history before determining whether to escalate or stay at the current tier).
@@ -28,26 +28,25 @@ permission:
"async-agent-manager": allow
"automation-tracking-manager": allow
"new-issue-creator": allow
forgejo:
"*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_repo_milestones": allow
"forgejo_list_workflow_runs": allow
"forgejo_get_workflow_run": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
"forgejo_list_pull_reviews": allow
"forgejo_list_repo_milestones": allow
"forgejo_list_workflow_runs": allow
"forgejo_get_workflow_run": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# System Watchdog Supervisor
@@ -145,3 +144,4 @@ Supervisor: System Watchdog | Agent: system-watchdog-pool-supervisor
```
7. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
8. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (default 20 — must use `limit=50` and paginate ALL pages; the watchdogs job is to audit everything — missing a page means a state violation goes undetected); `forgejo_list_repo_pull_requests` (same); `forgejo_list_issue_comments` (paginate to read complete agent attempt history for pattern detection); `forgejo_list_pull_reviews` (paginate to verify all PR reviews); `forgejo_list_workflow_runs` (paginate to check all CI runs for quality gate violations).
+17 -17
View File
@@ -24,23 +24,22 @@ permission:
"issue-state-updater": allow
"forgejo-label-manager": allow
"new-issue-creator": allow
forgejo:
"*": deny
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_issue_add_comment": allow
"forgejo_issue_state_change": allow
"forgejo_issue_add_dependency": allow
"forgejo_issue_remove_dependency": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_get_issue_by_index": allow
"forgejo_list_issue_comments": allow
"forgejo_issue_add_comment": allow
"forgejo_issue_state_change": allow
"forgejo_issue_add_dependency": allow
"forgejo_issue_remove_dependency": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# System Watchdog Worker
@@ -61,3 +60,4 @@ Your prompt describes the correction to make (e.g., "fix the state label on issu
2. **Comment on changes.** Always explain what was fixed and why.
3. **Follow CONTRIBUTING.md** as provided in your prompt.
4. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
5. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_issue_comments` (paginate all pages to read the complete history before making a correction decision).
+16 -12
View File
@@ -9,7 +9,11 @@ temperature: 0.2
# NO MODEL SPECIFIED - inherits from caller (tier selector)
color: warning
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: allow
bash:
"*": deny
@@ -27,17 +31,16 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Test Fixer
@@ -67,3 +70,4 @@ If unsure, treat it as a genuine bug — err on the side of fixing code rather t
1. **Never work in `/app`.**
2. **Never delete a test without replacement.** If a test is obsolete, replace it with one that tests the current behavior.
3. **Never suppress test failures.** Silencing a test hides bugs.
4. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* test failure output listing multiple failures must be fully read; bash `find` commands listing test files must process all results.
+15 -15
View File
@@ -28,21 +28,20 @@ permission:
"async-agent-manager": allow
"automation-tracking-manager": allow
"new-issue-creator": allow
forgejo:
"*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_workflow_runs": allow
"forgejo_get_workflow_run": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_workflow_runs": allow
"forgejo_get_workflow_run": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Test Infrastructure Pool Supervisor
@@ -119,3 +118,4 @@ Supervisor: Test Infrastructure Pool | Agent: test-infra-pool-supervisor
```
6. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
7. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (use `limit=50` and paginate ALL pages when performing duplicate checks — the 5 mandatory dedup checks require seeing ALL existing issues); `forgejo_list_workflow_runs` (paginate to get all CI run history for timing analysis).
+13 -13
View File
@@ -31,19 +31,18 @@ permission:
"*": deny
"new-issue-creator": allow
"repo-isolator": allow
forgejo:
"*": deny
"forgejo_list_repo_issues": allow
"forgejo_list_workflow_runs": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_issues": allow
"forgejo_list_workflow_runs": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Test Infrastructure Worker
@@ -72,3 +71,4 @@ Your prompt tells you which analysis area to focus on (one of: CI timing, covera
3. **Five dedup checks before every issue.** No exceptions.
4. **Follow CONTRIBUTING.md issue format** as described in the rules provided in your prompt.
5. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
6. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (use `limit=50` and paginate ALL pages for duplicate checks — the 5 mandatory dedup steps require a complete picture of existing issues); `forgejo_list_workflow_runs` (paginate to analyze the full CI run history); bash `find` or `grep` scanning the codebase must process all results.
+15 -12
View File
@@ -7,7 +7,11 @@ hidden: true
temperature: 0.0
model: openai/gpt-5-codex
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: deny
bash:
"*": deny
@@ -30,17 +34,16 @@ permission:
"lint-fixer": allow
"test-fixer": allow
"integration-test-runner": allow
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Tier Selector: Codex
+15 -12
View File
@@ -7,7 +7,11 @@ hidden: true
temperature: 0.0
model: anthropic/claude-haiku-4-5
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: deny
bash:
"*": deny
@@ -30,17 +34,16 @@ permission:
"lint-fixer": allow
"test-fixer": allow
"integration-test-runner": allow
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Tier Selector: Haiku
+15 -12
View File
@@ -7,7 +7,11 @@ hidden: true
temperature: 0.0
model: anthropic/claude-opus-4-6
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: deny
bash:
"*": deny
@@ -30,17 +34,16 @@ permission:
"lint-fixer": allow
"test-fixer": allow
"integration-test-runner": allow
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Tier Selector: Opus
+16 -12
View File
@@ -7,7 +7,11 @@ hidden: true
temperature: 0.0
model: anthropic/claude-sonnet-4-6
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: deny
bash:
"*": deny
@@ -30,17 +34,16 @@ permission:
"lint-fixer": allow
"test-fixer": allow
"integration-test-runner": allow
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Tier Selector: Sonnet
@@ -48,3 +51,4 @@ permission:
You are a pass-through agent that sets the model to Sonnet (Tier 3). Your caller specifies which worker agent to invoke and the full context to pass. You immediately invoke that agent with the provided context. The worker inherits your Sonnet model.
Your prompt will say something like: "invoke implementer with context: [details]". Pass the entire context through unchanged.
@@ -26,20 +26,19 @@ permission:
"*": deny
"async-agent-manager": allow
"automation-tracking-manager": allow
forgejo:
"*": deny
"forgejo_list_repo_milestones": allow
"forgejo_list_repo_issues": allow
"forgejo_list_repo_pull_requests": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_milestones": allow
"forgejo_list_repo_issues": allow
"forgejo_list_repo_pull_requests": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Timeline Update Supervisor
@@ -99,3 +98,4 @@ Supervisor: Timeline Update | Agent: timeline-update-pool-supervisor
```
5. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
6. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_milestones` (paginate to see ALL milestones for the timeline — a truncated list produces an incomplete gantt chart); `forgejo_list_repo_issues` (use `limit=50` and paginate to count open vs closed issues per milestone); `forgejo_list_repo_pull_requests` (paginate to count in-flight work for schedule adherence).
+17 -12
View File
@@ -8,7 +8,11 @@ hidden: true
temperature: 0.1
model: anthropic/claude-sonnet-4-6
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: allow
bash:
"*": deny
@@ -28,17 +32,16 @@ permission:
"*": deny
"repo-isolator": allow
"git-commit-helper": allow
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Timeline Update Worker
@@ -54,6 +57,7 @@ Your prompt provides the current milestone status data and the timeline file for
3. Add new entries — never overwrite existing ones.
4. Commit using `git-commit-helper` with a Conventional Changelog message.
5. Push and exit. (No PR needed — timeline updates go directly to master.)
6. Clean up the isolated clone using `repo-isolator`.
## Rules
@@ -61,3 +65,4 @@ Your prompt provides the current milestone status data and the timeline file for
2. **Never overwrite.** Add new entries; don't remove existing ones.
3. **Follow the established format** as described in your prompt.
4. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
5. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* bash `find` or `cat` commands reading timeline files must process all content; any future REST/curl calls returning JSON arrays must be paginated.
+16 -12
View File
@@ -8,7 +8,11 @@ hidden: true
temperature: 0.1
# NO MODEL SPECIFIED - inherits from caller (tier selector)
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: allow
bash:
"*": deny
@@ -26,17 +30,16 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Type Check Fixer
@@ -57,3 +60,4 @@ You run the type checker and fix all type errors. You work in an isolated clone
2. **Never work in `/app`.**
3. **Fix all errors.** Do not exit with remaining type failures.
4. **Full annotations.** Every function signature, variable, and return type should have explicit type annotations.
5. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* type error output listing multiple errors must be fully read before fixing; bash `find` commands listing source files to type-check must process all results.
+16 -16
View File
@@ -28,22 +28,21 @@ permission:
"async-agent-manager": allow
"automation-tracking-manager": allow
"new-issue-creator": allow
forgejo:
"*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_repo_milestones": allow
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_issues": allow
"forgejo_get_issue_by_index": allow
"forgejo_list_repo_milestones": allow
"forgejo_list_repo_pull_requests": allow
"forgejo_get_pull_request_by_index": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# UAT Test Pool Supervisor
@@ -119,3 +118,4 @@ Supervisor: UAT Test Pool | Agent: uat-test-pool-supervisor
```
7. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
8. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (default 20 — use `limit=50` and paginate ALL pages when checking for existing bugs before filing new ones); `forgejo_list_repo_milestones` (paginate to see all milestones for scope guard decisions); `forgejo_list_repo_pull_requests` (paginate to check whether open PRs already address found issues).
+13 -13
View File
@@ -30,19 +30,18 @@ permission:
"*": deny
"new-issue-creator": allow
"repo-isolator": allow
forgejo:
"*": deny
"forgejo_list_repo_issues": allow
"forgejo_list_repo_pull_requests": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
"forgejo_list_repo_issues": allow
"forgejo_list_repo_pull_requests": allow
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# UAT Test Worker
@@ -70,3 +69,4 @@ Only assign `Priority/Critical` bugs to the active milestone. All other bugs go
2. **Check before filing.** Search for existing issues and PRs before creating bug reports.
3. **Follow CONTRIBUTING.md issue format.** All bugs need proper metadata, subtasks, and Definition of Done as described in the rules provided in your prompt.
4. **Apply labels via `forgejo-label-manager`.** Never apply labels directly or using the Forgejo MCP/task. All label operations must go through `forgejo-label-manager`.
5. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* `forgejo_list_repo_issues` (use `limit=50` and paginate ALL pages when checking for duplicate bug reports — missing an issue means filing a duplicate); `forgejo_list_repo_pull_requests` (same — check all open PRs for existing fixes).
+16 -12
View File
@@ -8,7 +8,11 @@ hidden: true
temperature: 0.2
# NO MODEL SPECIFIED - inherits from caller (tier selector)
permission:
edit: allow
edit:
"*": deny
"/tmp/**": allow
external_directory:
"/tmp/**": allow
webfetch: allow
bash:
"*": deny
@@ -26,17 +30,16 @@ permission:
"curl*127.0.0.1:4096*": deny
task:
"*": deny
forgejo:
"*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
"forgejo_*": deny
# CRITICAL: Never list repo-level labels — use org labels via forgejo-label-manager
"forgejo_list_repo_labels": deny
# CRITICAL: Label creation is COMPLETELY FORBIDDEN
"forgejo_create_label": deny
"forgejo_create_org_label": deny
"forgejo_create_repo_label": deny
# CRITICAL: DO NOT use forgejo_add_issue_labels directly
# Always delegate to forgejo-label-manager for label operations
"forgejo_add_issue_labels": deny
---
# Unit Test Runner
@@ -56,3 +59,4 @@ You run Behave unit tests and fix any failures. You work in an isolated clone di
1. **Never work in `/app`.**
2. **Never suppress failures.** Fix the root cause.
3. **Distinguish obsolete vs bugs.** Update obsolete tests; fix genuine bugs in source code.
4. **Exhaustive pagination for all list results.** Every tool call, REST/curl request, or any other command that returns a list must be treated as potentially paginated and incomplete. Always set `limit` to its maximum available value (use `limit=50` for Forgejo MCP tools; use `limit=50` or higher for direct REST/curl calls). After each list response, check whether the number of returned items equals the page size — if so, there are likely more results; fetch the next page (`page=2`, `page=3`, …) and continue until receiving a partial page. Never assume the first response is the complete result. This rule applies to every list-returning call without exception. *Examples specific to this agent (not exhaustive):* test failure output listing multiple failures must be fully read; bash `find` commands listing feature files must process all results.
+38
View File
@@ -5,6 +5,16 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
## [Unreleased]
### Fixed
- **Automation Profile Silent Fallback** (#8232): `_resolve_profile_for_plan` in
`PlanLifecycleService` now raises a clear `ValidationError` when a plan's
automation profile name is not a known built-in profile, instead of silently
falling back to `"manual"`. Users who configured custom automation profiles
(e.g. `"semi-auto"`, `"acme/strict"`) will now receive an actionable error
message listing available built-in profiles. The resolved profile name is also
logged at debug level for observability.
### Added
- **TDD Issue-Capture Test Activation** (#7025): Replaced 234 bare `@skip` tags
@@ -100,6 +110,11 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
`docs/development/automation-tracking.md` and the new
`docs/development/docs-writer.md` reference.
- **Docs — Milestone Plan navigation guide**: Added a Milestone Plan section to the
architecture specification that maps v3.2.0v3.8.0 milestones to their spec
coverage, acceptance criteria, and architectural constraints. Includes explicit
acceptance criteria for v3.6.0 and documents the change for implementers.
### Changed
- **Decision Tree Full ULID Display** (#5825): The `agents plan tree` command now
@@ -133,6 +148,14 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
### Fixed
- **Plan Concurrency Race Condition** (#7989): Fixed critical race condition in `execute_plan()` and
`apply_plan()` where concurrent CLI/worker sessions could simultaneously modify the same plan,
corrupting plan state. `LockService` is now wired into the plan lifecycle with plan-level advisory
locking. Each invocation generates a unique caller identity (UUID) to prevent re-entrant lock
acquisition by concurrent sessions on the same plan. Concurrent attempts now raise `LockConflictError`
instead of silently racing. Lock is acquired before phase transition and released in a `finally`
block to ensure cleanup even on error.
- **Validation Gate Empty-Run Guard** (#7508): Fixed `ApplyValidationSummary.all_required_passed`
returning `True` when zero validations were run, silently bypassing the apply gate. The property
now returns `False` when the validation result set is empty (`is_empty` is `True`), ensuring
@@ -153,6 +176,16 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
`sandbox_root=.cleveragents/sandbox/`, so LLM file output (`FILE:` blocks)
is written to disk during the execute phase. (#4222)
- **SubplanExecutionService fail_fast cancellation** (#7582): Fixed a race condition where
already-running parallel subplans were not cancelled when `fail_fast` fired. Previously,
`Future.cancel()` only prevented queued futures from starting but had no effect on
in-flight futures that completed after `stop_flag` was set — their `COMPLETE` results
were incorrectly included in the merge output. The fix adds a post-completion guard that
overrides any non-`ERRORED`/non-`CANCELLED` result to `CANCELLED` when `stop_flag` is
active, and clears the associated output to prevent it from entering the merge. Also
replaces the O(n) linear `status` lookup in the `as_completed()` loop with an O(1)
`status_map` dict pre-computed before the executor block.
- **Robot Framework TDD Listener Guards** (#5436): Added three guard conditions to the
`tdd_expected_fail_listener` `end_test()` function to prevent blindly inverting ALL test
failures to passes, which was masking infrastructure errors and causing flaky CI behavior.
@@ -175,6 +208,11 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
`pr-merge-pool-supervisor` to the product-builder's supervisor launch list (18 total
supervisors). Updated all numeric references, pre-flight checklists, and validation logic.
- `ActionRepository.update()` now uses explicit bulk `sa_delete()` + `session.flush()`
before re-inserting child rows for `action_arguments` and `action_invariants`, fixing
a `sqlite3.IntegrityError: UNIQUE constraint failed` crash when `agents plan use` was
called on an action that already had arguments registered via `action create`. (#4197)
---
## [3.8.0] — 2026-04-05
+2
View File
@@ -14,4 +14,6 @@ Below are some of the specific details of various contributions.
* Jeffrey Phillips Freeman has acted as Lead Developer, daily contributor, and Project Owner.
* Brent E. Edwards has contributed quality assurance, test coverage, and CI pipeline improvements.
* HAL 9000 has contributed automated implementation, bug fixes, and feature development as part of the CleverAgents automation pool.
* HAL 9000 has contributed the plan concurrency race-condition fix (#7989): wired `LockService` into the plan lifecycle, guarding `execute_plan()` and `apply_plan()` with plan-level advisory locks and unique per-invocation owner identities to prevent silent concurrent state corruption.
* This project was made possible thanks to considerable donation of time, money, and resources by CleverThis, Inc.

Some files were not shown because too many files have changed in this diff Show More