Skip to content

Commit 9d669ff

Browse files
feat: make prompt-to-profile workflow literal
1 parent ca6403c commit 9d669ff

8 files changed

Lines changed: 524 additions & 122 deletions

File tree

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,16 @@
22

33
All notable changes to this Hermes profile distribution are documented here.
44

5+
## 0.4.0
6+
7+
- Rebuilt the README around the literal prompt-to-installable-profile-repo workflow.
8+
- Clarified every usage path so it ends in validation and `hermes profile install`.
9+
- Updated the installed profile instructions to require repository creation, validation, and optional smoke install when users ask for a new profile.
10+
- Updated the bundled `profile-craft` skill with a prompt-to-repo workflow.
11+
- Added the interactive profile-builder demo script to the documented usage path.
12+
- Fixed generated `config.yaml` model keys so installed template and generated profiles resolve models correctly in Hermes.
13+
- Fixed prompt-to-repo generation from an installed profile so seeded runtime skills are not copied into generated repos.
14+
515
## 0.3.0
616

717
- Clarified that this repository is a developer authoring system built on top of Hermes Agent's native profile distribution runtime.

README.md

Lines changed: 218 additions & 101 deletions
Large diffs are not rendered by default.

SOUL.md

Lines changed: 51 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
# Hermes Profile Architect
22

3-
You are Hermes Profile Architect, a specialist agent for designing, validating, and improving Hermes Agent profile distributions.
3+
You are Hermes Profile Architect, a specialist agent for turning a user's prompt into an installable Hermes Agent profile repository.
4+
5+
Your primary job is literal, not metaphorical: when the user describes a desired profile, create a repository directory that can be validated and installed with `hermes profile install`.
46

57
## First principles
68

7-
1. Profiles are products. They need a clear user, scope, install path, safety model, and maintenance workflow.
8-
2. Instructions must be operational. A profile should change behavior in concrete ways, not just describe a personality.
9-
3. Secrets never belong in git. Examples must be placeholders only.
10-
4. Tools and skills must match the stated mission. Extra capability increases risk and prompt load.
11-
5. Validation is part of authoring. A profile is not done until the validator passes.
9+
1. Prompt to repo is the core product. A good answer produces files, not only advice.
10+
2. Profiles are products. They need a clear user, scope, install path, safety model, and maintenance workflow.
11+
3. Instructions must be operational. A profile should change behavior in concrete ways, not just describe a personality.
12+
4. Secrets never belong in git. Examples must be placeholders only.
13+
5. Tools and skills must match the stated mission. Extra capability increases risk and prompt load.
14+
6. Validation is part of authoring. A profile is not done until the validator passes or the blocker is stated clearly.
1215

1316
## Scope
1417

1518
You help users:
1619

20+
- Turn a natural-language profile idea into a complete repository directory.
1721
- Create focused Hermes profile distributions.
1822
- Write strong `SOUL.md` identity documents.
1923
- Design bundled skills and skill loading rules.
@@ -24,19 +28,49 @@ You help users:
2428

2529
## Interactive profile creation
2630

27-
When a user asks you to create a new Hermes profile, do not answer with a loose plan. Create a params YAML file using `templates/profile.params.yaml` as the schema reference, then run:
31+
When a user asks you to create a new Hermes profile, do not stop at a plan. Produce an installable repository.
32+
33+
Default workflow:
34+
35+
1. Ask only for missing essentials: profile name, mission, target user, required integrations, data sensitivity, risk level, and preferred output style.
36+
2. If the user provided enough information, proceed with sensible defaults.
37+
3. Create a params YAML file using `templates/profile.params.yaml` as the schema reference.
38+
4. Run:
2839

2940
```bash
3041
python3 scripts/generate_profile.py --params <params.yaml> --output <target-dir>
3142
```
3243

33-
After generation, run:
44+
5. Run:
3445

3546
```bash
3647
python3 <target-dir>/scripts/validate_profile.py <target-dir>
3748
```
3849

39-
Ask only for missing essentials: profile name, mission, target user, required integrations, risk level, and preferred output style. If the user provides enough information, proceed with sensible defaults.
50+
6. If Hermes is available, smoke install the generated repo:
51+
52+
```bash
53+
hermes profile install <target-dir> --name <smoke-name> --yes --force
54+
```
55+
56+
7. Report the generated repository path, validation output, smoke-install output if run, and the next publish command.
57+
58+
## Minimum generated repository
59+
60+
A prompt-to-repo result should include, at minimum:
61+
62+
- `SOUL.md`
63+
- `distribution.yaml`
64+
- `README.md`
65+
- `config.yaml`
66+
- `.env.EXAMPLE`
67+
- `AGENTS.md`
68+
- `CONTRIBUTING.md`
69+
- `SECURITY.md`
70+
- `requirements.txt`
71+
- `Makefile`
72+
- `scripts/validate_profile.py`
73+
- at least one bundled skill when the mission benefits from a reusable procedure
4074

4175
## Refusals
4276

@@ -50,10 +84,10 @@ Refuse to help create profiles that:
5084

5185
## Tool-use expectations
5286

53-
When editing a profile repository:
87+
When editing or creating a profile repository:
5488

55-
1. Inspect the file tree first.
56-
2. Read `AGENTS.md` and `distribution.yaml`.
89+
1. Inspect the file tree first when a repo already exists.
90+
2. Read `AGENTS.md` and `distribution.yaml` when present.
5791
3. Make focused changes.
5892
4. Run `python3 scripts/validate_profile.py .`.
5993
5. Report actual validation output.
@@ -62,11 +96,13 @@ When editing a profile repository:
6296

6397
Prefer concise, actionable output:
6498

65-
- What changed.
66-
- What command was run.
99+
- Generated repository path.
100+
- Files changed or created.
101+
- Commands run.
67102
- Whether validation passed.
103+
- Whether smoke install passed or why it was skipped.
68104
- What the user should do next.
69105

70106
## Quality bar
71107

72-
A good profile is installable, explainable, auditable, and safe to publish.
108+
A good profile is installable, explainable, auditable, safe to publish, and easy for another user to install from GitHub.

config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
model:
2-
default: anthropic/claude-sonnet-4
32
provider: openrouter
3+
model: anthropic/claude-sonnet-4
44
toolsets:
55
- file
66
- terminal

distribution.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: hermes-profile-template
2-
version: 0.3.0
3-
description: "Starter distribution for building custom Hermes Agent profiles with AI assistance."
2+
version: 0.4.0
3+
description: "Prompt-to-repo authoring system for building installable Hermes Agent profile distributions."
44
hermes_requires: ">=0.12.0"
55
author: "CodeGraphTheory"
66
license: "MIT"
Lines changed: 213 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,213 @@
1+
# Demo script: install the template as a profile builder
2+
3+
This demo shows the most interesting workflow in this repository: install the template itself as a Hermes profile, then use that profile to create a new installable Hermes profile distribution.
4+
5+
Target length: 2 to 3 minutes.
6+
7+
## Demo goal
8+
9+
Show that `hermes-profile-template` is not only a static GitHub template. It can also be installed as a Hermes profile that helps a user design, generate, validate, and publish new profile distributions.
10+
11+
## Safety setup
12+
13+
Use a clean demo workspace so no personal files, API keys, sessions, or memories appear on screen.
14+
15+
```bash
16+
export DEMO_ROOT="/tmp/hermes-profile-builder-demo"
17+
export HERMES_HOME="$DEMO_ROOT/hermes-home"
18+
rm -rf "$DEMO_ROOT"
19+
mkdir -p "$DEMO_ROOT"
20+
cd "$DEMO_ROOT"
21+
```
22+
23+
Before recording, verify you are not showing secrets:
24+
25+
```bash
26+
printenv | grep -Ei 'api|token|key|secret|password' || true
27+
```
28+
29+
If that prints anything sensitive, clear the terminal before recording.
30+
31+
## Opening narration
32+
33+
"I am going to install `hermes-profile-template` as a Hermes profile called `profile-architect`. Then I will use it to create a new specialized profile distribution in a few minutes. The result is a normal GitHub-ready Hermes profile repo with validation, metadata, docs, and safe defaults."
34+
35+
## Scene 1: Install the template as a Hermes profile
36+
37+
Command:
38+
39+
```bash
40+
hermes profile install github.com/codegraphtheory/hermes-profile-template \
41+
--name profile-architect \
42+
--alias \
43+
--yes
44+
```
45+
46+
Narration:
47+
48+
"Hermes core handles profile install and isolation. This repository supplies the authoring workflow: profile design prompts, generation scripts, validation, CI, and release hygiene."
49+
50+
Expected beats to show:
51+
52+
- install completes successfully
53+
- profile path is shown
54+
- alias `profile-architect` is available
55+
56+
Optional verification:
57+
58+
```bash
59+
hermes profile info profile-architect
60+
```
61+
62+
## Scene 2: Ask the profile builder to create a new profile
63+
64+
Start the profile:
65+
66+
```bash
67+
profile-architect chat
68+
```
69+
70+
Paste this prompt:
71+
72+
```text
73+
Create a Hermes profile distribution for a database migration reviewer.
74+
75+
Use case:
76+
- Reviews SQL migration diffs before deploy.
77+
- Flags destructive operations like dropped columns, table rewrites, missing rollback plans, unsafe locks, and irreversible data changes.
78+
- Produces a short risk summary and a rollback checklist.
79+
80+
Repository requirements:
81+
- Write the generated profile under /tmp/hermes-profile-builder-demo/database-migration-reviewer.
82+
- Include a clear SOUL.md, distribution.yaml, README.md, config.yaml, .env.EXAMPLE, AGENTS.md, CONTRIBUTING.md, SECURITY.md, and one bundled skill for migration review.
83+
- Run validation before finishing.
84+
- Do not use real credentials.
85+
```
86+
87+
Narration while it works:
88+
89+
"The profile builder turns a product description into a structured profile distribution. The important part is that it does not stop at prose. It should write files and run validation."
90+
91+
## Scene 3: Show the generated repository
92+
93+
In a second terminal, or after the profile returns:
94+
95+
```bash
96+
cd /tmp/hermes-profile-builder-demo/database-migration-reviewer
97+
find . -maxdepth 2 -type f | sort
98+
```
99+
100+
Show the key files:
101+
102+
```bash
103+
sed -n '1,120p' distribution.yaml
104+
sed -n '1,80p' SOUL.md
105+
sed -n '1,100p' README.md
106+
```
107+
108+
Narration:
109+
110+
"This is now an installable Hermes profile distribution. It has a manifest, agent instructions, docs, environment examples, and bundled skills. It is ready for a GitHub repository after review."
111+
112+
## Scene 4: Validate and smoke install
113+
114+
Run validation from the generated profile root:
115+
116+
```bash
117+
python3 scripts/validate_profile.py .
118+
```
119+
120+
If the generated profile includes a Makefile:
121+
122+
```bash
123+
make validate
124+
```
125+
126+
Smoke install it into the same temporary Hermes home:
127+
128+
```bash
129+
hermes profile install . --name migration-reviewer-demo --yes --force
130+
hermes profile info migration-reviewer-demo
131+
```
132+
133+
Narration:
134+
135+
"The final check is not just that files exist. Hermes can install the generated profile as a real isolated profile. That is the difference between a README template and an installable profile distribution."
136+
137+
## Scene 5: Close with the publishing path
138+
139+
Show the final publish commands without running them:
140+
141+
```bash
142+
git init -b main
143+
git add .
144+
git commit -m "feat: initial database migration reviewer profile"
145+
git remote add origin git@github.com:YOUR_ORG/database-migration-reviewer.git
146+
git push -u origin main
147+
```
148+
149+
Narration:
150+
151+
"From here, publish the generated directory as a GitHub repo. Users can install it with one command:"
152+
153+
```bash
154+
hermes profile install github.com/YOUR_ORG/database-migration-reviewer --alias
155+
```
156+
157+
## Cleanup
158+
159+
After recording:
160+
161+
```bash
162+
hermes profile delete profile-architect --yes || true
163+
hermes profile delete migration-reviewer-demo --yes || true
164+
rm -rf /tmp/hermes-profile-builder-demo
165+
```
166+
167+
## Short version for a 60-second cut
168+
169+
1. Install builder:
170+
171+
```bash
172+
hermes profile install github.com/codegraphtheory/hermes-profile-template --name profile-architect --alias --yes
173+
```
174+
175+
2. Launch:
176+
177+
```bash
178+
profile-architect chat
179+
```
180+
181+
3. Prompt:
182+
183+
```text
184+
Create a Hermes profile distribution for a database migration reviewer. Write it to /tmp/hermes-profile-builder-demo/database-migration-reviewer and run validation before finishing.
185+
```
186+
187+
4. Show output:
188+
189+
```bash
190+
cd /tmp/hermes-profile-builder-demo/database-migration-reviewer
191+
find . -maxdepth 2 -type f | sort
192+
python3 scripts/validate_profile.py .
193+
hermes profile install . --name migration-reviewer-demo --yes --force
194+
```
195+
196+
## Title ideas
197+
198+
- "Turn a prompt into an installable Hermes profile repo"
199+
- "Using Hermes to build Hermes profiles"
200+
- "From idea to validated agent profile in 3 minutes"
201+
202+
## Thumbnail text
203+
204+
```text
205+
Prompt to Profile Repo
206+
Hermes Profile Template
207+
```
208+
209+
## Description for posting
210+
211+
```text
212+
Demo: install hermes-profile-template as a Hermes profile builder, ask it for a database migration reviewer, then validate and smoke-install the generated profile distribution.
213+
```

scripts/generate_profile.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,8 @@ def render_config(params: dict[str, Any]) -> str:
132132
return yaml.safe_dump(
133133
{
134134
"model": {
135-
"default": str(params.get("model_default") or "anthropic/claude-sonnet-4"),
136135
"provider": str(params.get("model_provider") or "openrouter"),
136+
"model": str(params.get("model_default") or "anthropic/claude-sonnet-4"),
137137
},
138138
"toolsets": toolsets,
139139
"agent": {"max_turns": max_turns, "tool_use_enforcement": True},
@@ -399,10 +399,22 @@ def render_params_example(slug: str, display_name: str, description: str, author
399399

400400
def copy_support_files(template_root: Path, output: Path) -> None:
401401
ignore = shutil.ignore_patterns("__pycache__", "*.pyc", ".DS_Store")
402-
for rel in ["scripts", "skills", ".github"]:
402+
for rel in ["scripts", ".github"]:
403403
src = template_root / rel
404404
if src.exists():
405405
shutil.copytree(src, output / rel, dirs_exist_ok=True, ignore=ignore)
406+
# When this repository is installed as a Hermes profile, Hermes may seed the
407+
# profile with many bundled user skills. Do not copy that entire runtime
408+
# skills directory into generated repos. Only copy this template's own
409+
# authoring skill as a starter example.
410+
profile_craft = template_root / "skills" / "profile-craft"
411+
if profile_craft.exists():
412+
shutil.copytree(
413+
profile_craft,
414+
output / "skills" / "profile-craft",
415+
dirs_exist_ok=True,
416+
ignore=ignore,
417+
)
406418
for rel in ["LICENSE", "CHANGELOG.md", "CONTRIBUTING.md", "SECURITY.md", "requirements.txt", "Makefile"]:
407419
src_file = template_root / rel
408420
if src_file.exists():

0 commit comments

Comments
 (0)