Getting Started
Getting started with GoodMem configuration and testing
By now you should have installed GoodMem, either manually or through the devcontainer. If you have not completed this step, please begin with the installation.
Prefer a visual interface? The GoodMem server includes a built-in web console at /console/. It walks you through the same setup steps below — creating an embedder, space, and LLM — without needing the command line. See the Console documentation for details.
Note: OCR (Optical Character Recognition) is provided by the GoodMem OCR add-on service/image and is not included in the base install. If you plan to use OCR, enable the add-on and configure GOODMEM_OCR_BASE_URL.
Devcontainer Setup (Skip if you installed GoodMem manually)
-
Click below to open a Codespace using the GoodMem template repository:
-
To view your GoodMem API Key, use this command:
grep api_key ~/.goodmem/config.toml
Configuration Steps
-
When installation completes, you should see output similar to the following:
✓ Installation completed successfully! ℹ GoodMem is ready to use. ℹ Web console: https://localhost:8080/console ℹ Active profile: default ℹ Server URL: https://localhost:9090 ℹ API Key: gm_xxxxxxxxxxxxxxxxxxxxxxxx ℹ Install type: local-docker
The default install uses a self-signed certificate. TLS is enabled out of the box, but clients (browsers, SDKs, curl) cannot verify the ephemeral certificate. For local development we recommend mkcert — it creates locally-trusted certificates in minutes and eliminates TLS errors in every language. If you already installed with the default self-signed setup, the same guide includes a step-by-step migration for switching that install to mkcert later. See TLS Configuration for the full set of options.
- The installer saves your root API key to the active CLI profile automatically, so CLI commands work immediately. If you plan to use the SDKs or REST API directly, note the key from the output above — it is only shown once. You can also use the command below to grab the GoodMem api key:
grep api_key ~/.goodmem/config.toml-
Obtain your OpenAI API Key from the OpenAI dashboard and keep it ready for the next step.
-
Create an embedder (must be created before a space):
goodmem embedder create \ --display-name "OpenAI Small Embedder" \ --provider-type OPENAI \ --endpoint-url "https://api.openai.com/v1" \ --model-identifier "text-embedding-3-small" \ --dimensionality 1536 \ --cred-api-key YOUR_OPENAI_API_KEY_FROM_STEP_3The command should output:
Embedder created successfully! ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Display Name: OpenAI Small Embedder Owner: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Provider Type: OPENAI Distribution: DENSE Endpoint URL: https://api.openai.com/v1 API Path: /embeddings Model: text-embedding-3-small Dimensionality: 1536 Created by: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Created at: 2026-08-20T21:09:00ZSAVE THE ID
Need help choosing endpoint_url or api_path for a provider? See the Endpoint registration guide.
-
Create a space linked to that embedder:
goodmem space create \ --name "My OpenAI Small Space" \ --embedder-id YOUR_EMBEDDER_ID_FROM_STEP_4The command should output:
Space created successfully! ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Name: My OpenAI Small Space Owner: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Created by: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Created at: 2026-08-20T21:08:20Z Public: false Embedder: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (weight: 1.0)SAVE THE ID
-
Create an LLM:
goodmem llm create \ --display-name "My GPT-4" \ --provider-type OPENAI \ --endpoint-url "https://api.openai.com/v1" \ --model-identifier "gpt-4o"The command should output:
LLM created successfully! ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Display Name: My GPT-4 Owner: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Provider Type: OPENAI Endpoint URL: https://api.openai.com/v1 API Path: /chat/completions Model: gpt-4o Modalities: TEXT Capabilities: Chat, Completion, Functions, System Messages, Streaming, Sampling Parameters Created by: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Created at: 2026-03-17T23:06:04Z Capability Inference: ✓ Chat Support: true (detected from model family 'gpt-4o') ✓ Completion Support: true (detected from model family 'gpt-4o') ✓ Function Calling: true (detected from model family 'gpt-4o') ✓ System Messages: true (detected from model family 'gpt-4o') ✓ Streaming: true (detected from model family 'gpt-4o') ✓ Sampling Parameters: true (detected from model family 'gpt-4o')SAVE THE ID
Testing the Queries
The next major step is to upload content into memory so it can be queried. To do this, we will first upload a PDF and store it in memory. After that, we will run some queries. Follow the directions below:
-
Begin by creating a memory. This guide uses the following sample PDF for testing:
Then run this command:
goodmem memory create \ --content-type "application/pdf" \ --file "PATH_TO_WHERE_YOU_DOWNLOADED_THE_PDF" \ --space-id YOUR_SPACE_ID_FROM_STEP_5It should output:
Memory created successfully! ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Space ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Content Type: application/pdf Page images: enabled Status: PENDING Created by: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Created at: 2026-03-17T23:18:33Z Metadata: filename: social_media_study.pdfSAVE THE ID (not the space ID since you already have that)
-
To run a query, you have two options: non-interactive mode and interactive mode.
Non-interactive mode:
goodmem memory retrieve \ "what are the top three negative effects of social media?" \ --space-id YOUR_SPACE_ID_FROM_STEP_5Interactive mode (easier to retrieve results):
goodmem memory retrieve \ --post-processor-interactive "what are the top three negative effects of social media?" \ --space-id YOUR_SPACE_ID_FROM_STEP_5
Optional Features
To enable optional features (Jupyter Notebook, SDK playground, etc.):
source .devcontainer/optional-feature-installer.shOptional Features Supported Languages & Tools:
- Python 3.10 - includes the GoodMem SDK and OpenAI integration
- Java 17
- .NET 9
- Go 1.22
- Node.js 20 with
pnpm - Visual Studio Code Extensions — language servers, formatters, linters, and productivity tools for all supported languages