Skip to content

Commit ae64fa6

Browse files
committed
Initial release: Growth Coach Agent v0.1.0
- Single source of truth (source/) + 4 harness adapters (Claude Code, Codex, OpenClaw, Hermes) - Three-part response contract: high-perspective analysis + genuine comfort + specific blessing-in-disguise - Crisis routing hard rule (3 hotlines + 'stop coaching' posture) - OpenClaw standalone agent install via install/openclaw-agent.sh - Multi-harness consistency enforced by harnesses.json + scripts/check-harnesses.sh - CONTRIBUTING.md two-tier quality bar (7 non-negotiable + 9 recommended) - CI lint workflow on PR (scripts/validate.sh + check-harnesses.sh) - 5 example docs (vent-debrief-card, vs-generic-llm, cross-session-redemption, crisis-routing, openclaw-install) - 3 GitHub issue templates (feedback, variant-request, bug-report)
0 parents  commit ae64fa6

35 files changed

Lines changed: 4237 additions & 0 deletions
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
name: Bug report
2+
description: Something is broken in an adapter, install script, or CI workflow.
3+
title: "[bug] "
4+
labels: ["bug", "needs-triage"]
5+
assignees: []
6+
7+
body:
8+
- type: dropdown
9+
id: harness
10+
attributes:
11+
label: Where did you see the bug?
12+
options:
13+
- Claude Code (Subagent)
14+
- Claude Code (Skill)
15+
- Codex CLI
16+
- OpenClaw (Skill)
17+
- OpenClaw (Standalone Agent)
18+
- Hermes Agent
19+
- Build tooling (sync.sh, validate.sh, check-harnesses.sh)
20+
- Install script (openclaw-agent.sh)
21+
- CI workflow
22+
- README / docs
23+
- Other
24+
validations:
25+
required: true
26+
27+
- type: dropdown
28+
id: severity
29+
attributes:
30+
label: Severity
31+
options:
32+
- Critical (crisis hotline missing, agent pathologically labeling user, banned phrase appearing in output)
33+
- High (install fails, agent doesn't load)
34+
- Medium (wrong path, formatting glitch, broken link)
35+
- Low (typo, wording could be clearer)
36+
validations:
37+
required: true
38+
39+
- type: textarea
40+
id: what_happened
41+
attributes:
42+
label: What happened?
43+
description: 1-3 sentences. Quote the bad output if applicable.
44+
validations:
45+
required: true
46+
47+
- type: textarea
48+
id: expected
49+
attributes:
50+
label: What did you expect?
51+
validations:
52+
required: true
53+
54+
- type: textarea
55+
id: repro
56+
attributes:
57+
label: Repro steps
58+
description: Commands you ran, files you edited, environment (OS, harness version).
59+
validations:
60+
required: false
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
name: Coaching session feedback
2+
description: Tell us about a Growth Coach session that went great or went wrong. This helps us tune the system prompt.
3+
title: "[feedback] "
4+
labels: ["feedback", "needs-triage"]
5+
assignees: []
6+
7+
body:
8+
- type: dropdown
9+
id: session_type
10+
attributes:
11+
label: Session outcome
12+
description: How did the session feel from your side?
13+
options:
14+
- Helped a lot — would recommend
15+
- Helped somewhat
16+
- Neutral
17+
- Felt off — but I can't say why
18+
- Definitely went wrong
19+
validations:
20+
required: true
21+
22+
- type: dropdown
23+
id: harness
24+
attributes:
25+
label: Which harness
26+
options:
27+
- Claude Code (Subagent)
28+
- Claude Code (Skill)
29+
- Codex CLI
30+
- OpenClaw (Skill)
31+
- OpenClaw (Standalone Agent)
32+
- Hermes Agent
33+
validations:
34+
required: true
35+
36+
- type: textarea
37+
id: context
38+
attributes:
39+
label: What did you vent about?
40+
description: 1-3 sentences about what you were feeling. Don't need to be precise — we want to understand the type of moment.
41+
placeholder: "I vented about my boss criticizing my work in front of the team..."
42+
validations:
43+
required: false
44+
45+
- type: textarea
46+
id: coach_response
47+
attributes:
48+
label: What did Growth Coach say?
49+
description: Paste the response (or a screenshot). If it was very long, the key 2-3 paragraphs are fine.
50+
placeholder: "It told me my boss's criticism was actually training me to hold my ground..."
51+
validations:
52+
required: true
53+
54+
- type: textarea
55+
id: what_worked
56+
attributes:
57+
label: What worked? (skip if nothing did)
58+
description: Was there a specific line, framing, or micro-action that landed? Quote it if you remember.
59+
validations:
60+
required: false
61+
62+
- type: textarea
63+
id: what_didnt
64+
attributes:
65+
label: What didn't work? (skip if everything did)
66+
description: Was there a phrase that felt off, a reframe that didn't fit, a moment where it broke character?
67+
validations:
68+
required: false
69+
70+
- type: textarea
71+
id: suggestion
72+
attributes:
73+
label: What would you change?
74+
description: If you had to edit the system prompt to make this kind of session better, what would you change?
75+
validations:
76+
required: false
77+
78+
- type: checkboxes
79+
id: privacy
80+
attributes:
81+
label: Privacy
82+
description: We will anonymize the content before referencing it in CHANGELOG or system prompt revisions. Confirm:
83+
options:
84+
- label: I've removed names, employers, and other identifying details.
85+
required: true
86+
- label: I understand this issue is public on GitHub.
87+
required: true
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
name: Request a Growth Coach variant
2+
description: Propose a new scenario-specific variant (e.g., bereavement, job loss, breakup, exam failure). The maintainer will review and decide whether to ship as a separate agent.
3+
title: "[variant] "
4+
labels: ["enhancement", "variant-request", "needs-triage"]
5+
assignees: []
6+
7+
body:
8+
- type: input
9+
id: variant_name
10+
attributes:
11+
label: Variant name
12+
description: A short kebab-case identifier (e.g., "growth-coach-bereavement")
13+
placeholder: growth-coach-bereavement
14+
validations:
15+
required: true
16+
17+
- type: dropdown
18+
id: scenario
19+
attributes:
20+
label: Scenario
21+
description: What life moment is this variant for?
22+
options:
23+
- Bereavement / grief
24+
- Job loss / layoff
25+
- Breakup / divorce
26+
- Exam / interview failure
27+
- Chronic illness diagnosis
28+
- Imposter syndrome (recurring)
29+
- Caregiver burnout
30+
- Other (describe in context below)
31+
validations:
32+
required: true
33+
34+
- type: textarea
35+
id: context
36+
attributes:
37+
label: Why does the base agent fall short for this scenario?
38+
description: 2-4 sentences on what's missing or wrong when Growth Coach tries to handle this scenario with its current system prompt.
39+
placeholder: "When someone is grieving, the 'capability being forged' framing is wrong — there's no growth payload. The base agent either invents one or admits 'no silver lining' but then doesn't know what to say. The bereavement variant should specialize in 'help them get through' mode, not 'reframe' mode."
40+
validations:
41+
required: true
42+
43+
- type: textarea
44+
id: what_changes
45+
attributes:
46+
label: What would change from the base system prompt?
47+
description: List 3-5 concrete modifications (tighter rules, different banned phrases, different micro-actions, different mission framing, etc.).
48+
validations:
49+
required: false
50+
51+
- type: textarea
52+
id: sample_session
53+
attributes:
54+
label: A sample session in this variant
55+
description: Optional. If you can write a 2-3 turn sample dialogue showing how this variant should respond differently, attach it.
56+
validations:
57+
required: false
58+
59+
- type: dropdown
60+
id: ship_as
61+
attributes:
62+
label: How should this ship?
63+
options:
64+
- Separate agent file (e.g., `agents/openclaw/SKILL-bereavement.md`) — users opt in
65+
- As a flag/mode on the base agent (e.g., `growth-coach --variant=bereavement`)
66+
- As a rule in the system prompt that activates on detection (auto)
67+
- Don't know — let maintainer decide
68+
validations:
69+
required: true
70+
71+
- type: checkboxes
72+
id: willingness
73+
attributes:
74+
label: Willingness
75+
options:
76+
- label: I'm willing to submit a PR for this myself if the maintainer approves the design.
77+
- label: I'd rather the maintainer write it.
78+
- label: I just want to flag the gap — not necessarily a build it.

.github/workflows/lint.yml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
name: Lint
2+
3+
# Run validate.sh on every PR that touches the agent, source, or scripts.
4+
# Catches frontmatter errors, missing crisis hotlines, banned phrases
5+
# outside the rule declaration, and broken TOML/JSON/YAML before review.
6+
7+
on:
8+
pull_request:
9+
paths:
10+
- 'agents/**'
11+
- 'source/**'
12+
- 'scripts/**'
13+
- 'install/**'
14+
- 'examples/**'
15+
- '.github/workflows/lint.yml'
16+
- 'scripts/validate.sh'
17+
push:
18+
branches: [main]
19+
20+
permissions:
21+
contents: read
22+
23+
jobs:
24+
validate:
25+
name: scripts/validate.sh
26+
runs-on: ubuntu-latest
27+
steps:
28+
- name: Checkout
29+
uses: actions/checkout@v4
30+
31+
- name: Set up Python (Anaconda — see CLAUDE.md)
32+
uses: actions/setup-python@v5
33+
with:
34+
python-version: '3.13'
35+
36+
- name: Install PyYAML
37+
run: python3 -m pip install pyyaml
38+
39+
- name: Run validate.sh
40+
run: bash scripts/validate.sh
41+
42+
- name: Run check-harnesses.sh (if present)
43+
run: |
44+
if [ -f scripts/check-harnesses.sh ]; then
45+
bash scripts/check-harnesses.sh
46+
else
47+
echo "check-harnesses.sh not present yet — skipping"
48+
fi

.github/workflows/release.yml

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
name: Release
2+
3+
# Auto-create a GitHub Release whenever a version tag (v*) is pushed.
4+
# The release body is the matching section pulled from CHANGELOG.md.
5+
6+
on:
7+
push:
8+
tags:
9+
- 'v*'
10+
11+
permissions:
12+
contents: write
13+
14+
jobs:
15+
release:
16+
runs-on: ubuntu-latest
17+
steps:
18+
- name: Checkout
19+
uses: actions/checkout@v4
20+
21+
- name: Extract release notes from CHANGELOG.md
22+
id: notes
23+
run: |
24+
VERSION="${GITHUB_REF_NAME#v}"
25+
echo "Extracting notes for version $VERSION"
26+
# Print lines between the matching '## [VERSION]' heading and the next '## [' heading.
27+
awk -v ver="$VERSION" '
28+
$0 ~ "^## \\[" ver "\\]" {grab=1; next}
29+
grab && /^## \[/ {exit}
30+
grab && /^\[[^]]+\]:[[:space:]]/ {exit}
31+
grab {print}
32+
' CHANGELOG.md > release_notes.md
33+
# Trim leading/trailing blank lines.
34+
sed -i -e '/./,$!d' release_notes.md
35+
awk 'NF{p=NR} {a[NR]=$0} END{for(i=1;i<=p;i++)print a[i]}' release_notes.md > tmp && mv tmp release_notes.md
36+
# Fall back to a generic message if the section is empty.
37+
if [ ! -s release_notes.md ]; then
38+
echo "Release $GITHUB_REF_NAME" > release_notes.md
39+
fi
40+
echo "----- release notes -----"
41+
cat release_notes.md
42+
43+
- name: Create GitHub Release
44+
env:
45+
GH_TOKEN: ${{ github.token }}
46+
run: |
47+
gh release create "$GITHUB_REF_NAME" \
48+
--title "$GITHUB_REF_NAME" \
49+
--notes-file release_notes.md \
50+
--verify-tag
51+
52+
- name: Validate packaged adapters
53+
run: |
54+
bash scripts/validate.sh

.gitignore

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# OS
2+
.DS_Store
3+
Thumbs.db
4+
5+
# IDE
6+
.vscode/
7+
.idea/
8+
*.swp
9+
*~
10+
11+
# Python (for sync.sh + validate.sh)
12+
__pycache__/
13+
*.pyc
14+
.venv/
15+
venv/
16+
17+
# Generated artifacts (kept out of git; regenerated by scripts/sync.sh)
18+
# Uncomment if you want agents/* to be regenerated rather than committed.
19+
# agents/*/subagent.md
20+
# agents/claude-code/SKILL.md
21+
# agents/openclaw/SKILL.md
22+
# agents/codex.toml
23+
# agents/roo-code/custom-modes.json
24+
# agents/hermes-agent.yaml
25+
26+
# Local dev
27+
*.log
28+
tmp/

CHANGELOG.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Changelog
2+
3+
All notable changes to this project are documented here.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7+
8+
## [Unreleased]
9+
10+
## [0.1.0] - 2026-07-08
11+
12+
First public release.
13+
14+
### Added
15+
- **Single source of truth**`source/growth-coach.system.md` + `source/growth-coach.meta.yaml` is the canonical artifact. All per-harness adapters regenerate from these.
16+
- **Claude Code Subagent**`agents/claude-code/subagent.md`. Drop into `~/.claude/agents/` and invoke via `@Growth Coach ...`.
17+
- **Claude Code Skill**`agents/claude-code/SKILL.md`. Drop into `~/.claude/skills/growth-coach/`.
18+
- **Codex CLI Subagent**`agents/codex.toml`. Drop into `~/.codex/agents/`.
19+
- **OpenClaw Skill + Standalone Agent**`agents/openclaw/SKILL.md` plus six bootstrap files (IDENTITY/SOUL/USER/TOOLS/AGENTS/BOOTSTRAP) for first-class agent install via `install/openclaw-agent.sh`.
20+
- **Hermes Agent YAML**`agents/hermes-agent.yaml`. Drop into `~/.hermes/agents/`.
21+
- **Core behavior** — three-part response contract (high-perspective analysis + genuine comfort + specific "blessing in disguise"); banned soup phrases; crisis routing to 🇨🇳 hotlines `400-161-9995 / 010-82951332 / 400-821-1215`; cross-session memory via `growth-{date}-{slug}.md` files.
22+
- **`scripts/sync.sh`** — regenerate `agents/*` from `source/` so descriptions and tool declarations propagate without hand-copy drift.
23+
- **`scripts/validate.sh`** — sanity-check every harness file parses (TOML / JSON / YAML / Markdown frontmatter).
24+
25+
[Unreleased]: https://github.com/Tangweiwei227/growth-coach/compare/v0.1.0...HEAD
26+
[0.1.0]: https://github.com/Tangweiwei227/growth-coach/releases/tag/v0.1.0

0 commit comments

Comments
 (0)