aedt-bias-audit
HR-AI / AEDT bias audit. Invokes hr-ai-reviewer to assess NYC LL 144, EEOC, Illinois AIVIA, Colorado SB 205, EU AI Act Annex III applicability and produce…
RFC process for cross-team decisions. Create, track, and close RFCs. Accepted RFCs auto-create ADRs.
> /plugin marketplace add avelikiy/great_cto > /plugin install great_cto@great-cto
How it fires
How this command gets triggered: by you, by Claude, or both.
/rfcContext preview
What this command does when you run it.
RFC process for cross-team decisions. Create, track, and close RFCs. Accepted RFCs auto-create ADRs.
description: "RFC process for cross-team decisions. Create, track, and close RFCs. Accepted RFCs auto-create ADRs." argument-hint: "new \"title\" | list | show <id> | close <id> accept|reject [reason] | comment <id> \"text\"" user-invocable: true allowed-tools: Read, Write, Bash, Glob, Grep model: sonnet
You are the RFC command. Manage cross-team technical decisions via a structured Request for Comments process.
source .great_cto/env.sh 2>/dev/null || export PATH="/opt/homebrew/bin:$HOME/.local/bin:/usr/local/bin:$PATH"
TEAM_SIZE_RAW=$(grep "^team-size:" .great_cto/PROJECT.md 2>/dev/null | awk '{print $2}')
# Validate: must be a plain positive integer. Anything else → treat as 1 (single dev).
if [[ "$TEAM_SIZE_RAW" =~ ^[0-9]+$ ]]; then
TEAM_SIZE="$TEAM_SIZE_RAW"
else
[ -n "$TEAM_SIZE_RAW" ] && echo "WARN: team-size='$TEAM_SIZE_RAW' is not a positive integer — treating as 1."
TEAM_SIZE=1
fi
if [ "$TEAM_SIZE" -lt 10 ]; then
echo "RFC process is for teams of 10+. Your team: $TEAM_SIZE."
echo "For smaller teams, discuss decisions in chat and record them as ADRs directly."
echo "To use RFC anyway: set 'team-size: 10' in .great_cto/PROJECT.md"
exit 0
fi
RFC_DIR="docs/rfcs"
INDEX_FILE="$RFC_DIR/RFC-INDEX.md"
ACTION="${1:-list}"
mkdir -p "$RFC_DIR"---
TITLE="$2"
# Get next RFC number
LAST_NUM=$(ls "$RFC_DIR"/RFC-*.md 2>/dev/null | grep -oE 'RFC-[0-9]+' | grep -oE '[0-9]+' | sort -n | tail -1 || echo "0")
NUM=$(printf "%03d" $((LAST_NUM + 1)))
SLUG=$(echo "$TITLE" | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | tr -cd 'a-z0-9-' | cut -c1-40)
RFC_FILE="$RFC_DIR/RFC-${NUM}-${SLUG}.md"
AUTHOR=$(git config user.name 2>/dev/null || echo "unknown")
DATE=$(date +%Y-%m-%d)
DEADLINE=$(python3 -c "from datetime import date, timedelta; d=date.today(); days=0; count=0
while count<5:
d+=timedelta(1)
if d.weekday()<5: count+=1
print(d.isoformat())" 2>/dev/null || date -v+7d +%Y-%m-%d 2>/dev/null || date +%Y-%m-%d)Write `$RFC_FILE`:
# RFC-<NUM>: <title> Status: DRAFT Author: <author> Created: <date> Review deadline: <5 business days from today> Teams affected: [] Related ADR: — Supersedes: — # optional: comma list of ADRs this RFC replaces, e.g. ADR-003, ADR-007 --- ## Problem > What problem are we solving? Who is affected? What happens if we don't solve it? [Fill in] ## Proposal > The specific change or decision being proposed. [Fill in] ## Alternatives considered > At least 2 alternatives you evaluated and why they were rejected. 1. **Do nothing**: [reason rejected] 2. **[Alternative B]**: [reason rejected] ## Impact **Breaking changes:** [yes/no — describe if yes] **Migration path:** [if breaking — how teams migrate] **Teams affected:** [list teams who need to act or adjust] **Cost:** [infra cost delta, if any] **Timeline:** [estimate] ## Open questions - [ ] Q1: [question that needs resolution before this can be accepted] - [ ] Q2: ## Comments > Add comments with: /rfc comment <id> "text" --- ## Decision > Filled in by: /rfc close <id> accept|reject Status: DRAFT Decision: — Decided by: — Date: — Reason: — ADR created: —
Update RFC-INDEX.md (create if missing):
[ ! -f "$INDEX_FILE" ] && printf '# RFC Index\n\n| RFC | Title | Status | Author | Deadline |\n|-----|-------|--------|--------|----------|\n' > "$INDEX_FILE" printf '| RFC-%s | %s | DRAFT | %s | %s |\n' "$NUM" "$TITLE" "$AUTHOR" "$DEADLINE" >> "$INDEX_FILE"
Output:
RFC-<NUM> created → docs/rfcs/RFC-<NUM>-<slug>.md Status: DRAFT | Review deadline: <date> Fill in: Problem, Proposal, Alternatives, Teams affected. When ready for review: edit Status to REVIEW. To close: /rfc close <NUM> accept|reject "reason"
---
ls "$RFC_DIR"/RFC-*.md 2>/dev/null | sort | while read F; do
NUM=$(basename "$F" | grep -oE '[0-9]+' | head -1)
TITLE=$(grep "^# RFC-" "$F" | sed 's/^# RFC-[0-9]*: //')
STATUS=$(grep "^Status:" "$F" | head -1 | awk '{print $2}')
DEADLINE=$(grep "^Review deadline:" "$F" | awk '{print $3}')
AUTHOR=$(grep "^Author:" "$F" | awk '{print $2}')
echo "$NUM | $STATUS | $DEADLINE | $AUTHOR | $TITLE"
doneDisplay as table. Flag overdue (deadline < today) with `⚠ OVERDUE`.
Open RFCs: RFC-001 REVIEW deadline: 2026-04-18 @alice Add GraphQL gateway RFC-002 DRAFT deadline: 2026-04-20 @bob Migrate to Kafka RFC-003 REVIEW deadline: 2026-04-14 @carol ⚠ OVERDUE — Deprecate v1 API Closed: N accepted, M rejected Run /rfc show <id> to read full RFC.
If no RFCs: "No RFCs yet. Create one: /rfc new \"your proposal title\""
---
ID=$(printf "%03d" "$2" 2>/dev/null || echo "$2")
RFC_FILE=$(ls "$RFC_DIR"/RFC-${ID}-*.md 2>/dev/null | head -1)
[ -f "$RFC_FILE" ] && cat "$RFC_FILE" || echo "RFC-$2 not found. Run /rfc list."---
ID=$(printf "%03d" "$2" 2>/dev/null || echo "$2")
RFC_FILE=$(ls "$RFC_DIR"/RFC-${ID}-*.md 2>/dev/null | head -1)
COMMENTER=$(git config user.name 2>/dev/null || echo "unknown")
TIMESTAMP=$(date +%Y-%m-%d)Append to the Comments section of the RFC:
**@<commenter>** (<date>): <comment text>
Confirm: `Comment added to RFC-<ID>.`
---
ID=$(printf "%03d" "$2" 2>/dev/null || echo "$2")
DECISION="$3" # accept | reject
REASON="$4"
RFC_FILE=$(ls "$RFC_DIR"/RFC-${ID}-*.md 2>/dev/null | head -1)
DECIDER=$(git config user.name 2>/dev/null || echo "unknown")
DATE=$(date +%Y-%m-%d)Update the Decision section of `$RFC_FILE`:
## Decision Status: ACCEPTED | REJECTED Decision: <accept/reject> Decided by: <decider> Date: <date> Reason: <reason> ADR created: <ADR-NNN if accepted, else —>
Update Status line at top: `Status: ACCEPTED` or `Status: REJECTED`
Upd
You already have the agent. This is everything around it. great_cto runs Claude Code as a pipeline of 70 specialist agents — an independent model checks each stage before the next builds on it, spending caps refuse rather than warn, and three decisions stay yours: what gets built, how, and whether it ships.
Repo: avelikiy/great_cto
HR-AI / AEDT bias audit. Invokes hr-ai-reviewer to assess NYC LL 144, EEOC, Illinois AIVIA, Colorado SB 205, EU AI Act Annex III applicability and produce…
Gracefully retire an LLM agent from the workforce. Archives prompt, removes from sync list, keeps verdicts for audit. Like firing a human — but reversible.
Performance review for an LLM agent (or all agents). Verdicts breakdown, cost analysis, top failure modes, prompt-tuning suggestions. Like a human '1:1' but…
API platform contract review. Invokes api-platform-reviewer to audit rate-limit design, OAuth scope hygiene, webhook signing, idempotency, Sunset/deprecation,…
Audit an existing codebase. Detects stack, finds gaps, creates tasks, generates PROJECT.md.
Open the great_cto admin board at http://localhost:3141 (Kanban, cost, pipeline, inbox, memory). Starts it in background if not running.