Chronos (Second-Brain)

log.md

Chronos — Log

2026-07-07 — Built, hardened, and installed the Chronos plugin

  • Started from an email-drafting task (Harris/Reseller thread, then Adobe/Spectrum thread) using the gws and tone-of-voice skills; along the way found and fixed the gws +reply-all Cc-not-carrying bug and the --attach cwd restriction.
  • Meeting-scheduling need surfaced the existing meeting-scheduler skill, which turned out to reference a stale absolute path (~/AI-Development/Scheduler/ — the parent folder had been renamed to AI-Development-OLD). Fixed the path; also found and root-cause-fixed a live Google OAuth client secret hardcoded in plaintext in gws's skill.md — moved to ~/.config/gws/.env (0600, gitignored).
  • User directed: don't keep gws and meeting-scheduler as separate skills, bundle them into one composite plugin with an explicit dependency. Named it Chronos (user's pick, over Daybook/Meridian options offered).
  • Built plugins/chronos/ in the public arijit-skills repo: .claude-plugin/plugin.json, skills/gws/SKILL.md, skills/meeting-scheduler/SKILL.md + its full backing project (src/tests/docs), repo-root .claude-plugin/marketplace.json (the actual install entry point). Opened PR #1.
  • User pushed hard on "is this actually distributable" — audit found it wasn't: hardcoded absolute paths throughout meeting-scheduler's SKILL.md, hardcoded owner identity (Arijit's email/timezone baked into every step instead of resolved generically), lowercase skill.md instead of the real SKILL.md plugin convention, a non-standard field in plugin.json. Fixed all of it; added resolve_contact.py --owner (reads team.json's owner: true flag) so no identity is ever hardcoded.
  • Caught two more real bugs by actually running the test suite rather than trusting it: a PII-scrub pass I'd done earlier had silently broken two tests (querying a name that no longer existed in the fixture), which fell through to a live gws subprocess call against real calendar data — mocked it out. Also found conftest.py claimed integration tests "auto-skip" but never implemented that — added real pytest_addoption/pytest_collection_modifyitems logic so a plain pytest run is safe with no gws auth configured.
  • Did the actual claude plugin CLI install (not simulated): marketplace-add pointed at the local branch (PR not merged to main yet), install, verified via claude plugin list/details/validate. Confirmed empirically that a newly-installed plugin does NOT hot-load into an already-running session (tried invoking chronos:gws mid-session, got Unknown skill) — needs a restart, which happened between turns and confirmed working (chronos:gws/chronos:meeting-scheduler showed up as available skills afterward).
  • Retired the old loose ~/.claude/skills/gws and ~/.claude/skills/meeting-scheduler (moved fully outside the skills-scanning path, not just renamed) to eliminate duplicate registration — verified zero duplicates.
  • User explicitly asked me to test the update flow. Did: bumped 1.0.0→1.0.1, ran claude plugin update for real — and it exposed a second real bug: claude plugin update replaces the entire installed plugin payload per version, so team.json placed inside the plugin's own directory doesn't survive an update. Root-cause fixed: moved to ~/.config/chronos/team.json. Bumped to 1.0.2, updated again, re-verified real data resolves correctly post-update.
  • Final proof requested: simulated an actual fresh third-party user (HOME pointed at an isolated temp dir, fake team.json with a fictional owner in London and a colleague in Tokyo, zero shared state with this machine) — owner and named-contact resolution both correct. This is the concrete answer to "will someone else who installs this actually be able to use it."
  • Clarified with the user (after some back-and-forth where I over-explained something he already understood): a Claude Code skill is not a callable API — it only has effect when an LLM reads and follows it. His actual architecture (AI-OS/dashboard's backend is itself Claude-driven) means his dashboard's Claude instance would invoke this the same way this session does; that's already fully supported, nothing further to build for that path.
  • Side-thread, same session: an unrelated but connected cleanup of ~/AI-Development-OLD/ (the folder the Scheduler project's old absolute path pointed at) — see Projects/AI-OS/log.md for that thread; it's about disk hygiene, not Chronos itself, but is why the stale-path bug surfaced in the first place.
  • Not done yet: PR #1 not merged. No formal skill-trigger-precision eval run. RAG/Scout/PIP (unrelated folders touched during the AI-Development-OLD side-thread) still have real content gaps not yet synced to Dropbox.