Import projects and conversations
Add project → Import project and conversations brings an existing project and its
agent conversations into a daemon. The entry appears only when the daemon reports the
projectImport capability (0.7.0 and later). It needs the workspace.manage permission;
importing provider sessions also needs workspace.write.
There is no CLI command for this flow. To import one provider session into a project you already have, Import session on the home screen still works as before.
Pick a source
Section titled “Pick a source”The dialog asks where the conversations live:
| Source | Reads | Imports as |
|---|---|---|
On <host> |
Provider sessions the daemon already has for the directory, plus optional exported JSONL in a daemon directory | Provider sessions (resumable) and text history |
| This computer | Files you select in the app: Claude or Codex JSONL conversations, and optionally a project folder | Text history, plus copied project files |
A path on your computer is never treated as a path on the daemon, and the reverse. You
always type the Project directory on <host> as a daemon path. ~ expands to the
daemon user’s home.
This computer is shown only where the app can select a local folder (the web app and the desktop app). On Android the dialog offers the daemon source only.
Import from the daemon
Section titled “Import from the daemon”- Open Add project and choose Import project and conversations.
- Keep On
<host>selected and enter the project directory on the daemon. It must already exist. - Optionally enter an Exported conversation directory. frogg reads
*.jsonlfiles from it, up to 12 levels deep, skipping symlinks. - Choose Preview import. Nothing is created yet.
- Tick the conversations to keep and choose Import selected.
Provider sessions come from the providers installed on the daemon that support session import, filtered to sessions whose working directory resolves to the same canonical path. They are imported as normal agents you can resume. A session that is already imported is reused, not duplicated. A session already imported into a different project fails with an error instead of moving.
Import from this computer
Section titled “Import from this computer”- Choose This computer and enter the destination directory on the daemon.
- Choose Claude or Codex JSONL conversations. At least one is required.
- Optionally Choose project files to copy a project folder.
- Preview import uploads the files in 192 KiB chunks, with a byte counter. Cancel stops the upload.
- Tick conversations and choose Import selected.
The destination decides what happens to project files:
| Destination | Project files selected | Result |
|---|---|---|
| Does not exist | Yes or no | frogg creates it, copies the files, registers the project |
| Exists | No | Conversations merge into the project at that path; code is untouched |
| Exists | Yes | Rejected: “The destination already exists. Merge conversation files only, or select a new destination for project files” |
The parent of a new destination must already exist. Files are fully staged next to the destination and published with one rename, so a failed copy leaves no partial directory. Existing files are never overwritten.
What is not copied:
.git,node_modules,.envand.env.*,credentials,credentials.json,auth.json(at any depth).- Git history and executable bits. Copied files are plain regular files.
Paths that are absolute, contain .., backslashes, Windows reserved names (con, nul,
com1 and so on) or collide when case is ignored are rejected.
Provider session versus text history
Section titled “Provider session versus text history”Each preview row shows the provider and one of two labels:
- Provider session: a native session found on the daemon. It becomes an agent and can be resumed like any other.
- Text history: a parsed JSONL transcript. frogg keeps the user and assistant text only. Tool calls, tool output, images and attachments are dropped. It cannot resume the original provider session and does not appear as an agent.
Only Claude Code and Codex JSONL are recognized. Other JSON, mixed formats and files with more than one session are rejected with an error.
To read saved text history later, open the import dialog again, enter the same project directory and choose Preview import. Saved imported conversations lists it; select one to read it, 128 KiB of messages at a time with Load more.
Deduplication and retries
Section titled “Deduplication and retries”- The existing project is found by canonical daemon path, not by name.
- Provider sessions are matched by provider and native session ID.
- Text history is keyed by project plus the transcript’s session ID, or its message content
when there is none. Records are stored under
FROGG_HOME/project-conversations/and survive restarts. - Re-importing the same or a shorter copy is skipped. A longer copy with the same start updates the saved history. A copy that diverges fails with “This conversation differs from its existing imported history; neither version was overwritten”.
- If some conversations fail, the rest are imported, the failures are listed with their errors, and the failed rows stay selected so Import selected retries them.
- Once started, a commit finishes on the daemon even if the app disconnects.
Limits
Section titled “Limits”| Limit | Value |
|---|---|
| Files per import | 2,000 |
| Size per file | 16 MiB |
| Total upload | 64 MiB |
| Conversations per import | 500 |
| Text per message | 128 KiB |
| Lines per conversation file | 50,000 |
| Open imports per daemon | 3 |
| Staged import lifetime | 1 hour after last use |
Uploads are staged in FROGG_HOME/project-import-staging/ and removed on cancel, success or
expiry, including stale ones left by a daemon restart. A daemon restart before commit means
you start again from Preview import.