Conversation
… skills + i18n
- docs/wizard/ — interactive static config-builder (HTML+JS, GitHub Pages friendly)
- docs/reference-architectures/ — 4 full blueprints (homelab, solo-dev, small-agency, road-warrior)
- docs/outreach/ — launch drafts (tweet, HN, Reddit, upstream-Nous PR, long blog)
- .github/workflows/ci.yml + validate_skills.py — markdown-link-check, yamllint, skill frontmatter linter, prettier advisory
- skills/ — +4 (daily-inbox-triage, hermes-weekly, spam-trap, meeting-prep) — total 13
- README-zh.md, README-ja.md — localized entry summaries
- templates/config/*.yaml — quoted ${VAR} inside flow mappings (valid YAML)
- README: skills 9→13, language links, wizard/ref-arch/outreach rows, CI badge
- CHANGELOG + ROADMAP updated
Co-Authored-By: Rob <onerobby@gmail.com>
Contributor
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
Co-Authored-By: Rob <onerobby@gmail.com>
…YAML blocks
Addresses Devin Review comment: the persona radio (Question 1) was only
emitted as a YAML comment. Now it actually configures the starting state.
- onchange="applyPersona(value)" on each persona radio
- PERSONA_PRESETS mirrors templates/config/<persona>.yaml shape:
minimum / telegram-bot / production / cost-optimized / security-hardened
- applyPersona() sets default_model, memory, gateways, mcps, approval,
obs, crons — then re-generates YAML automatically
- generate() now emits persona-specific blocks:
- security-hardened: security.mcp.{default_trust,require_allowlist,allow_sampling}
- security-hardened + production: webhook require_signature + max_body_bytes,
redaction.{memory_write,log}, quarantine profile
- cost-optimized: routing.rules (5-rule cost ladder)
Co-Authored-By: Rob <onerobby@gmail.com>
Devin Review flagged four mismatches between the PERSONA_PRESETS and the actual reference templates. Fixed: - minimum: memory none -> vector (templates/config/minimum.yaml:25 uses vector) - telegram-bot: memory vector -> lightrag (telegram-bot.yaml:43 uses lightrag) - cost-optimized: memory vector -> lightrag (cost-optimized.yaml:66 uses lightrag) - cost-optimized: obs helicone -> none (cost-optimized.yaml has no exporters; it's telemetry + alerts only) Now each preset actually mirrors its template, which is what the code comment at line 185-187 claims. Co-Authored-By: Rob <onerobby@gmail.com>
…plate) templates/config/cost-optimized.yaml uses llama-3.1-70b in all three places (classification, triage model, compress_model). The wizard was emitting llama-3.3-70b. Align. Co-Authored-By: Rob <onerobby@gmail.com>
All 5 outreach drafts and both i18n READMEs referenced the old count of 9 skills. This PR added 4 new skills (daily-inbox-triage, hermes-weekly, spam-trap, meeting-prep) bringing the total to 13. Updated files: - README-zh.md, README-ja.md (count + skill name list) - docs/outreach/blog-post-long.md - docs/outreach/hacker-news-post.md (count + enumerated list) - docs/outreach/launch-tweet-thread.md - docs/outreach/nous-upstream-pr-body.md - docs/outreach/reddit-localllama.md (count + enumerated list) Co-Authored-By: Rob <onerobby@gmail.com>
Devin Review caught a red issue: quoting ${TELEGRAM_OWNER_ID} inside a
flow sequence (e.g. ["${TELEGRAM_OWNER_ID}"]) makes the YAML valid but
changes the parsed type from int to str after env-var substitution.
Telegram user IDs are numeric and Hermes compares them with strict
type matching, so a string-typed list would reject all messages.
Switched all 4 templates + 2 reference architectures + the wizard
generator to block-sequence style:
allowed_user_ids:
- ${TELEGRAM_OWNER_ID}
Verified with PyYAML that post-substitution type is int across all 4
templates.
Also: localized READMEs (zh + ja) now use 'sudo bash' to match the
main README, since vps-bootstrap.sh requires root.
Co-Authored-By: Rob <onerobby@gmail.com>
Devin Review (red): the wizard previously emitted only the provider derived from the default model. But cost-optimized routing references cerebras, moonshot, and anthropic too — a wizard-generated config would fail at runtime when routing picked one of those. Refactored to a data-driven `EXTRA_PROVIDERS` map so each persona declares which providers its routing rules need. The generator then emits the union of (default-model provider, extra persona providers). - cost-optimized: anthropic, google, moonshot, cerebras - production: anthropic, google - security-hardened: anthropic (for the quarantine fallback) Also added cerebras to the providerKeys map (CEREBRAS_API_KEY). Co-Authored-By: Rob <onerobby@gmail.com>
Two Devin Review findings addressed: 1. skills/README.md catalog listed only 9 skills; PR added 4 new ones (daily-inbox-triage, hermes-weekly, spam-trap, meeting-prep). Appended rows for all 4 so the catalog matches the 13-skill count now quoted in README / CHANGELOG / outreach docs. 2. Wizard generator: when memory=lightrag is selected, the generated config references google/gemini-2.5-flash (LLM) and openai/text-embedding-3-small (embedding), but the provider-emission set only accounted for the default-model provider + routing-rule providers. For 3 of 5 personas this produced broken configs with missing embedding provider credentials. Added a lightrag branch that injects google + openai into providersToEmit. Co-Authored-By: Rob <onerobby@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Phase 4: highest-leverage follow-ups after PR #7. Moves the guide from comprehensive to canonical by adding an interactive config wizard, four detailed reference architectures, CI that actually enforces repo quality, launch-ready outreach drafts, four more installable skills, and entry-level localized READMEs in Chinese and Japanese.
Everything is still zero-dep / no-frameworks: the wizard is a single static HTML file, CI uses off-the-shelf actions plus one small Python validator, localized READMEs are just markdown.
Type
skills/)templates/config/) — only fixed quoting.github/workflows/ci.yml, validator script)What landed
Interactive config wizard —
docs/wizard/Static HTML page, no frameworks. 8 questions (persona, default model, memory backend, gateways, MCP servers, approval layer, observability, cron tasks) → ready-to-drop
config.yaml.copyYAML()anddownloadYAML()helpers. Runs entirely in the browser; nothing uploaded anywhere. GitHub Pages friendly once enabled.4 reference architectures —
docs/reference-architectures/Every blueprint has: who it's for, full parts list, install commands, full
config.yaml, expected cost/month, scaling ceilings, graduation triggers.hermes@<name>.serviceunits, compliance-friendlyCI —
.github/workflows/ci.ymlmarkdown-link-checkon changed*.md(with.github/markdown-link-check.jsonallowlisting localhost / dynamic subdomains / example.com)yamllintwith a relaxed config (.github/yamllint.yml) that only catches real breakage, not formatting nitsvalidate_skills.py— everySKILL.mdmust have a valid YAML frontmatter withname,description (≥10 chars), non-emptywhen_to_use, andtoolsetsfrom a known whitelistprettier --checkadvisory pass (non-blocking) to hint at driftRan locally before pushing: all 13 skills pass, yamllint clean.
Outreach drafts —
docs/outreach/Copy for Rob to fire off after this merges. Zero posted without approval.
launch-tweet-thread.md— 8-tweet thread + reply-suggestions, receipts-forward, no hypehacker-news-post.md— Show HN title + first self-commentreddit-localllama.md— homelab-angled postnous-upstream-pr-body.md— Rob should open this, not me. Proposes a small "Community Guides" (plural) section in the Nous README. Designed to be low-review-burden and leave the door open for other guides to follow.blog-post-long.md— ~1500-word dev.to / Substack format4 new skills (total 13)
ops/daily-inbox-triage— morning sweep across email + Slack + Telegram DMs with classify + draft-reply + approval routing. Gemini Flash by default.ops/hermes-weekly— Friday digest ofNousResearch/hermes-agentmerged PRs, classified (feature / fix / breaking / chore), ready to pipe to Telegram.security/spam-trap— first-line untrusted-input filter for public channels. Cerebras Llama. ClassifiesGENUINE / SPAM / INJECTION / AMBIGUOUSand routes ambiguous to a quarantine profile.dev/meeting-prep— 15-min-before-meeting 1-page brief. Pulls calendar + last threads + memory.i18n —
README-zh.md,README-ja.mdEntry-level summaries (the 21 parts themselves stay English). Large Hermes user bases in both communities per the v0.9 release notes. Links from the top of the main README.
Template YAML quoting fix
templates/config/{production,cost-optimized,security-hardened,telegram-bot}.yamlhad unquoted${VAR}substitutions inside flow mappings.yamllintflagged them; now quoted so every template is valid YAML as-is.README
9 → 13docs/wizard/,docs/reference-architectures/,docs/outreach/CHANGELOG + ROADMAP
Updated. The roadmap items "Interactive config wizard", "Reference architectures", "Integration tests", "Translations", "Hermes Weekly" moved from Queued → Done.
Checklist
./partN-foo.md) and resolve${VAR}placeholders onlytrust:posture documented (new skills explicitly settrust: untrustedwhere applicable and route risky actions through approval)After this merges
Things I am not doing without explicit approval:
NousResearch/hermes-agent(that draft is yours to send)Things still queued on the ROADMAP: Astro Starlight docs site with full-text search, asciinema cast, Langfuse dashboard JSON export, dashboard-screenshots pass on parts 12/17/20.
Link to Devin session: https://app.devin.ai/sessions/42780dee7d0d4798b1910200a1f7280d
Requested by: @OnlyTerp