Your project is more than its code. There is the CLAUDE.md or AGENTS.md that tells your assistant how to work, the notes and decisions that explain why things are the way they are, and the few AI coding sessions worth reading again. Usually these are spread across folders, machines and chat histories.

PrjLab keeps a project and its context together. You push from the terminal with the prj CLI, browse and share in the browser, and clone the whole picture onto any machine.

This walkthrough takes you from no account to a pushed project, a clone on a second machine, and a shared repository. It follows the same steps as the getting-started guide.

What you will have at the end

After these steps you will have:

  • An account with a handle, for example anna.
  • A private repository, for example anna/fieldnotes.
  • The prj CLI installed and signed in.
  • A first version of your project, with its instructions, memory and sessions, that you can open in the browser.
  • The same project cloned on another machine, and optionally shared with a teammate.

You need Node.js 22 or newer and a project folder you want to keep.

Step 1: Create an account and a repository

Open Sign in. The same button creates a new account:

  1. Enter your email address.
  2. Choose a password.
  3. Confirm the code we send you.
  4. Pick your handle, for example anna.

Your handle is how others find you and how repositories are named: anna/fieldnotes.

Then create your first repository with New repository. Repositories are private: only you and the people you invite can see them.

Step 2: Install the CLI and sign in

The CLI is called prj. It is open source (MIT) and published on npm as prjlab-cli. Install it globally:

npm install -g prjlab-cli

Check it works and sign in:

prj --version
prj login
prj whoami

prj login opens your browser. Nothing is typed into the terminal. Your sign-in is stored in your operating system's keychain, never in a plain file. prj whoami shows the handle you are signed in as.

Step 3: Put your context beside the code

PrjLab captures three kinds of context with explicit content types. Put what you want to keep in these folders inside your project:

.prjcontext/instructions/   project instructions (CLAUDE.md and AGENTS.md are recognised too)
.prjcontext/memory/         decisions, notes, project memory
.prjcontext/sessions/       the conversations you chose to keep

If you already have CLAUDE.md or AGENTS.md at the project root, leave them there. They are recognised as instructions. Claude Code reads CLAUDE.md files and many other coding agents read AGENTS.md, so keeping them at the root keeps your assistant working as before.

A small project might look like this before its first push:

fieldnotes/
  CLAUDE.md
  src/
  .prjcontext/
    memory/
      current-state.md
      decisions/
        2026-09-18-db-job-queue.md
    sessions/
      2026-09-20-import-refactor.md

What to put in first

You do not need a full set of context before your first push. A useful starting point:

  • Instructions: your existing CLAUDE.md or AGENTS.md. If you have none, write five lines: how to install, how to test, and the two or three rules you repeat most often to your assistant.
  • Memory: one current-state.md note saying what you are working on, what is next, and what not to touch. Add a decision record the next time you reject a reasonable option.
  • Sessions: one conversation you would want to reread, trimmed of long tool output and anything private. Name it with a date and a topic.

You can add more with every push. Each version keeps what the context looked like at that moment.

Not sure what to write in these files? See project memory for AI coding and which AI coding sessions are worth keeping.

Step 4: Check, then push

Inside your project folder, initialise once and check what would be captured:

cd ~/projects/fieldnotes
prj init
prj status          # what would be captured

Read the prj status output before you push. The CLI captures regular files, honours your .gitignore and .prjignore, and always skips secrets such as .env, key files and credential folders. Global assistant folders, other projects and machine credentials are never scanned. These filename rules are a safety net, not a complete secret scanner, so look at your saved sessions and notes too. The article on keeping secrets out of AI context has a checklist.

Before your first push, check the list against these questions:

  • Are your instructions, memory and sessions in it?
  • Is anything there you would not want a future teammate to read?
  • Are build outputs or dependency folders listed? Add them to .prjignore if they are not already in .gitignore.
  • Did any saved session capture a token or a password? Remove it from the file, then run prj status again.

When the list looks right, push to the repository you created. Use your-handle/repository-name exactly as shown on the repository page:

prj push anna/fieldnotes

Every push creates an immutable version you can open in the browser, with a list of changes and a line diff between versions. You can also download a repository or a version as a .zip. After the first push the remote is remembered, so next time a plain prj push is enough.

If the network drops during a push, run the same command again. The CLI completes the original push instead of creating a duplicate.

Step 5: Clone it on another machine

On another machine, install the CLI, sign in with the same account, and clone:

prj clone anna/fieldnotes        # creates ./fieldnotes
cd fieldnotes
prj pull

You get the code and its context in one folder: instructions, memory and sessions. Later, prj pull brings that copy up to date. It never overwrites edits you made locally: conflicting files are reported instead of replaced.

For a routine that makes switching machines painless, see continuing an AI coding project on another machine.

Step 6: Share it

Open the repository, choose Access, and invite a handle as a reader (view and clone) or a writer (also push). The invitation appears on their Repositories page. Once they accept, they can run prj clone anna/fieldnotes too. Only the owner manages access, and removing someone takes effect immediately.

To share with everyone, open Settings and make the repository public. Anyone can then read and clone it at prjlab.com/anna/fieldnotes, and it appears on Explore and on your profile. Publishing exposes every version, including project memory and sessions, so review them first. The same Settings tab renames or deletes a repository.

A few facts worth knowing:

  • Early-access limits per repository: 1,000 files, 5 MiB per file and 100 MiB per version. PrjLab is free during early access.
  • Storage: files are encrypted at rest and served only to current members. PrjLab can read private content to show previews and serve clones, so this is not end-to-end encryption. Hosting is in the EU.
  • Local safety commands: prj snapshot captures a local version offline, prj export writes a local version to a new folder, prj restore restores one in place, and prj recover finishes an interrupted operation.
  • Your account: you can list and end browser sessions, export your data as JSON, or delete your account from account settings.
  • Git: PrjLab sits beside git. Keep using git for your code history.

Frequently asked questions

Do I have to use the .prjcontext folders? No. Regular files are captured either way, and CLAUDE.md and AGENTS.md at the root are recognised as instructions. The folders make memory and sessions explicit, so they are easy to find and review.

Will prj pull overwrite my work? No. If a file changed both locally and in the repository, it is reported as a conflict instead of replaced.

Does the CLI upload my .env file? No. It skips .env files, key files and credential folders, plus anything in .gitignore or .prjignore. It is not a complete secret scanner, so review prj status before each push.

Can I use PrjLab with any AI assistant? Yes. PrjLab stores plain files. Any assistant that reads your project folder can read the instructions, memory and sessions after a clone.

Ready to push your first project? Create a free account.