Skip to content

Dashboard CLI ergonomics: config discovery, daemon + MCP auto-start, first-class install docs (MCP 3.0.0rc2)#99

Merged
Foxfire1st merged 4 commits into
mainfrom
ar/260703_dashboard-cli-ergonomics
Jul 3, 2026
Merged

Dashboard CLI ergonomics: config discovery, daemon + MCP auto-start, first-class install docs (MCP 3.0.0rc2)#99
Foxfire1st merged 4 commits into
mainfrom
ar/260703_dashboard-cli-ergonomics

Conversation

@Foxfire1st

Copy link
Copy Markdown
Owner

Dashboard CLI Ergonomics (master series 260703) — and MCP 3.0.0rc2

Makes running the mission-control dashboard effortless and cuts MCP 3.0.0rc2. Built as a master + 4 leaves on ar/260703_dashboard-cli-ergonomics (off main), each leaf landed through its own gated closeout; the release bump lands before the merge per the series sequencing rule.

  • L1 (08307e1): config auto-discovery--config becomes optional: a nearest-wins upward walk from the working directory (the .claude/mcp/agents-remember-settings.json convention before an .mcp.json registration's recorded path), with a semantic usability probe so the repository's tracked placeholder template never shadows real settings. New cli/discovery.py + 8 tests.
  • L2 (66af2a7): daemon mode + MCP auto-start--daemon/--status/--stop over a flock-guarded ensure() in the new serving/daemon.py (adopt healthy / spawn absent / restart on version mismatch; atomic daemon.json, per-spawn-rotated log with access logs off, identity-checked liveness, TERM→KILL stop); the fail-loud dashboard settings key (autoStart, port) drives a threaded, total, stderr-only supervision hook in the MCP server boot. Settings reference + example updated. +38 tests, plus a live-fire smoke (detach survives the parent, HTTP 200, version-mismatch restart, real agents-remember-mcp boot spawning the daemon, clean stop).
  • L3 (7bebee5): install docs — the README gains a ToC-linked "Run The Dashboard" section and the PyPI page the same story: unpinned uv tool install agents-remember-mcp first-class, pinning as the debugging path, one rc-period pre-release note. Every documented command verified against real PyPI resolution (unpinned resolves the latest stable; --prerelease allow resolves the rc).
  • L4 (44c8051): release 3.0.0rc2 (pyproject + SERVER_VERSION fallback + README Status).

Suite: 1393 passed / quality gate exit 0 at every leaf. Post-merge: memory carryover onto the official memory main, then tag mcp-v3.0.0rc2 to publish to PyPI with GitHub Release notes.

🤖 Generated with Claude Code

Readone Mohamed added 4 commits July 3, 2026 11:19
…wins upward walk (settings convention, then the .mcp.json-recorded path; a semantic probe keeps the tracked template from shadowing real settings)
… a flock-guarded ensure (adopt healthy, spawn absent, restart on version mismatch; state under logs/dashboard/), driven from every server boot by the fail-loud dashboard settings key (autoStart, port)
… — README gains Run The Dashboard (discovery, daemon, autoStart) and the PyPI page the same story; pinning documented as the debugging path with one rc-period pre-release note
@Foxfire1st
Foxfire1st merged commit 38c5631 into main Jul 3, 2026
4 checks passed
@Foxfire1st
Foxfire1st deleted the ar/260703_dashboard-cli-ergonomics branch July 3, 2026 09:47

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 44c8051d00

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".


from agents_remember.benchmarks.runner import CODEX_BENCHMARK_SANDBOX
from agents_remember.observer import AmbientLifecycle, EventStore, install_ambient, observer_root
from agents_remember.serving.daemon import maybe_autostart_dashboard

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Keep the MCP server importable on Windows

On native Windows, this new top-level import makes every agents-remember-mcp startup import agents_remember.serving.daemon, which imports the POSIX-only fcntl module before config is even parsed. The install docs explicitly cover native Windows setup (docs/install/README.md), so Windows users will fail to start the MCP server even when dashboard.autoStart is false; make the daemon import/locking implementation platform-safe or lazy behind the dashboard feature.

Useful? React with 👍 / 👎.

current, alive = probe(directory)
mismatch = ""
if alive and current is not None:
if current.version == version and current.port == port and current.host == host:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Restart the daemon when its config differs

This adoption check ignores the recorded configPath, so a workspace with multiple harness settings files, or a moved/re-rendered settings file sharing the same coordinationRoot, will report adopted while the existing daemon continues serving the old repository/provider configuration. Since spawn() records configPath and the CLI promises to use the caller's trusted settings, include the resolved config identity (and ideally settings content freshness) in the mismatch decision.

Useful? React with 👍 / 👎.

Comment on lines +378 to +379
with socket.create_connection((connect_host, state.port), timeout=0.5):
return True

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Verify readiness belongs to the spawned dashboard

When the requested port is already bound by another process, this TCP connect succeeds even though the newly spawned dashboard will fail to bind, so ensure() can return started/restarted and write state for a pid that is not serving the dashboard. The readiness probe needs to confirm the spawned child is still alive after the connection and that the endpoint is the dashboard (or otherwise treat an occupied port as startup failure).

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant