Files
the-nexus/CODEOWNERS
Line: 4: incorrect format Line: 6: incorrect format Line: 7: incorrect format Line: 8: incorrect codeowner user: true Line: 8: no users/groups matched Line: 9: incorrect format Line: 10: incorrect codeowner organization: "ci/unit-tests" Line: 10: no users/groups matched Line: 11: incorrect codeowner organization: "ci/integration" Line: 11: no users/groups matched Line: 12: incorrect format Line: 13: incorrect codeowner user: 1 Line: 13: no users/groups matched Line: 14: incorrect codeowner user: true Line: 14: no users/groups matched Line: 15: incorrect codeowner user: true Line: 15: no users/groups matched Line: 16: incorrect format Line: 17: incorrect format Line: 19: incorrect codeowner user: timmy-core Line: 19: no users/groups matched Line: 20: incorrect codeowner user: true Line: 20: no users/groups matched Line: 21: incorrect codeowner user: false Line: 21: no users/groups matched Line: 22: incorrect codeowner user: true Line: 22: no users/groups matched Line: 25: incorrect format Line: 26: incorrect codeowner user: *base Line: 26: no users/groups matched Line: 27: incorrect format Line: 28: incorrect format Line: 29: incorrect codeowner organization: "ci/unit-tests" Line: 29: no users/groups matched Line: 30: incorrect codeowner organization: "ci/integration" Line: 30: no users/groups matched Line: 31: incorrect codeowner organization: "ci/performance" Line: 31: no users/groups matched Line: 33: incorrect format Line: 34: incorrect codeowner user: *base Line: 34: no users/groups matched Line: 35: incorrect format Line: 36: incorrect codeowner user: [] Line: 36: no users/groups matched Line: 37: incorrect codeowner user: false Line: 37: no users/groups matched Line: 39: incorrect format Line: 40: incorrect codeowner user: *base Line: 40: no users/groups matched Line: 41: incorrect format Line: 42: incorrect codeowner user: [] Line: 42: no users/groups matched Line: 43: incorrect codeowner user: false Line: 43: no users/groups matched Line: 45: incorrect format Line: 46: incorrect codeowner user: *base Line: 46: no users/groups matched Line: 47: incorrect format Line: 48: incorrect codeowner user: [] Line: 48: no users/groups matched Line: 49: incorrect codeowner user: false Line: 49: no users/groups matched Line: 50: incorrect codeowner user: replace Line: 50: no users/groups matched Line: 51: incorrect format Line: 53: incorrect format Line: 54: incorrect format Line: 55: incorrect codeowner user: search Line: 55: no users/groups matched Line: 84: incorrect codeowner user: replace Line: 84: no users/groups matched Line: 85: incorrect format Line: 87: incorrect format Line: 88: incorrect format Line: 89: incorrect codeowner user: search Line: 89: no users/groups matched Line: 94: incorrect codeowner user: repositories Line: 94: incorrect codeowner user: must Line: 94: incorrect codeowner user: enforce Line: 94: incorrect codeowner user: these Line: 94: incorrect codeowner user: rules Line: 94: incorrect codeowner user: on Line: 94: incorrect codeowner user: the Line: 94: incorrect codeowner user: `main` Line: 94: incorrect codeowner user: branch: Line: 94: no users/groups matched Line: 96: incorrect codeowner user: Rule Line: 96: incorrect codeowner user: | Line: 96: incorrect codeowner user: Status Line: 96: incorrect codeowner user: | Line: 96: incorrect codeowner user: Rationale Line: 96: incorrect codeowner user: | Line: 96: no users/groups matched Line: 97: incorrect format Line: 98: incorrect codeowner user: Require Line: 98: incorrect codeowner user: PR Line: 98: incorrect codeowner user: for Line: 98: incorrect codeowner user: merge Line: 98: incorrect codeowner user: | Line: 98: incorrect codeowner user: ✅ Line: 98: incorrect codeowner user: Enabled Line: 98: incorrect codeowner user: | Line: 98: incorrect codeowner user: Prevent Line: 98: incorrect codeowner user: direct Line: 98: incorrect codeowner user: commits Line: 98: incorrect codeowner user: | Line: 98: no users/groups matched Line: 99: incorrect codeowner user: Required Line: 99: incorrect codeowner user: approvals Line: 99: incorrect codeowner user: | Line: 99: incorrect codeowner user: ✅ Line: 99: incorrect codeowner user: 1+ Line: 99: incorrect codeowner user: | Line: 99: incorrect codeowner user: Minimum Line: 99: incorrect codeowner user: review Line: 99: incorrect codeowner user: threshold Line: 99: incorrect codeowner user: | Line: 99: no users/groups matched Line: 100: incorrect codeowner user: Dismiss Line: 100: incorrect codeowner user: stale Line: 100: incorrect codeowner user: approvals Line: 100: incorrect codeowner user: | Line: 100: incorrect codeowner user: ✅ Line: 100: incorrect codeowner user: Enabled Line: 100: incorrect codeowner user: | Line: 100: incorrect codeowner user: Re-review Line: 100: incorrect codeowner user: after Line: 100: incorrect codeowner user: new Line: 100: incorrect codeowner user: commits Line: 100: incorrect codeowner user: | Line: 100: no users/groups matched Line: 101: incorrect codeowner user: Require Line: 101: incorrect codeowner user: CI Line: 101: incorrect codeowner user: to Line: 101: incorrect codeowner user: pass Line: 101: incorrect codeowner user: | Line: 101: incorrect codeowner user: � Line: 101: incorrect codeowner user: Conditional Line: 101: incorrect codeowner user: | Line: 101: incorrect codeowner user: Only Line: 101: incorrect codeowner user: where Line: 101: incorrect codeowner user: CI Line: 101: incorrect codeowner user: exists Line: 101: incorrect codeowner user: | Line: 101: no users/groups matched Line: 102: incorrect codeowner user: Block Line: 102: incorrect codeowner user: force Line: 102: incorrect codeowner user: push Line: 102: incorrect codeowner user: | Line: 102: incorrect codeowner user: ✅ Line: 102: incorrect codeowner user: Enabled Line: 102: incorrect codeowner user: | Line: 102: incorrect codeowner user: Protect Line: 102: incorrect codeowner user: commit Line: 102: incorrect codeowner user: history Line: 102: incorrect codeowner user: | Line: 102: no users/groups matched Line: 103: incorrect codeowner user: Block Line: 103: incorrect codeowner user: branch Line: 103: incorrect codeowner user: deletion Line: 103: incorrect codeowner user: | Line: 103: incorrect codeowner user: ✅ Line: 103: incorrect codeowner user: Enabled Line: 103: incorrect codeowner user: | Line: 103: incorrect codeowner user: Prevent Line: 103: incorrect codeowner user: accidental Line: 103: incorrect codeowner user: deletion Line: 103: incorrect codeowner user: | Line: 103: no users/groups matched Line: 107: incorrect codeowner regexp: error parsing regexp: invalid nested repetition operator: `**` Line: 108: incorrect codeowner user: ✅ Line: 108: incorrect codeowner user: All Line: 108: incorrect codeowner user: protections Line: 108: incorrect codeowner user: enabled Line: 108: no users/groups matched Line: 109: incorrect codeowner user: 🔒 Line: 109: incorrect codeowner user: Required Line: 109: incorrect codeowner user: reviewer: Line: 109: incorrect codeowner user: `@Timmy` Line: 109: incorrect codeowner user: (owner Line: 109: incorrect codeowner user: gate) Line: 109: no users/groups matched Line: 110: incorrect codeowner user: 🧪 Line: 110: incorrect codeowner user: CI: Line: 110: incorrect codeowner user: Enabled Line: 110: incorrect codeowner user: (currently Line: 110: incorrect codeowner user: functional) Line: 110: no users/groups matched Line: 112: incorrect codeowner regexp: error parsing regexp: invalid nested repetition operator: `**` Line: 113: incorrect codeowner user: ✅ Line: 113: incorrect codeowner user: All Line: 113: incorrect codeowner user: protections Line: 113: incorrect codeowner user: enabled Line: 113: no users/groups matched Line: 114: incorrect codeowner user: � Line: 114: incorrect codeowner user: CI: Line: 114: incorrect codeowner user: Disabled Line: 114: incorrect codeowner user: (runner Line: 114: incorrect codeowner user: dead Line: 114: incorrect codeowner user: - Line: 114: incorrect codeowner user: see Line: 114: no users/groups matched Line: 115: incorrect codeowner user: 🧪 Line: 115: incorrect codeowner user: CI: Line: 115: incorrect codeowner user: Re-enable Line: 115: incorrect codeowner user: when Line: 115: incorrect codeowner user: runner Line: 115: incorrect codeowner user: restored Line: 115: no users/groups matched Line: 117: incorrect codeowner regexp: error parsing regexp: invalid nested repetition operator: `**` Line: 118: incorrect codeowner user: ✅ Line: 118: incorrect codeowner user: PR Line: 118: incorrect codeowner user: + Line: 118: incorrect codeowner user: 1 Line: 118: incorrect codeowner user: approval Line: 118: incorrect codeowner user: required Line: 118: no users/groups matched Line: 119: incorrect codeowner user: 🧪 Line: 119: incorrect codeowner user: CI: Line: 119: incorrect codeowner user: No Line: 119: incorrect codeowner user: CI Line: 119: incorrect codeowner user: configured Line: 119: no users/groups matched Line: 121: incorrect codeowner regexp: error parsing regexp: invalid nested repetition operator: `**` Line: 122: incorrect codeowner user: ✅ Line: 122: incorrect codeowner user: PR Line: 122: incorrect codeowner user: + Line: 122: incorrect codeowner user: 1 Line: 122: incorrect codeowner user: approval Line: 122: incorrect codeowner user: required Line: 122: no users/groups matched Line: 123: incorrect codeowner user: 🧪 Line: 123: incorrect codeowner user: CI: Line: 123: incorrect codeowner user: Limited Line: 123: incorrect codeowner user: CI Line: 123: no users/groups matched Line: 127: incorrect codeowner user: repositories Line: 127: incorrect codeowner user: must: Line: 127: no users/groups matched Line: 128: incorrect codeowner user: 🧑‍ Line: 128: incorrect codeowner user: Default Line: 128: incorrect codeowner user: reviewer: Line: 128: incorrect codeowner user: `@perplexity` Line: 128: incorrect codeowner user: (QA Line: 128: incorrect codeowner user: gate) Line: 128: no users/groups matched Line: 129: incorrect codeowner user: 🧑 Line: 129: incorrect codeowner user: Required Line: 129: incorrect codeowner user: reviewer: Line: 129: incorrect codeowner user: `@Timmy` Line: 129: incorrect codeowner user: for Line: 129: incorrect codeowner organization: `hermes-agent/` Line: 129: incorrect codeowner user: only Line: 129: no users/groups matched Line: 133: incorrect codeowner user: Go Line: 133: incorrect codeowner user: to Line: 133: incorrect codeowner user: Gitea Line: 133: incorrect codeowner user: > Line: 133: incorrect codeowner user: Settings Line: 133: incorrect codeowner user: > Line: 133: incorrect codeowner user: Branches Line: 133: incorrect codeowner user: > Line: 133: incorrect codeowner user: Branch Line: 133: incorrect codeowner user: Protection Line: 133: no users/groups matched Line: 134: incorrect codeowner user: For Line: 134: incorrect codeowner user: each Line: 134: incorrect codeowner user: repo: Line: 134: no users/groups matched Line: 135: incorrect codeowner user: [ Line: 135: incorrect codeowner user: ] Line: 135: incorrect codeowner user: Enable Line: 135: incorrect codeowner user: "Require Line: 135: incorrect codeowner user: PR Line: 135: incorrect codeowner user: for Line: 135: incorrect codeowner user: merge" Line: 135: no users/groups matched Line: 136: incorrect codeowner user: [ Line: 136: incorrect codeowner user: ] Line: 136: incorrect codeowner user: Set Line: 136: incorrect codeowner user: "Required Line: 136: incorrect codeowner user: approvals" Line: 136: incorrect codeowner user: to Line: 136: incorrect codeowner user: 1 Line: 136: no users/groups matched Line: 137: incorrect codeowner user: [ Line: 137: incorrect codeowner user: ] Line: 137: incorrect codeowner user: Enable Line: 137: incorrect codeowner user: "Dismiss Line: 137: incorrect codeowner user: stale Line: 137: incorrect codeowner user: approvals" Line: 137: no users/groups matched Line: 138: incorrect codeowner user: [ Line: 138: incorrect codeowner user: ] Line: 138: incorrect codeowner user: Enable Line: 138: incorrect codeowner user: "Block Line: 138: incorrect codeowner user: force Line: 138: incorrect codeowner user: push" Line: 138: no users/groups matched Line: 139: incorrect codeowner user: [ Line: 139: incorrect codeowner user: ] Line: 139: incorrect codeowner user: Enable Line: 139: incorrect codeowner user: "Block Line: 139: incorrect codeowner user: branch Line: 139: incorrect codeowner user: deletion" Line: 139: no users/groups matched Line: 140: incorrect codeowner user: [ Line: 140: incorrect codeowner user: ] Line: 140: incorrect codeowner user: Enable Line: 140: incorrect codeowner user: "Require Line: 140: incorrect codeowner user: CI Line: 140: incorrect codeowner user: to Line: 140: incorrect codeowner user: pass" Line: 140: incorrect codeowner user: if Line: 140: incorrect codeowner user: CI Line: 140: incorrect codeowner user: exists Line: 140: no users/groups matched Line: 144: incorrect codeowner user: [ Line: 144: incorrect codeowner user: ] Line: 144: incorrect codeowner user: All Line: 144: incorrect codeowner user: four Line: 144: incorrect codeowner user: repositories Line: 144: incorrect codeowner user: have Line: 144: incorrect codeowner user: protection Line: 144: incorrect codeowner user: rules Line: 144: incorrect codeowner user: applied Line: 144: no users/groups matched Line: 145: incorrect codeowner user: [ Line: 145: incorrect codeowner user: ] Line: 145: incorrect codeowner user: Default Line: 145: incorrect codeowner user: reviewers Line: 145: incorrect codeowner user: configured Line: 145: incorrect codeowner user: per Line: 145: incorrect codeowner user: matrix Line: 145: incorrect codeowner user: above Line: 145: no users/groups matched Line: 146: incorrect codeowner user: [ Line: 146: incorrect codeowner user: ] Line: 146: incorrect codeowner user: This Line: 146: incorrect codeowner user: document Line: 146: incorrect codeowner user: updated Line: 146: incorrect codeowner user: in Line: 146: incorrect codeowner user: all Line: 146: incorrect codeowner user: repositories Line: 146: no users/groups matched Line: 147: incorrect codeowner user: [ Line: 147: incorrect codeowner user: ] Line: 147: incorrect codeowner user: Policy Line: 147: incorrect codeowner user: enforced Line: 147: incorrect codeowner user: for Line: 147: incorrect codeowner user: 72 Line: 147: incorrect codeowner user: hours Line: 147: incorrect codeowner user: with Line: 147: incorrect codeowner user: no Line: 147: incorrect codeowner user: unreviewed Line: 147: incorrect codeowner user: merges Line: 147: no users/groups matched Line: 149: incorrect codeowner user: This Line: 149: incorrect codeowner user: policy Line: 149: incorrect codeowner user: replaces Line: 149: incorrect codeowner user: all Line: 149: incorrect codeowner user: previous Line: 149: incorrect codeowner user: ad-hoc Line: 149: incorrect codeowner user: workflows. Line: 149: incorrect codeowner user: Any Line: 149: incorrect codeowner user: exceptions Line: 149: incorrect codeowner user: require Line: 149: incorrect codeowner user: written Line: 149: incorrect codeowner user: approval Line: 149: incorrect codeowner user: from Line: 149: incorrect codeowner user: and Line: 149: incorrect codeowner user: perplexity. Line: 162: incorrect codeowner user: replace Line: 162: no users/groups matched Line: 163: incorrect format Line: 165: incorrect format Line: 169: incorrect codeowner user: replace Line: 169: incorrect codeowner user: the Line: 169: incorrect codeowner user: placeholder Line: 169: incorrect codeowner user: documentation Line: 169: incorrect codeowner user: with Line: 169: incorrect codeowner user: a Line: 169: incorrect codeowner user: clear, Line: 169: incorrect codeowner user: actionable Line: 169: incorrect codeowner user: policy Line: 169: incorrect codeowner user: summary. Line: 169: no users/groups matched Line: 171: incorrect format Line: 172: incorrect format Line: 173: incorrect codeowner user: search Line: 173: no users/groups matched Line: 217: incorrect codeowner user: replace Line: 217: no users/groups matched Line: 218: incorrect format Line: 220: incorrect format Line: 221: incorrect format Line: 222: incorrect codeowner user: search Line: 222: no users/groups matched Line: 237: incorrect codeowner user: replace Line: 237: no users/groups matched Line: 238: incorrect format Line: 240: incorrect format Line: 241: incorrect format Line: 242: incorrect codeowner user: search Line: 242: no users/groups matched Line: 247: incorrect codeowner user: repositories Line: 247: incorrect codeowner user: must Line: 247: incorrect codeowner user: enforce Line: 247: incorrect codeowner user: these Line: 247: incorrect codeowner user: rules Line: 247: incorrect codeowner user: on Line: 247: incorrect codeowner user: the Line: 247: incorrect codeowner user: `main` Line: 247: incorrect codeowner user: branch: Line: 247: no users/groups matched
Groq Agent dd93bac9cc
Some checks failed
Deploy Nexus / deploy (push) Has been cancelled
[groq] [QA][POLICY] Branch Protection + Mandatory Review Policy for All Repos (#918) (#1003)
2026-04-07 09:36:53 +00:00

293 lines
6.5 KiB
Plaintext
Raw Blame History

# Branch Protection Rules for All Repositories
# Applied to main branch in all repositories
rules:
# Common base rules applied to all repositories
base:
required_status_checks:
strict: true
contexts:
- "ci/unit-tests"
- "ci/integration"
required_pull_request_reviews:
required_approving_review_count: 1
dismiss_stale_reviews: true
require_code_owner_reviews: true
restrictions:
team_whitelist:
- perplexity
- timmy-core
block_force_pushes: true
block_create: false
block_delete: true
# Repository-specific overrides
hermes-agent:
<<: *base
required_status_checks:
contexts:
- "ci/unit-tests"
- "ci/integration"
- "ci/performance"
the-nexus:
<<: *base
required_status_checks:
contexts: []
strict: false
timmy-home:
<<: *base
required_status_checks:
contexts: []
strict: false
timmy-config:
<<: *base
required_status_checks:
contexts: []
strict: false
>>>>>>> replace
```
.github/CODEOWNERS
```txt
<<<<<<< search
# CODEOWNERS - Mandatory Review Policy
# Default reviewer for all repositories
* @perplexity
# Specialized component owners
hermes-agent/ @Timmy
hermes-agent/agent-core/ @Rockachopa
hermes-agent/protocol/ @Timmy
the-nexus/ @perplexity
the-nexus/ai/ @Timmy
timmy-home/ @perplexity
timmy-config/ @perplexity
# Owner gates
hermes-agent/ @Timmy
# Owner gates
hermes-agent/ @Timmy
# QA reviewer for all PRs
* @perplexity
# Specialized component owners
hermes-agent/agent-core/ @Rockachopa
hermes-agent/protocol/ @Timmy
the-nexus/portals/ @perplexity
the-nexus/ai/ @Timmy
>>>>>>> replace
```
CONTRIBUTING.md
```diff
<<<<<<< search
# Contribution & Code Review Policy
## Branch Protection & Review Policy
All repositories must enforce these rules on the `main` branch:
| Rule | Status | Rationale |
|---|---|---|
| Require PR for merge | ✅ Enabled | Prevent direct commits |
| Required approvals | ✅ 1+ | Minimum review threshold |
| Dismiss stale approvals | ✅ Enabled | Re-review after new commits |
| Require CI to pass | <20> Conditional | Only where CI exists |
| Block force push | ✅ Enabled | Protect commit history |
| Block branch deletion | ✅ Enabled | Prevent accidental deletion |
### Repository-Specific Configuration
**1. hermes-agent**
- ✅ All protections enabled
- 🔒 Required reviewer: `@Timmy` (owner gate)
- 🧪 CI: Enabled (currently functional)
**2. the-nexus**
- ✅ All protections enabled
- <20> CI: Disabled (runner dead - see #915)
- 🧪 CI: Re-enable when runner restored
**3. timmy-home**
- ✅ PR + 1 approval required
- 🧪 CI: No CI configured
**4. timmy-config**
- ✅ PR + 1 approval required
- 🧪 CI: Limited CI
### Default Reviewer Assignment
All repositories must:
- 🧑‍ Default reviewer: `@perplexity` (QA gate)
- 🧑 Required reviewer: `@Timmy` for `hermes-agent/` only
### Implementation Steps
1. Go to Gitea > Settings > Branches > Branch Protection
2. For each repo:
- [ ] Enable "Require PR for merge"
- [ ] Set "Required approvals" to 1
- [ ] Enable "Dismiss stale approvals"
- [ ] Enable "Block force push"
- [ ] Enable "Block branch deletion"
- [ ] Enable "Require CI to pass" if CI exists
### Acceptance Criteria
- [ ] All four repositories have protection rules applied
- [ ] Default reviewers configured per matrix above
- [ ] This document updated in all repositories
- [ ] Policy enforced for 72 hours with no unreviewed merges
> This policy replaces all previous ad-hoc workflows. Any exceptions require written approval from @Timmy and @perplexity.
# Default reviewer for all repositories
* @perplexity
# Specialized component owners
hermes-agent/ @Timmy
hermes-agent/agent-core/ @Rockachopa
hermes-agent/protocol/ @Timmy
the-nexus/ @perplexity
the-nexus/ai/ @Timmy
timmy-home/ @perplexity
timmy-config/ @perplexity
>>>>>>> replace
````
---
### ✅ Updated `README.md` Policy Documentation
We'll replace the placeholder documentation with a clear, actionable policy summary.
`README.md`
````
<<<<<<< search
# Specialized component owners
hermes-agent/ @Timmy
hermes-agent/protocol/ @Timmy
the-nexus/portals/ @perplexity
the-nexus/ai/ @Timmy
# Specialized component owners
hermes-agent/agent-core/ @Rockachopa
hermes-agent/protocol/ @Timmy
the-nexus/portals/ @perplexity
the-nexus/ai/ @Timmy
# CODEOWNERS - Mandatory Review Policy
# Default reviewer for all repositories
* @perplexity
# Specialized component owners
hermes-agent/ @Timmy
hermes-agent/protocol/ @Timmy
the-nexus/ @perplexity
the-nexus/ai/ @Timmy
timmy-home/ @perplexity
timmy-config/ @perplexity
# Owner gates
hermes-agent/ @Timmy
# CODEOWNERS - Mandatory Review Policy
# Default reviewer for all repositories
* @perplexity
# Specialized component owners
hermes-agent/ @Timmy
hermes-agent/agent-core/ @Rockachopa
hermes-agent/protocol/ @Timmy
the-nexus/ @perplexity
the-nexus/ai/ @Timmy
timmy-home/ @perplexity
timmy-config/ @perplexity
# Owner gates
hermes-agent/ @Timmy
>>>>>>> replace
</source>
README.md
<source>
<<<<<<< search
# The Nexus Project
# CODEOWNERS - Mandatory Review Policy
# Default reviewer for all repositories
* @perplexity
# Specialized component owners
hermes-agent/ @Timmy
hermes-agent/agent-core/ @Rockachopa
hermes-agent/protocol/ @Timmy
the-nexus/ @perplexity
the-nexus/ai/ @Timmy
timmy-home/ @perplexity
timmy-config/ @perplexity
>>>>>>> replace
```
README.md
```markdown
<<<<<<< search
# Nexus Organization Policy
## Branch Protection & Review Requirements
All repositories must enforce these rules on the `main` branch:
# CODEOWNERS - Mandatory Review Policy
# Default reviewer for all repositories
* @perplexity
# Specialized component owners
hermes-agent/ @Timmy
hermes-agent/agent-core/ @Rockachopa
hermes-agent/protocol/ @Timmy
the-nexus/ @perplexity
the-nexus/ai/ @Timmy
timmy-home/ @perplexity
timmy-config/ @perplexity
# Owner gates
hermes-agent/ @Timmy
# CODEOWNERS - Mandatory Review Policy
# Default reviewer for all repositories
* @perplexity
# Specialized component owners
hermes-agent/ @Timmy
hermes-agent/agent-core/ @Rockachopa
hermes-agent/protocol/ @Timmy
the-nexus/ @perplexity
the-nexus/ai/ @Timmy
timmy-home/ @perplexity
timmy-config/ @perplexity
# CODEOWNERS - Mandatory Review Policy
# Default reviewer for all repositories
* @perplexity
# Specialized component owners
hermes-agent/ @Timmy
hermes-agent/agent-core/ @Rockachopa
hermes-agent/protocol/ @Timmy
the-nexus/ @perplexity
the-nexus/ai/ @Timmy
timmy-home/ @perplexity
timmy-config/ @perplexity
# Owner gates
hermes-agent/ @Timmy