feat: GitHub Intelligence & Technical Architecture Expert - #57
Closed
ygd58 wants to merge 13 commits into
Closed
Conversation
This script provides functions to search Notion pages by title and retrieve database schema properties.
Adds a function to fetch model metadata from Hugging Face.
Added operational guidelines for Hugging Face model expertise.
This function executes a Python code snippet in a secure subprocess, capturing output or errors. It includes error handling for timeouts and system errors.
Added operational guidelines for the Autonomous Code Verification Skill.
This skill enables Hermes to autonomously extend its own capabilities by writing new Python tools from scratch, testing them, and registering them without human intervention.
This script fetches current weather data for any city using the Open-Meteo API without requiring an API key. It includes geocoding functionality to convert city names to geographic coordinates.
This file contains a suite of tests for the weather tool, checking various scenarios including valid and invalid city inputs, temperature units, and response structure.
Added documentation for the Adventure Log and self-tool building capabilities of Hermes Agent, including installation instructions and test results.
Introduced a self-tool builder skill for Hermes that enables autonomous tool creation, testing, and registration without human intervention. Includes demo tools and tests.
|
Starting work on issue #57. Branch: |
Completed ✅What changed:
Verification:
Shipped in: Acceptance criteria met:
|
This was referenced Jun 19, 2026
1 task
Meraniya
pushed a commit
to Meraniya/hermes-agent
that referenced
this pull request
Aug 6, 2026
NousResearch#57) * feat(config): interprocess write lock — eliminate watchdog TOCTOU race - Add config_write_lock() exclusive OS file lock (fcntl.flock / msvcrt) - Add config_read_lock() shared lock for external readers (e.g. watchdog) - Extract _write_config_to_disk() to avoid re-entrant lock deadlock - Wrap save_config() write+seal in exclusive lock — zero race window - Update verify_config_integrity(locked=False) with optional locked kwarg - Add restore_config() safe helper: lock → backup → save → reseal - Tests: 17 cases covering lock lifecycle, integrity, and restore Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MnmdLAbTdbTo66Uc2tK31x * fix(config): ruff lint fixes for config write lock * fix(config): replace deprecated datetime.utcnow() with timezone-aware now() * fix(config): pre-declare fcntl/msvcrt types to satisfy type checker * fix(config): use ty-compatible type-ignore on conditional platform imports Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MnmdLAbTdbTo66Uc2tK31x --------- Co-authored-by: Claude <noreply@anthropic.com>
Meraniya
pushed a commit
to Meraniya/hermes-agent
that referenced
this pull request
Aug 6, 2026
…writes (NousResearch#82) save_config()/restore_config() already keep the local .sha256 sidecar in sync (PR NousResearch#57), but the *external* git-backed baseline used by `hermes config verify` (PR NousResearch#67) was only ever updated by an explicit `hermes config seal`. Any authorized write through save_config() — model scanner, /model command, platform setup flows via write_platform_config_field() — desynced that baseline, so the Config Integrity Watchdog cron job flagged the legitimate change as tampering: "Hermes Config Integrity Failure! The configuration hash does not match the sealed baseline." This is the same scanner/watchdog TOCTOU conflict documented in docs/plans/2026-07-02-scanner-watchdog-conflict-resolution.md, just recurring one layer over in the newer git-backed mechanism. _write_config_to_disk() now also calls the config-integrity-watchdog skill's seal() (quietly) whenever $HERMES_DOTFILES_DIR is configured, keeping the git-backed log current on every authorized write. Extracted _find_core_module() (returns None instead of exiting) so this can opportunistically no-op on machines without the watchdog set up. restore_quick_snapshot() in backup.py gets the same treatment for config.yaml restores from a quick snapshot. Co-authored-by: Test <test@test.com>
nekwo
added a commit
to nekwo/hermes-agent
that referenced
this pull request
Aug 17, 2026
…ecome one spine Nine investigation plans, two scout inventories, and a week of landed work now have a single sequencing authority: Plan EG, seven phases from "stop active damage" to the readability sweeps, every stage graded against the eight properties distilled from this week's failures. What it decides, rather than restates: - Stage zero is HC-H1 alone — the live-store test leak is the only defect still actively writing the operator's runtime, so it outranks everything. - The centerpiece is the operator's stat-fingerprint persisted core (EG-3.1, NEW): BW-H1's event-offset key stays refused for cause; the fingerprint extends serve.py:401, serves labeled-stale on mismatch, writes back after every build, and carries a shadow-validation window so a missed input is a receipt, not a silent authoritative lie. - The convergences are carried, not reopened: one build with three logged waits (settled), one prewarm fix adopted once (HY-H2 = HC-H3 -> EG-3.2), and the fourth-build divergence resolved by ordering attribution (EG-2.1) before the fix (EG-3.3). - Dead code splits into Class A (reaped before the stages: the --expect-revision lowerings, the usage-lane fall-through, the test-only fold copies) and Class B (reaped after their proving stage per NousResearch#42: the argv write arms, the NDJSON stream child behind the NousResearch#57 sink fix and the Hazard-A poll fix, the disk-cache boot paint) — with a keep-list so actor-restore, the mass-archive tripwire, and the rpc kill switch stop being deletion candidates. - Two more NEW stages close named holes the sources left unowned: EG-4.0 owns the laneAbsent window that blocks TC-3's exit, and EG-6.6 hoists the three-copy class-key fence into the store — readability with a named defect class, per the operator's bar. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
nekwo
added a commit
to nekwo/hermes-agent
that referenced
this pull request
Aug 17, 2026
… sink (NousResearch#57) The office push lane could DROP a promoted batch with neither a patch nor a resync. `patch_coverage` owns which entities may promote; the sink's scope test was a private restatement of the id scheme that knew only `office_actor` and a slash-prefixed id. WV-H3 (2026-08-16) widened the first vocabulary and not the second, and `office_surface`'s id is the BARE workspace id — so a folder-only frame failed BOTH conjuncts and took the bare `return`, violating this module's own rule that a resync is recoverable and a dropped change is not. Reachable on every folder rename with no actor write in the same ~450ms coalescing window; masked because a mixed batch is forwarded whole, and because the argv `harness stream` child still folds the same batch for the launcher. So the scope parser moves to the module that owns the id scheme it reads backwards: - `state_patches.office_patch_scope(patch) -> workspace_id | None`, beside the id builders. `office_actor` splits on the FIRST `/` exactly as `office_actor_patch_id` joins on it (which is also what keeps `ws_pilot_2` out of `ws_pilot`'s scope); `office_surface` IS the bare workspace id; everything else, and any id that cannot be placed, is None. None is not "every workspace" — a persona row is forwarded INSIDE an in-scope frame and never puts one in scope; - the sink's in-scope test and `_delta_touches_workspace`'s `state.patched` arm both call it. The resync twin carried the identical fork and was saved only by the `office.*` arm catching the paired domain event next door; saved by a neighbour is not an invariant, and the twin that had no neighbour lost the change outright. `prefix` is gone from both, so there is no second spelling left to drift. Forward-whole (V6) semantics unchanged. After this a batch the coverage authority promotes is by construction FORWARDED or RESYNCED, never dropped. No wire change, no event registered, no contract hash or SNAPSHOT_CONTRACT_VERSION moved, no fixture regenerated — the launcher fold already handles `office_surface` (WV-L3) and the cross-repo golden exists. `OFFICE_FOLD_ENTITIES` is deliberately NOT widened: it is the server-side fail-open default for a client that declared nothing, and widening it would declare on behalf of every un-updated launcher in the field. Tests (+5). Witness 1 — delivery (test_serve_rpc_office_subscribe.py 69 → 73): - a folder-only frame is FORWARDED: its single row is mirrored off the committed `patch_office_surface.json`, and the expected `changed.folders` is read out of that golden rather than restated here; - another workspace's folder change sends nothing — the second driven value, so neither drop-all nor forward-all passes the pair; - the demoted-delta twin gains both halves as params: this workspace's bare-id folder row resyncs, another workspace's does not. Witness 2 — authority → scope, in a DIFFERENT file, beside the existing partition gate (test_stream_patch.py 19 → 20): every office entity enumerated from `patch_coverage`'s OWN namespace must be placed into a workspace by `office_patch_scope` under at least one id shape. That is the half that catches the next WV-H3 — covering a new office entity without teaching the scope function reds here even though no sink test for that entity exists yet — and the id shape is left open on purpose, since the two live entities already use different ones. Killing mutations run and reverted: - `office_actor`-only sink predicate restored -> the folder-only test reds with "ValueError: not enough values to unpack (expected 1, got 0)": the mutant emits NOTHING, so every probe is on the content of a message it never constructs. Witness 2 stays GREEN, which is the point of having two; - second-order: that mutant emitting a RESYNC instead of dropping -> reds too, "assert 'runtime.office.resync' == 'runtime.office.patch'" (a resync carries a different method and no `patches`), plus three addressed-not-broadcast tests; - every `office_surface` row scoped in (forward-all) -> "another workspace's folder change" reds on the extra `runtime.office.patch`; - the `office_surface` arm dropped from `office_patch_scope` (RD-H1's own predicate mutant) -> reds all three: sink delivery, the resync twin ("IndexError: list index out of range"), and witness 2 with "'office_surface' can be promoted by patch_coverage but office_patch_scope places no id shape of it into a workspace"; - the twin arm alone reverted to `office_actor`-only -> only the twin param reds, while every sink test stays green. 325 tests green across the subscribe, live-hub, stream-patch, office state-patch, fold-negotiation, socket-lane and office RPC suites; 92 more across the contract-version, event-registration and dead-symbol gates confirm nothing moved. PENDING, and not this commit's to run: RD-H1's LIVE acceptance step — one real folder gesture arriving on the push lane on the operator's runtime — is the orchestrator's, and gates Plan C's TC-4 stream-child deletion together with R0-a. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
choi138
added a commit
to choi138/hermes-agent
that referenced
this pull request
Aug 19, 2026
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.
🚀 Moving beyond Notion: GitHub Architecture Expert
After the feedback that basic Notion tools were already covered, I decided to pivot to a much more critical challenge for developers: Repository Intelligence.
What this PR introduces:
I'm excited to contribute this "Intelligence" layer to the ecosystem. Ready for review!