janhq/jan · error · FileNotFoundError

Jan app not found at {jan_app_path}

Error message

Jan app not found at {jan_app_path}

What it means

Raised when the resolved Jan executable path does not exist on the filesystem. The function checks os.path.exists(jan_app_path) and, if false, logs an error and raises FileNotFoundError. This fires regardless of platform — the path may be a default guess or a user-supplied value.

Source

Thrown at autoqa/utils.py:240

    """
    Start Jan application in maximized window (cross-platform)
    """
    # Set default path based on platform
    if jan_app_path is None:
        if IS_WINDOWS:
            jan_app_path = os.path.expanduser(r"~\AppData\Local\Programs\jan\Jan.exe")
        elif IS_LINUX:
            jan_app_path = "/usr/bin/Jan"  # or "/usr/bin/Jan" for regular
        elif IS_MACOS:
            jan_app_path = "/Applications/Jan.app/Contents/MacOS/Jan"  # Default macOS path
        else:
            raise NotImplementedError(f"Platform {platform.system()} not supported")
    
    logger.info(f"Starting Jan application from: {jan_app_path}")
    
    if not os.path.exists(jan_app_path):
        logger.error(f"Jan executable not found at: {jan_app_path}")
        raise FileNotFoundError(f"Jan app not found at {jan_app_path}")
    
    try:
        # Start the Jan application
        if IS_WINDOWS:
            subprocess.Popen([jan_app_path], shell=True)
        elif IS_LINUX:
            # On Linux, start with DISPLAY environment variable
            env = os.environ.copy()
            subprocess.Popen([jan_app_path], env=env)
        elif IS_MACOS:
            # On macOS, use 'open' command to launch .app bundle properly
            if jan_app_path.endswith('.app/Contents/MacOS/Jan'):
                # Use the .app bundle path instead
                app_bundle = jan_app_path.replace('/Contents/MacOS/Jan', '')
                subprocess.Popen(['open', app_bundle])
            elif jan_app_path.endswith('.app'):
                # Direct .app bundle
                subprocess.Popen(['open', jan_app_path])

View on GitHub (pinned to fad3f12a14)

Solutions

  1. Install Jan at the default platform location (e.g. /usr/bin/Jan on Linux, AppData\Local\Programs\jan\Jan.exe on Windows).
  2. Pass jan_app_path explicitly to point to the actual Jan binary.
  3. Verify the path with `ls -la <path>` or `test -f <path>` before calling start_jan_app().

Example fix

# before
start_jan_app()
# after
start_jan_app(jan_app_path="/snap/bin/jan")
Defensive patterns

Strategy: validation

Validate before calling

import os

def jan_path_is_valid(jan_app_path: str) -> bool:
    return os.path.isfile(jan_app_path)

# Before calling:
if not jan_path_is_valid(resolved_path):
    print(f"Jan not found at {resolved_path}; install it or pass the correct path")

Prevention

When it happens

Trigger: Jan is not installed; Jan is installed in a non-default location; the default path for the platform doesn't match where the user installed Jan; jan_app_path points to a wrong or stale location.

Common situations: Fresh CI environment without Jan pre-installed; user installed Jan via Snap/Flatpak/AppImage whose binary lives elsewhere; portable Windows install where Jan.exe is not under AppData\Local\Programs.

Related errors


AI-assisted analysis of janhq/jan@fad3f12a14 (2026-08-12). Data as JSON: /api/errors/29860367d324a9db. Report an issue: GitHub.