Commit Graph

49 Commits

Author SHA1 Message Date
Godopu ee48d77d0a docs: add README.md and README.ko.md introducing the orchestration skills and backplane architecture 2026-06-22 14:19:15 +09:00
Godopu 9735258bc5 refactor: rename metadata directory .hermes to .mam in backplane scripts and documents 2026-06-22 14:06:13 +09:00
Godopu 30e447189e refactor: migrate skills/ directory to .agents/skills/ 2026-06-21 14:42:12 +00:00
Godopu e1d998e1ef feat: add support for hermes agent in tmux orchestration scripts 2026-06-21 14:21:30 +00:00
Godopu aacea05f6a docs: replace CLAUDE.md content with README.md title 2026-06-21 13:11:05 +00:00
Godopu a414158864 docs: rename project reference from advanced_multi_agent to tmux_agent_orchestration 2026-06-21 11:32:57 +00:00
Godopu d21d419a7c docs: update commit references for FW-N5, FW-N6, and FW-N7 2026-06-21 10:45:45 +00:00
Godopu 450722b3df docs(security): correct example metadata in job-protocol.md to refer to hmac_sig 2026-06-21 10:45:26 +00:00
Godopu 6a88f10a74 feat(security): implement FW-N5, FW-N6, FW-N7 (HMAC-SHA256 protocol docs, auto-generate token, replay attack defense) 2026-06-21 10:39:49 +00:00
Godopu 8a4067ca91 docs: internationalize top-level documentation files to English and backup Korean originals to *.ko.md 2026-06-21 10:35:01 +00:00
Godopu 738e4dc8d1 docs: add BOOTSTRAP.md project setup and onboarding guide 2026-06-21 10:27:33 +00:00
Godopu 0017ef572d feat: add interactive Understand-Anything project analysis dashboard 2026-06-21 10:10:55 +00:00
Godopu ec92b6c3fa docs: commit analysis report and instruction documents 2026-06-21 10:07:38 +00:00
Godopu 5d555dbf6d docs: rename Messaging_System_REPORT.md to MESSAGING.md and update references 2026-06-21 10:06:53 +00:00
Godopu 9d9b91dc69 docs: add new recommendations to FUTURE_WORKS.md 2026-06-21 10:03:59 +00:00
Godopu 7a4453a2fc docs: add portability guide to AGENT.md checklist 2026-06-21 10:00:21 +00:00
Godopu 86ca4e2713 docs: add AGENT.md guidelines and update README.md entry point 2026-06-21 09:35:21 +00:00
Godopu 8947bebb10 docs: update DONE.md and FUTURE_WORKS.md to reflect completed tasks 2026-06-21 09:20:01 +00:00
Godopu 5258b5013c feat(lib): implement FW-N1~FW-N4 items and pane snapshot guidelines 2026-06-21 09:19:46 +00:00
Godopu 8097df0cbe feat(lib): SQLite DB normalization (FW-L3) & stop semantics simplification (FW-L2) 2026-06-21 09:05:52 +00:00
Godopu 478be56679 fix(lib): hardening and edge-case bugfixes (FW-12, FW-16 round)
- Restored .bak generation to maintain P0-B backup invariants
- Fixed stale NFS warning message to reflect SQLite DELETE fallback
- Replaced vulnerable yaml.replace with os.path.splitext globally
- Ensured YAML dump occurs after conn.commit() to prevent partial syncs
- Re-applied chmod 0600 on SQLite -wal and -shm files
2026-06-21 08:43:06 +00:00
Godopu 9b797a5c8c feat(lib): migrate to SQLite WAL backend for robust concurrency (FW-L1)
- Replaces python fcntl.flock with SQLite BEGIN IMMEDIATE.
- Status/Reconcile read from SQLite SSOT, with YAML fallback.
- Explicitly documented tradeoff: YAML is no longer a real-time view.
- Handles PRAGMA wal_checkpoint(TRUNCATE) safely outside transactions.
2026-06-21 08:35:07 +00:00
Godopu 623eef814b docs: split FUTURE_WORKS.md -> DONE.md (FW-01~16 completed) + new items (FW-N1~N4, FW-L1~L2)
DONE.md: 16/16 items completed, 11 commits, 3-agent verified.
FUTURE_WORKS.md: rewritten with only remaining items:
  - FW-L1: SQLite WAL migration (FW-02 long-term)
  - FW-L2: stop option semantics Step 2 (FW-03/13 follow-up)
  - FW-N1: reconcile.sh idle timeout vs job timeout mismatch (new)
  - FW-N2: wire format compat (HMAC rollout) (new)
  - FW-N3: log message 'auth_token mismatch' -> 'HMAC verify failed' (new)
  - FW-N4: REPORT.md section 2.4 plaintext auth_token -> HMAC (new)
2026-06-21 07:15:53 +00:00
Godopu 9ee9076d60 docs(delegate-job): add Subagent Orchestration Pattern section to SKILL.md
Verified pattern from 2026-06-21 6-batch refactoring sprint:
- Main worker (agy-new) + 2 reviewers (agy-existing, claude-existing) + Hermes orchestrator
- Brief delivery via file path (not inline tmux send-keys)
- Polling for short tasks, MQTT subscriber for long tasks
- Complementary reviewer coverage (different models catch different bugs)
- Hermes fallback fix for small well-defined issues
- Batch grouping rules (no file overlap)
2026-06-21 06:41:25 +00:00
Godopu f1a98be8de fix(lib.sh): add NFS flock warning (FW-02) + unify venv deps with pyyaml (FW-11)
FW-02: atomic_dump_yaml now calls _atomic_dump_yaml_check_nfs() which
  detects NFS/CIFS/SSHFS mounts and warns that flock is unreliable.
  Long-term fix (SQLite WAL) documented in FUTURE_WORKS.md.

FW-11: pyyaml added to requirements.txt and installed in .venv, so
  both paho-mqtt and yaml are available in a single interpreter.
  Eliminates the system-python3-vs-venv split for monitor --subscribe.
2026-06-21 06:39:12 +00:00
Godopu 7d925de00d fix(monitor): add status enum docs + subscribe security warning (FW-09, FW-15)
FW-09: SKILL.md defines valid last_visible_status values (running/stopped/
  terminated/archived). reconcile.sh now sets last_visible_status to
  'running' and uses last_visible_note for free-form comments.

FW-15: SKILL.md adds Security section for --subscribe on public brokers.
  Documents wildcard subscription risks, auto-kill spoofing, HMAC
  verification mitigation, and recommends --once/polling for PoC.
2026-06-21 06:37:28 +00:00
Godopu 2cffcc46c5 fix(delegate-job): unify .env loading in Python scripts (FW-04) + trap agent bootstrap errors (FW-06)
FW-04: mqtt_common.py now loads .env at module import via _load_dotenv().
  Walks up from script dir to find workspace .env, sets vars not already
  in os.environ (OS env takes precedence). Uses stdlib only — no
  python-dotenv dependency.

FW-06: bash wrapper sets trap EXIT before tmux new-session to publish
  error event if agent bootstrap fails (non-zero exit). Trap is cleared
  after successful session creation. Only active when job_id is set.
2026-06-21 06:35:17 +00:00
Godopu 155c6e8d5c docs: fix delete->stop in REPORT + add session/job state glossary (FW-03, FW-10, FW-16)
FW-03: replace 'delete' with 'stop' in skill reference (line 299).
  'terminated' retained as valid YAML status value (hard kill mode).

FW-10/FW-16: add Glossary section distinguishing session states
  (running/stopped/terminated/archived in agent-sessions.yaml) from
  job states (pending/running/completed/error/cancelled in registry).
  Documents which skill/function sets each state.
2026-06-21 06:32:29 +00:00
Godopu 3677e4aace feat(delegate-job): add subscriber auto-reconnect (FW-01) + HMAC-SHA256 event signing (FW-05)
FW-01: job_subscriber.py now has on_disconnect callback (5-arg paho v2
  signature), reconnect_delay_set(1,16) for exponential backoff, and
  with_retry-wrapped initial connect (5 attempts). paho loop_start()
  handles auto-reconnect internally.

FW-05: publish_event.py signs payloads with HMAC-SHA256 using auth_token
  as key (replaces plaintext token in wire). mqtt_common.py adds
  verify_hmac() helper using hmac.compare_digest (timing-safe).
  job_subscriber.py validates incoming events via verify_hmac.
  PoC mode (auth_token=None) skips verification — backward compatible.

Reviewed by agy-existing (PASS) and claude-existing (FAIL: on_disconnect
  4-arg signature → fixed to 5-arg matching paho v2 CallbackAPIVersion).
2026-06-21 06:31:39 +00:00
Godopu 4cea11438a refactor(lib.sh): extract hardcoded tmux shim paths to constants (FW-07) + cache _delegate_py_bin result (FW-08)
FW-07: _resolve_real_tmux_path and _init_tmux_isolation now use
  _TMUX_SHIM_DIR_PATTERN and _TMUX_SKILLS_BIN_PATTERN env-overridable
  constants instead of hardcoded path strings. All 4 reference sites
  updated (lines 32, 37, 57, 76). Default values preserve original
  slash semantics (/multi-agent-tmux-shim/, /skills/.bin).

FW-08: _delegate_py_bin caches result in AGENT_PYTHON_BIN shell
  variable (not exported — avoids cross-workspace pollution).
  Fallback uses command -v python3 for absolute path caching.

Reviewed by agy-existing (FAIL->fixed) and claude-existing (FAIL->fixed).
Both reviewers identified: slash omission, incomplete extraction at :57/:76,
export side effects. All issues resolved.
2026-06-21 06:24:31 +00:00
Godopu c68852b8e3 docs: add FUTURE_WORKS.md — 3-agent deep analysis results (FW-01~FW-16) 2026-06-21 06:15:08 +00:00
Godopu 5af1387b5d refactor(stop): rewrite SKILL.md frontmatter/heading/prose for stop semantics (FW-13, FW-03)
- frontmatter description: 'Terminate...mark it terminated' → 'Stop...hard=terminated, stop options=stopped'
- heading: 'Multi-Agent Delete' → 'Multi-Agent Stop'
- tags: delete → stop
- state machine diagram: delete → stop
- prose: soft/hard delete → soft/hard stop throughout
- stop_session.sh: comments + echo 'delete complete' → 'stop complete'
- create/SKILL.md: companion list 'delete' → 'stop' (2 locations)
- preserved: status=terminated (valid YAML value), terminated_at field, --purge-conversation semantics
2026-06-21 06:13:37 +00:00
Godopu 9334352924 docs: rename REPORT.md -> Messaging_System_REPORT.md (FW-14)
Regularize the uncommitted rename via git mv so the working tree
is clean and the authoritative messaging-system spec is unambiguous.
2026-06-21 06:09:39 +00:00
Godopu a6f7c045bc feat(delegate-job): bump default --timeout 600s -> 3600s (1h wall-clock budget)
Changed 11 locations across 5 files:
- scripts/registry.py: timeout_sec dataclass default + argparse default
- scripts/job_subscriber.py: help text + fallback default
- SKILL.md: 4 recommended invocation examples
- registry.md: JSON example + CLI example
- tmux-agent-orchestrate-delegate-job: bash wrapper TIMEOUT var

--idle-timeout 120s preserved unchanged.
Rationale: 10min default was too short for deep analysis / multi-file
generation tasks; 1h aligns with long-running agent delegation patterns.
2026-06-21 06:08:49 +00:00
Godopu 50b2b201b8 refactor(skills): rename tmux-agent-orchestrate-delete -> stop (step 1)
User decision: 2-step approach (Step 1 = simple rename, Step 2 = option
redefinition in a separate round).

Changes (mechanical, history preserved):
- skills/tmux-agent-orchestrate-delete/ -> skills/tmux-agent-orchestrate-stop/ (git mv)
- scripts/delete_session.sh -> scripts/stop_session.sh (git mv)
- sed s/orchestrate-delete/orchestrate-stop/g + delete_session.sh->stop_session.sh
  across 7 files (0 residual of either pattern)
- SKILL.md frontmatter 'name' -> tmux-agent-orchestrate-stop
- related_skills / companion refs in create/status/monitor/resume SKILL.md updated

NOT in this commit (deferred to step 2):
- Option redefinition (--purge-conversation, --mode soft clarification)
- Deprecation shim (external consumers = 0, no need)

6-route surface preserved (create/resume/stop/status/monitor + delegate-job).

Verified on isolated server -L claude-rename-step1-test (kill-server after):
- syntax PASS (all .sh + py_compile)
- E2E via renamed stop_session.sh: capture-id records id + status=stopped,
  status.sh renders it (DRIFT=-), idempotency exit 0
- 0 stale 'tmux-agent-orchestrate-delete' / 'delete_session' references
- git history preserved (rename detected as R)
- Global skill untouched; real YAML + main canary -L multi-agent-canary untouched

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 15:48:27 +00:00
Godopu a2d4f80608 fix(monitor,resume): honor stopped status + clear stop metadata on resume
Implements user choice Option B: the two follow-ups to 0de0f23, in one patch.

Changes:
- skills/tmux-agent-orchestrate-monitor/scripts/reconcile.sh:
  - drift-A skip-set extended: ('terminated', 'archived', 'stopped')
  - prevents the monitor from overwriting a tmux-dead 'stopped' row with
    'terminated (auto-detected)', which would lose resumable + captured id
- skills/tmux-agent-orchestrate-resume/scripts/update_yaml_resumed.sh:
  - pop stopped_at, stopped_at_epoch, stop_reason, resumable on resume
    (alongside the existing terminated_at*/termination_mode/archived_at) so a
    resumed row has no stale end-of-session metadata
- skills/tmux-agent-orchestrate-monitor/SKILL.md: documented 'stopped' in the
  drift class list + a skip-set note on drift class A
- skills/tmux-agent-orchestrate-resume/SKILL.md: documented stopped -> running
  transition + tier-1 race-free resume path

5-route surface preserved (no new directory). delete_session.sh untouched.

Verified on isolated server -L claude-followup-test (kill-server after):
- syntax PASS
- E2E A: stop -> tmux dead -> reconcile --once -> status stays 'stopped'
- E2E B: resume -> stopped_at/stopped_at_epoch/stop_reason/resumable all gone
- E2E C: plain delete -> terminated, reconcile leaves it (no regression)
- Real YAML + main canary untouched

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 15:32:02 +00:00
Godopu 0de0f236b2 feat(tmux-agent-orchestrate-delete): add --capture-id, --reason, --graceful options
Implements user choice Option A: extend delete instead of adding a 6th 'stop' skill.

Changes:
- skills/lib.sh:
  - capture_conversation_id() — thin wrapper over find_workspace_uuid (race-free)
  - is_already_stopped() — idempotency check
  - _validate(): add 'stopped' to the valid status set (required for the new
    transition; without it atomic_dump_yaml silently rejected the write)
- skills/tmux-agent-orchestrate-delete/scripts/delete_session.sh:
  - --capture-id: records claude_session_id_own / agy_conversation_id_own +
    resumable:true to the row before kill (guarantees tier-1 resume)
  - --reason <reason>: records stop_reason (default manual_stop)
  - --graceful: send-keys exit -> 3s -> kill-session(SIGTERM) -> 5s -> SIGKILL
  - STOP mode (any of the three) transitions running -> stopped (vs terminated)
  - Idempotency: already-stopped session prints message + exit 0
  - No options -> identical legacy behaviour (hard->terminated, soft->archived)
- skills/tmux-agent-orchestrate-delete/SKILL.md: documented options + state machine

5-route surface preserved (no new directory). Other 5 routes unchanged.

Known follow-up (out of scope, monitor edits forbidden this round): monitor
reconcile drift-A treats a tmux-dead 'stopped' row as drift and would re-mark it
'terminated' (skip-set is only terminated/archived). status.sh shows DRIFT=A for
stopped rows. Needs a Phase-2 wiring change to add 'stopped' to the skip-set.

Verified on isolated server -L claude-stop-impl-test (kill-server after):
- syntax PASS; E2E: capture-id, idempotency(exit 0), graceful fallback chain,
  backward-compat(terminated), status renders stopped. Real YAML + main canary untouched.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 15:19:09 +00:00
Godopu a876b70428 docs: write deep messaging system report in REPORT.md 2026-06-20 14:50:26 +00:00
Godopu 0cb8d058cb feat(env): add .env.example template + scripts/generate-env.sh
.env.example: committable template (all 13 skill env vars commented with
defaults; secrets use replace_me, no plaintext). .gitignore already carves
it out via !.env.example.

scripts/generate-env.sh: creates .env from .env.example if absent, no-ops
if present, --force overwrites with a .env.bak backup. Placed under a new
top-level scripts/ dir so it is committable without touching skills/*.

Verified on -L claude-env2-test (create/no-op/force/bad-arg paths).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 14:46:38 +00:00
Godopu 61ba8aae1d chore(.gitignore): exclude .env + .env.* with .env.example carve-out
Secures the workspace against accidental commits of:
- .env (skill env overrides, may contain secrets)
- .env.* (any env variant)
- except .env.example (committable template, can be added later)

Includes Korean comment noting secrets policy.
2026-06-20 14:43:22 +00:00
Godopu cd9eec112d refactor(skills): make skills portable across users/locations via workspace-relative paths + env var overrides
Changes:
- skills/lib.sh:
  - HOME_DIR default changed from $HOME to <workspace_root> (workspace self-sufficient)
  - Added CLAUDE_PROJECT_DIR / LOCAL_BIN env var pattern (default $HOME, overridable)
- skills/tmux-agent-orchestrate-monitor/scripts/reconcile.sh:
  - STATE_DIR moved from $HOME/.cache/... to <workspace>/.cache/tmux-agent-orchestrate-monitor
- skills/tmux-agent-orchestrate-create/scripts/create_session.sh:
  - WRAPPER uses $LOCAL_BIN env var (default $HOME/.local/bin)
- 6 SKILL.md: examples and explanations updated to mention env var override capability

User/portability contract:
- Workspace-internal data: .hermes/ + .cache/ (moves with workspace)
- User/system data: $HOME/* (overridable via CLAUDE_PROJECT_DIR, LOCAL_BIN)
- All env vars follow: ${VAR:-default} pattern with documented defaults

Verified on isolated server -L agy-homeport-test (kill-server after):
- syntax check PASS
- E2E: defaults resolve to workspace-relative paths
- E2E: env var override correctly changes paths
- 0 leftover direct $HOME references in code
- Global skill non-interference verified
- Main isolated server -L multi-agent-canary untouched
2026-06-20 05:39:27 +00:00
Godopu ad7be264e7 refactor(skills): convert absolute paths to workspace-relative + relocate agent-sessions.yaml to .hermes/
Changes:
- skills/lib.sh: AGENT_SESSIONS_YAML default moved from ~/PuKi/lab/.../agent-sessions.yaml
  to <workspace_root>/.hermes/agent-sessions.yaml (relative via BASH_SOURCE)
- 6 SKILL.md: descriptions + 'Single source of truth' lines updated to .hermes/agent-sessions.yaml
- 6 SKILL.md: bash examples (~/PuKi/lab/agent_sessions/skills/...) → relative paths
- SKILL.md file:// links converted from absolute to relative (resolves workspace tool warnings)
- tmux-agent-orchestrate-create/SKILL.md: removed outdated wrapper template reference
- lib.sh internal comments: removed /home/godopu16/PuKi/lab example
- All scripts: internal source/path references use relative resolution

Verified on isolated server -L agy-relative-path-test (kill-server after):
- syntax check PASS
- E2E: create_session.sh auto-creates .hermes/agent-sessions.yaml at new location
- status.sh reads new location correctly
- 0 leftover absolute path references
- Global skill non-interference verified
- Main isolated server -L multi-agent-canary untouched
2026-06-19 23:41:05 +00:00
Godopu e8eebe5eb1 feat(tmux-agent-orchestrate-monitor): integrate watchdog pattern as skill
Moved /tmp/subscriber-watchdog.sh → skills/tmux-agent-orchestrate-monitor/scripts/watchdog.sh
(skill-managed lifecycle, no longer lives outside workspace).

Added lib.sh::start_watchdog() helper:
- Spawns watchdog as background nohup process
- Writes watchdog log to .hermes/jobs/<JID>.watchdog.log
- Returns watchdog PID via stdout

Wired create_session.sh --submit-job to auto-start watchdog after JOB registration.

Fixes:
- Bug: registry.py get first-line parse was fragile (empty status → infinite loop)
  → Now uses python3 json.load for robust parsing
- Bug: old path skills/delegate-job/scripts/job_subscriber.py hardcoded
  → Now uses skills/tmux-agent-orchestrate-delegate-job/scripts/job_subscriber.py

Verified on isolated server -L agy-watchdog-skill-test (kill-server after):
- Syntax check PASS
- E2E: register job → start watchdog → publish completed → watchdog exits
- Global skill non-interference verified
- Main isolated server -L multi-agent-canary untouched
2026-06-19 23:33:46 +00:00
Godopu e9fc763d31 refactor(skills): rename multi-agent-* + agent-sessions-monitor + delegate-job to tmux-agent-orchestrate-*
Renamed 6 skills directories to tmux-agent-orchestrate-* prefix:
- multi-agent-create → tmux-agent-orchestrate-create
- multi-agent-resume → tmux-agent-orchestrate-resume
- multi-agent-delete → tmux-agent-orchestrate-delete
- multi-agent-status → tmux-agent-orchestrate-status
- agent-sessions-monitor → tmux-agent-orchestrate-monitor
- delegate-job → tmux-agent-orchestrate-delegate-job

Updated:
- skills/lib.sh internal paths (delegate_submit_job etc.)
- skills/tmux-agent-orchestrate-status/scripts/status.sh (monitor path)
- skills/tmux-agent-orchestrate-monitor/scripts/reconcile.sh
- .gitignore (HTML ignore patterns)
- 6 SKILL.md frontmatter (name, related_skills, prereq_skills) and body
- All script headers and Korean comments

Notes:
- tmux session naming convention unchanged (<slug>-creator-<agent>) — workspace identifier based, kept for backward compatibility
- Existing 2 sessions in -L multi-agent-canary untouched
- YAML delegate_job_id / agent-session (tmux:canary-...) preserved for log history compatibility

Verified on isolated server -L agy-rename-test (kill-server after).
2026-06-19 23:27:27 +00:00
Godopu 4fa276f3c5 chore(.gitignore): generalize test-sessions patterns for variants (phase4 suffix) 2026-06-19 15:21:16 +00:00
Godopu 06f076e9cc fix(skills): claude review items 4-7 (subscribe timeout, atomic_dump_yaml, hardcoded paths, lifecycle helper)
Item 4: --subscribe gains --timeout/--idle-timeout (idle default raised
        120s->600s, 0=disable); connect-error AND non-zero CONNACK now fall
        back to a polling loop. SKILL.md matches actual behaviour.
Item 5: --subscribe terminal-event YAML writes routed through
        lib.sh::atomic_dump_yaml (flock + schema-validate + .bak).
Item 6: removed hardcoded /home/godopu16/PuKi fallbacks in lib.sh,
        status.sh (x2) and reconcile.sh; paths now BASH_SOURCE-relative.
Item 7: lib.sh::delegate_publish_event helper consolidates the 4 duplicated
        lifecycle publish blocks; delete cwd|jid parser replaced with JSON.

Also: subscribe loop runs under the project venv python (paho) and delegates
all YAML work to atomic_dump_yaml on system python3 (PyYAML), since neither
interpreter has both modules — the original env_python path could never import
paho. Items 3 + 8 out of scope (per user). Verified on -L claude-phase4-test
(kill-server after).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 15:11:09 +00:00
Godopu 0eb1d94a9c refactor(skills): cleanup dead code + full workflow A→B→C→D integration
Cleanup:
- Remove unused validate_yaml() helper from lib.sh
- Remove USER_MANUAL.html + mqtt-broker-setup.html (no refs found)

Workflow A (create_session ↔ delegate-job):
- Add --submit-job <prompt> option to create_session.sh
- Auto-register session in delegate-job registry, store delegate_job_id in YAML

Workflow B (push-based monitor):
- Migrate reconcile.sh to MQTT subscriber mode (polling fallback preserved)

Workflow C (unified status):
- status.sh now shows session + delegate-job state in single column

Workflow D (audit log + perms):
- JSON job files chmod 600
- create/delete/resume now publish lifecycle events to delegate-job
2026-06-19 14:27:29 +00:00
Godopu 97f649a3e1 feat(skills): integrate delegate-job skill (squashed from delegate-job-skill)
- Copy delegate-job-skill/skills/delegate-job/ → skills/delegate-job/
- Move requirements.txt (paho-mqtt>=2.0.0) into the new location
- Refactor outdated hardcoded paths (~/PuKi/lab/, ~/.hermes/skills/) to dynamic resolution
- Add MQTT connection timeout / retry hardening
- Remove legacy delegate-job-skill/ directory
- Update .gitignore

Note: delegate-job-skill git history is squashed — preserved content, dropped commit lineage.
2026-06-19 14:00:29 +00:00
Godopu 8a3abff2d6 initial: canary multi-agent skills with tmux isolation support
- lib.sh: TMUX_SERVER_NAME env var, _tmux helper, shim externalized
  to TMPDIR with recursive guard, resolve_tmux_server helper for
  YAML-driven server routing
- multi-agent-create: --tmux-server opt-in flag, YAML tmux_server
  field for orphan prevention
- multi-agent-delete/resume/status/agent-sessions-monitor: use
  resolve_tmux_server to auto-route to correct isolated server
- SKILL.md × 4: documented isolation server workflow
- Verified by claude review (R1+re-run) + agy R2 patches
  (orphan prevention + shim location fix)
2026-06-19 13:32:36 +00:00