chenhg5/cc-connect · error

claudecode: cannot determine home dir: %w

Error message

claudecode: cannot determine home dir: %w

What it means

Wraps a failed os.UserHomeDir() inside claudecode Agent.ListSessions. Claude Code stores project session files under ~/.claude/projects/...; without a home directory the storage path cannot be built, so listing aborts.

Source

Thrown at agent/claudecode/claudecode.go:562

	platformPrompt := a.platformPrompt
	systemPrompt := a.systemPrompt
	appendSystemPrompt := a.appendSystemPrompt
	// Issue #1655: agent-level language drives the localized cc-connect system
	// prompt. Read under the mutex and pass through to newClaudeSession so the
	// session picks up the right tool-prompt bundle at spawn time.
	lang := a.lang
	// When router_url is set, --verbose conflicts with --output-format stream-json
	// (verbose emits non-JSON text to stdout that corrupts the JSON stream).
	disableVerbose := a.routerURL != ""
	a.mu.Unlock()

	return newClaudeSession(ctx, workDir, a.cmd, a.cliExtraArgs, a.cmdArgsFlag, model, effort, sessionID, mode, systemPrompt, appendSystemPrompt, tools, disTools, pluginDirs, extraEnv, platformPrompt, disableVerbose, a.spawnOpts, maxTok, a.ccDataDir, lang)
}

func (a *Agent) ListSessions(ctx context.Context) ([]core.AgentSessionInfo, error) {
	homeDir, err := os.UserHomeDir()
	if err != nil {
		return nil, fmt.Errorf("claudecode: cannot determine home dir: %w", err)
	}

	a.mu.RLock()
	workDir := a.workDir
	a.mu.RUnlock()
	absWorkDir, err := filepath.Abs(workDir)
	if err != nil {
		return nil, fmt.Errorf("claudecode: resolve work_dir: %w", err)
	}

	projectDir := findProjectDir(homeDir, absWorkDir)
	if projectDir == "" {
		return nil, nil
	}

	entries, err := os.ReadDir(projectDir)
	if err != nil {
		if os.IsNotExist(err) {

View on GitHub (pinned to 4000b2338a)

Solutions

  1. Set HOME in the cc-connect daemon environment
  2. Verify the user running cc-connect exists with a valid home
  3. Retry /sessions after fixing the environment
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at agent/claudecode/claudecode.go:562 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of chenhg5/cc-connect@4000b2338a (2026-09-06). Data as JSON: /api/errors/295fa36cd8ec347b. Report an issue: GitHub.