Skip to content

CLI cleanup: align docs, stdio behavior, cache UX, and shard output after v0.6.13 #166

@jonathanpopham

Description

@jonathanpopham

Supermodel CLI Issue Drafts

These are draft issue bodies based on local testing against supermodel 0.6.13.

1. mcp writes non-JSON banner to stdout before JSON-RPC

supermodel mcp currently writes a readiness banner to stdout before JSON-RPC messages:

supermodel mcp 0.6.13 - ready
{"jsonrpc":"2.0","id":1,"result":{...}}

Repro:

printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' | supermodel mcp --repo .

Expected:

  • stdout should contain only JSON-RPC protocol messages.
  • Human-readable startup logs should go to stderr or be suppressed in stdio mode.

Also observed:

  • initialize reports serverInfo.version: "0.1.0" while the binary is 0.6.13.
  • tools/list exposes memory-graph tools not mentioned in CLI docs: upsert_memory_node, create_relation, search_memory_graph, retrieve_with_traversal, prune_stale_links, add_interlinked_context.

2. --three-file does not produce documented .deps and .impact files

README says supermodel analyze --three-file produces three files per source file:

  • .calls
  • .deps
  • .impact

Local smoke test produced only:

main.calls.go

Repro:

supermodel clean .
supermodel analyze . --three-file --force
find . -maxdepth 2 -type f \( -name '*.calls.*' -o -name '*.deps.*' -o -name '*.impact.*' \)

Expected:

  • Either produce the documented three files, including empty-but-structured .deps and .impact shards, or update docs to say only non-empty shard files are emitted.

3. Generated docs-output is included in later analyses

After running:

supermodel docs . --output ./docs-output --force
supermodel analyze . --three-file --force

The analyze command uploaded the generated static site as part of the repo:

50 files to upload
html 38
json 2
txt 2
xml 2
...

The original smoke repo had only go.mod, main.go, and README.md.

Expected:

  • Either default docs output should be excluded from future analyses, or docs should strongly warn users to add the output dir to .supermodel.json/.gitignore.

4. Bare supermodel watch leaves shard files after Ctrl+C

Root help says:

Press Ctrl+C to stop and remove graph files.

Observed:

supermodel --dir /private/tmp/supermodel-cli-smoke
# Ctrl+C
find /private/tmp/supermodel-cli-smoke -maxdepth 2 -type f -name '*.graph.*'

Result:

/private/tmp/supermodel-cli-smoke/main.graph.go

Expected:

  • Either Ctrl+C cleanup should remove generated graph files, or help text should not promise cleanup.

5. restore --local reports zero files/functions for a tiny Go repo

Repro repo:

go.mod
main.go
README.md

main.go defines main, greet, and unusedHelper.

Command:

supermodel restore --local --dir . --max-tokens 1000

Observed:

**Codebase:** 0 files · 0 functions

Expected:

  • Local mode should at least count recognized source files by extension.
  • If local mode cannot count functions, wording should avoid claiming 0 functions.

6. compact <file> appends stats directly to stdout source output

Command:

supermodel compact main.go

Observed output ends with compacted source immediately followed by stats:

func unusedHelper() string {
	return "unused"
}main.go: 187 -> 182 bytes  (2.7% reduction, ~47 -> ~46 tokens)

Expected:

  • Compacted source on stdout should remain valid standalone source.
  • Stats should go to stderr, or at least be separated by a newline and gated behind a flag.

7. Cache reuse/invalidation behavior is confusing across commands

Sequence:

supermodel analyze . --force
supermodel graph .
supermodel find greet
supermodel focus main.go

Observed:

  • graph, find, and focus each displayed Uploading and analyzing repository... instead of visibly reusing the earlier analyze result.

Later, after docs output polluted an analysis and was removed:

supermodel --dir /private/tmp/supermodel-cli-smoke

Watch loaded an existing cache with the polluted 43-file result:

Loaded existing cache (62 nodes, 65 relationships)
43 files · 4 functions · 65 relationships

Expected:

  • Cache behavior should be consistent and explainable.
  • Commands that reuse cache should say so.
  • Commands should not reuse stale cache after generated files are removed.

8. README command table still lists watch [path]

Actual command surface has no watch subcommand. The watch daemon is the bare supermodel command.

README currently says:

watch [path] | Generate graph files on startup, then keep them updated incrementally

Expected:

  • Replace watch [path] with bare supermodel.
  • Update old blog/sample copy that says supermodel watch.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions