Skip to content

Move to a new Windows PC ​

Move each data class through its intended channel:

  1. a project repository carries code and .local-knowledge\project.toml;
  2. Memory moves only through a reviewed snapshot;
  3. a private company remote carries its manifest and knowledge\;
  4. original sources use a separate approved backup; and
  5. models, credentials, users, and permissions are configured again.

Commands use $PluginRoot resolved through Quick installation.

On the old PC ​

Every project ​

Commit and push the project, including .local-knowledge\project.toml and the managed .gitignore lines. Create and review a Memory snapshot only if it is needed.

Record each project profile. A memory-only project skips every company step on both PCs.

Only when a project uses company knowledge ​

Push .local-knowledge\company.toml and knowledge\ to a private remote. Do not commit .ckb\ or .local-sources\.

Back up authorized originals separately and create a private, credential-free source inventory. For a file or folder, path is relative to .local-sources\; for a website, it is the seed URL. Record all five fields: kind, path, title, allow-domain, and branch.

json
[
  {
    "kind": "file",
    "path": "policies\\support-policy.md",
    "title": "Support policy",
    "allow-domain": [],
    "branch": "main"
  },
  {
    "kind": "website",
    "path": "https://docs.example.invalid/start",
    "title": "Public product documentation",
    "allow-domain": ["docs.example.invalid"],
    "branch": "main"
  }
]

For example, keep the inventories on approved encrypted backup media:

powershell
$MigrationRoot = "E:\LocalKnowledgeMigration\northstar"
$SourceInventoryPath = Join-Path $MigrationRoot "source-inventory.json"
$AccessInventoryPath = Join-Path $MigrationRoot "access-inventory.json"

From the old portal, also record username, global role, and each branch/branch role membership. Record no password, token, or master key. Do not copy Windows Credential Manager or %LOCALAPPDATA%\LocalKnowledgeSuite\registry.json.

On the new PC ​

1. Install the recorded release ​

Install Git, Codex, uv, and Python 3.12, then install the exact tag:

powershell
codex plugin marketplace add luutru433-coder/local-knowledge-suite --ref v1.0.0
codex plugin add local-knowledge-suite@john-idk

Restart Codex, open a new task, and resolve $PluginRoot again.

Attach the approved backup media and assign its inventory paths again:

powershell
$MigrationRoot = "E:\LocalKnowledgeMigration\northstar"
$SourceInventoryPath = Join-Path $MigrationRoot "source-inventory.json"
$AccessInventoryPath = Join-Path $MigrationRoot "access-inventory.json"

2. Clone the project and choose the correct restore path ​

Assign every path before using it:

powershell
$ProjectRepositoryUrl = "https://github.com/your-org/northstar-support.git"
$ProjectRoot = "D:\Projects\northstar-support"
git clone $ProjectRepositoryUrl $ProjectRoot
$ProjectRoot = (Resolve-Path $ProjectRoot).Path

Read the profile recorded in the project. The next steps depend on that profile:

  • For memory-only, restore the project now:
powershell
& "$PluginRoot\scripts\Invoke-LocalKnowledge.ps1" `
  -Tool local-knowledge `
  -ToolArguments @("project", "restore", "--root", $ProjectRoot)

Then import the reviewed snapshot if one exists, run -Action Verify for vendored mode, run project doctor, trust the project, and stop here. Do not clone/register a company, configure models, restore sources, or create company users.

  • For combined or company-only, do not run project restore yet. Project restore must resolve the company through the new machine's registry, so complete step 3 first.

3. Register the company for combined or company-only ​

powershell
$CompanyRoot = "D:\Knowledge\Northstar-Bicycle-Labs"
$CompanyId = "northstar-bicycle-labs"
$AdminUser = "admin"
$CompanyRepositoryUrl = "https://github.com/your-org/northstar-company-knowledge.git"

git clone $CompanyRepositoryUrl $CompanyRoot
$CompanyRoot = (Resolve-Path $CompanyRoot).Path

& "$PluginRoot\scripts\Invoke-LocalKnowledge.ps1" `
  -Tool local-knowledge `
  -ToolArguments @(
    "company", "register",
    "--root", $CompanyRoot,
    "--admin", $AdminUser
  )

Enter a new local password in the hidden prompt. Do not copy old credentials.

Only after company register succeeds, restore the project:

powershell
& "$PluginRoot\scripts\Invoke-LocalKnowledge.ps1" `
  -Tool local-knowledge `
  -ToolArguments @("project", "restore", "--root", $ProjectRoot)

Import the reviewed snapshot if one exists. Run -Action Verify for vendored mode.

4. Configure models and credentials again ​

Load the chat and embedding models in LM Studio, obtain their exact IDs, and create or update the non-secret config:

powershell
$LmStudioUrl = "http://127.0.0.1:1234/v1"
$ChatModel = Read-Host "Exact chat model ID"
$EmbeddingModel = Read-Host "Exact embedding model ID"
$ConfigPath = Join-Path $CompanyRoot ".ckb\config.json"
$Config = if (Test-Path -LiteralPath $ConfigPath) {
  Get-Content -Raw -Encoding utf8 $ConfigPath | ConvertFrom-Json
} else {
  [pscustomobject]@{}
}
$Config | Add-Member NoteProperty lm_studio_url $LmStudioUrl -Force
$Config | Add-Member NoteProperty chat_model $ChatModel -Force
$Config | Add-Member NoteProperty embedding_model $EmbeddingModel -Force
$ConfigJson = $Config | ConvertTo-Json -Depth 20
$Utf8NoBom = New-Object System.Text.UTF8Encoding($false)
[IO.File]::WriteAllText(
  $ConfigPath,
  $ConfigJson + [Environment]::NewLine,
  $Utf8NoBom
)

Do not leave local-chat-model or local-embedding-model in the file.

Start the portal and re-enter the LM Studio bearer token if required. For a private remote, re-enter the Git username/PAT under Settings → Credentials. Put no secret in config, chat, Git, or an inventory.

Before any source-add or ingestion:

powershell
& "$PluginRoot\scripts\Invoke-LocalKnowledge.ps1" `
  -Tool local-knowledge `
  -ToolArguments @("company", "health", "--company", $CompanyId)

Continue only when JSON reports status: "ok" and database, chat, secrets, and OKF are ready. Repair embeddings for semantic search and OCR before ingesting scanned PDFs.

5. Restore and ingest every source again ​

Copy source backups to the same relative paths below $CompanyRoot\.local-sources\. Register them from the inventory and run each new job:

powershell
$SourceRoot = Join-Path $CompanyRoot ".local-sources"
$Inventory = Get-Content -Raw -Encoding utf8 $SourceInventoryPath |
  ConvertFrom-Json

foreach ($Source in $Inventory) {
  $Uri = if ($Source.kind -eq "website") {
    [string]$Source.path
  } else {
    Join-Path $SourceRoot ([string]$Source.path)
  }

  $SourceArgs = @(
    "company", "source-add", "--company", $CompanyId,
    [string]$Source.kind, $Uri,
    "--title", [string]$Source.title,
    "--branch", [string]$Source.branch
  )
  foreach ($Domain in @($Source.'allow-domain')) {
    $SourceArgs += @("--allow-domain", [string]$Domain)
  }

  $Added = (
    & "$PluginRoot\scripts\Invoke-LocalKnowledge.ps1" `
      -Tool local-knowledge -ToolArguments $SourceArgs |
      Out-String
  ) | ConvertFrom-Json
  $Queued = (
    & "$PluginRoot\scripts\Invoke-LocalKnowledge.ps1" `
      -Tool local-knowledge `
      -ToolArguments @(
        "company", "ingest", "--company", $CompanyId, [string]$Added.id
      ) |
      Out-String
  ) | ConvertFrom-Json

  & "$PluginRoot\scripts\Invoke-LocalKnowledge.ps1" `
    -Tool local-knowledge `
    -ToolArguments @(
      "company", "run-job", "--company", $CompanyId,
      [string]$Queued.job_id
    )
}

This is a new source registration and ingestion, not a .ckb\ copy. Websites are crawled again under their allowlists. Git-restored claims remain unverified until their evidence is ingested again.

6. Recreate users and permissions ​

Create each user from the access inventory; passwords are entered only in the hidden prompt:

powershell
& "$PluginRoot\scripts\Invoke-LocalKnowledge.ps1" `
  -Tool local-knowledge `
  -ToolArguments @(
    "company", "user-add", "--company", $CompanyId,
    "reviewer1", "--role", "reviewer"
  )

In portal Branches, recreate any local branches and assign every user to the recorded branch role. Do not guess or elevate permissions.

7. Acceptance checks ​

Run company health again, then:

powershell
& "$PluginRoot\scripts\Invoke-LocalKnowledge.ps1" `
  -Tool local-knowledge `
  -ToolArguments @("project", "doctor", "--root", $ProjectRoot)

Trust the project, open a new Codex task, call knowledge_status, and test one Memory recall and one company answer with verified citations.

See the printable migration checklist.

Released under the MIT License.