getbased-agent-stack 0.5.1__tar.gz → 0.5.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. getbased_agent_stack-0.5.3/LICENSE +20 -0
  2. {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/PKG-INFO +39 -15
  3. getbased_agent_stack-0.5.1/src/getbased_agent_stack.egg-info/PKG-INFO → getbased_agent_stack-0.5.3/README.md +33 -28
  4. {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/pyproject.toml +6 -6
  5. {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack/__init__.py +1 -1
  6. {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack/cli.py +21 -3
  7. {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack/mcp_configs.py +4 -3
  8. getbased_agent_stack-0.5.1/README.md → getbased_agent_stack-0.5.3/src/getbased_agent_stack.egg-info/PKG-INFO +52 -9
  9. getbased_agent_stack-0.5.3/src/getbased_agent_stack.egg-info/requires.txt +11 -0
  10. {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/tests/test_cli.py +2 -0
  11. getbased_agent_stack-0.5.1/LICENSE +0 -22
  12. getbased_agent_stack-0.5.1/src/getbased_agent_stack.egg-info/requires.txt +0 -11
  13. {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/setup.cfg +0 -0
  14. {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack/env_file.py +0 -0
  15. {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack/systemd/getbased-dashboard.service +0 -0
  16. {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack/systemd/getbased-rag.service +0 -0
  17. {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack/units.py +0 -0
  18. {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack.egg-info/SOURCES.txt +0 -0
  19. {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack.egg-info/dependency_links.txt +0 -0
  20. {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack.egg-info/entry_points.txt +0 -0
  21. {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/src/getbased_agent_stack.egg-info/top_level.txt +0 -0
  22. {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/tests/test_env_file.py +0 -0
  23. {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/tests/test_integration.py +0 -0
  24. {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/tests/test_mcp_configs.py +0 -0
  25. {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/tests/test_systemd_units.py +0 -0
  26. {getbased_agent_stack-0.5.1 → getbased_agent_stack-0.5.3}/tests/test_units.py +0 -0
@@ -0,0 +1,20 @@
1
+ GNU AFFERO GENERAL PUBLIC LICENSE
2
+ Version 3, 19 November 2007
3
+
4
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
5
+ Everyone is permitted to copy and distribute verbatim copies
6
+ of this license document, but changing it is not allowed.
7
+
8
+ Preamble
9
+
10
+ The GNU Affero General Public License is a free, copyleft license for
11
+ software and other kinds of works, specifically designed to ensure
12
+ cooperation with the community in the case of network server software.
13
+
14
+ The licenses for most software and other practical works are designed
15
+ to take away your freedom to share and change the works. By contrast,
16
+ our General Public Licenses are intended to guarantee your freedom to
17
+ share and change all versions of a program--to make sure it remains free
18
+ software for all its users.
19
+
20
+ For the full license text, see <https://www.gnu.org/licenses/agpl-3.0.txt>
@@ -1,16 +1,16 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: getbased-agent-stack
3
- Version: 0.5.1
3
+ Version: 0.5.3
4
4
  Summary: One-command install of the full getbased agent stack — getbased-mcp + getbased-rag + getbased-dashboard
5
- License-Expression: GPL-3.0-only
5
+ License-Expression: AGPL-3.0-or-later
6
6
  Requires-Python: >=3.10
7
7
  Description-Content-Type: text/markdown
8
8
  License-File: LICENSE
9
- Requires-Dist: getbased-mcp>=0.2.3
10
- Requires-Dist: getbased-rag>=0.7.1
11
- Requires-Dist: getbased-dashboard>=0.6.1
9
+ Requires-Dist: getbased-mcp>=0.2.6
10
+ Requires-Dist: getbased-rag>=0.7.2
11
+ Requires-Dist: getbased-dashboard>=0.6.4
12
12
  Provides-Extra: full
13
- Requires-Dist: getbased-rag[full]>=0.7.1; extra == "full"
13
+ Requires-Dist: getbased-rag[full]>=0.7.2; extra == "full"
14
14
  Provides-Extra: test
15
15
  Requires-Dist: pytest>=8.0; extra == "test"
16
16
  Requires-Dist: httpx>=0.27; extra == "test"
@@ -25,21 +25,34 @@ Part of the [getbased-agents monorepo](https://github.com/elkimek/getbased-agent
25
25
 
26
26
  ## Install
27
27
 
28
+ Linux, one command:
29
+
30
+ ```bash
31
+ curl -sSL https://getbased.health/install.sh | bash
32
+ ```
33
+
34
+ Runs end-to-end: installs `getbased-agent-stack[full]` via whichever of `uv` or `pipx` is available, exposes sibling binaries, runs `getbased-stack init --yes`, and starts rag + dashboard as systemd user services. [Read the script first](https://github.com/elkimek/get-based-site/blob/main/install.sh) if you're cautious.
35
+
36
+ Manual — pipx:
37
+
28
38
  ```bash
29
39
  pipx install --include-deps "getbased-agent-stack[full]"
30
40
  ```
31
41
 
32
42
  The `--include-deps` flag is required — it exposes `getbased-mcp`, `lens`, and `getbased-dashboard` alongside `getbased-stack` on your PATH. Without it, pipx only links the stack's own entry point and the MCP/rag/dashboard binaries stay hidden inside the venv.
33
43
 
34
- `uv` users: install each package as its own tool instead, since `uv tool` has no `--include-deps` equivalent yet:
44
+ Manual uv (0.11+):
35
45
 
36
46
  ```bash
37
- uv tool install getbased-mcp
38
- uv tool install "getbased-rag[full]"
39
- uv tool install getbased-dashboard
40
- uv tool install "getbased-agent-stack[full]"
47
+ uv tool install \
48
+ --with-executables-from getbased-rag \
49
+ --with-executables-from getbased-dashboard \
50
+ --with-executables-from getbased-mcp \
51
+ "getbased-agent-stack[full]"
41
52
  ```
42
53
 
54
+ `--with-executables-from` is uv's equivalent of pipx's `--include-deps` — one tool venv, all four binaries on PATH.
55
+
43
56
  Pulls:
44
57
 
45
58
  - [`getbased-mcp`](https://github.com/elkimek/getbased-agents/tree/main/packages/mcp) — stdio MCP server that Claude Code / Hermes / OpenClaw spawn
@@ -52,17 +65,27 @@ Total install: ~500 MB (the ML deps dominate). Smaller installs available — `p
52
65
 
53
66
  ## Quickstart — one command
54
67
 
68
+ Interactive wizard:
69
+
55
70
  ```bash
56
71
  getbased-stack init
57
72
  ```
58
73
 
74
+ Non-interactive (for scripted installs and curl | bash; `install.sh` uses this):
75
+
76
+ ```bash
77
+ getbased-stack init --yes
78
+ ```
79
+
59
80
  The wizard (~30 seconds):
60
81
 
61
- 1. Prompts for your `GETBASED_TOKEN` (skip if you don't use sync)
82
+ 1. Prompts for your `GETBASED_TOKEN` and `GETBASED_AGENT_CONTEXT_KEY` (skip if you don't use Agent Access; `--yes` keeps current values and lets you set them later with `getbased-stack set ...`)
62
83
  2. Generates a rag API key if one doesn't exist
63
84
  3. Writes `~/.config/getbased/env` (mode 0600) — the shared config file
64
85
  4. Installs systemd user units for rag + dashboard, enables them, starts them
65
86
 
87
+ On non-systemd hosts (Docker, macOS, WSL1) step 4 writes the unit files but skips activation with a clear message instead of crashing — re-run on a systemd-enabled host or start `lens serve` + `getbased-dashboard serve` manually.
88
+
66
89
  Then paste one line into your MCP client:
67
90
 
68
91
  ```bash
@@ -99,7 +122,8 @@ sudo loginctl enable-linger $USER
99
122
 
100
123
  ```bash
101
124
  getbased-stack status # env file, unit state, linger
102
- getbased-stack set GETBASED_TOKEN=new # rotate the token
125
+ getbased-stack set GETBASED_TOKEN=new
126
+ getbased-stack set GETBASED_AGENT_CONTEXT_KEY=new
103
127
  getbased-stack install # re-apply unit files after package upgrade
104
128
  getbased-stack uninstall # stop + disable + remove units
105
129
  ```
@@ -126,7 +150,7 @@ sync GW getbased-rag ◀──────────────┘ g
126
150
 
127
151
  The MCP holds no persistent state; it's a thin translator between MCP tool calls and two HTTP backends:
128
152
 
129
- - `sync.getbased.health/api/context` — read-only lab summary pushed by your PWA session (via Agent Access token)
153
+ - `sync.getbased.health/api/context` — encrypted lab context pushed by your PWA session (authorized by Agent Access token, decrypted locally with Agent Context key)
130
154
  - `localhost:8322` (getbased-rag) — your local research library
131
155
 
132
156
  The dashboard is likewise stateless — it proxies rag for Knowledge operations, imports `getbased_mcp` to introspect env/config, and spawns the MCP binary on demand to verify it works.
@@ -154,4 +178,4 @@ The integration test (`tests/test_integration.py`) spins up `lens serve` in a su
154
178
 
155
179
  ## Licence
156
180
 
157
- GPL-3.0-only, matching the siblings.
181
+ AGPL-3.0-or-later, matching the siblings.
@@ -1,22 +1,3 @@
1
- Metadata-Version: 2.4
2
- Name: getbased-agent-stack
3
- Version: 0.5.1
4
- Summary: One-command install of the full getbased agent stack — getbased-mcp + getbased-rag + getbased-dashboard
5
- License-Expression: GPL-3.0-only
6
- Requires-Python: >=3.10
7
- Description-Content-Type: text/markdown
8
- License-File: LICENSE
9
- Requires-Dist: getbased-mcp>=0.2.3
10
- Requires-Dist: getbased-rag>=0.7.1
11
- Requires-Dist: getbased-dashboard>=0.6.1
12
- Provides-Extra: full
13
- Requires-Dist: getbased-rag[full]>=0.7.1; extra == "full"
14
- Provides-Extra: test
15
- Requires-Dist: pytest>=8.0; extra == "test"
16
- Requires-Dist: httpx>=0.27; extra == "test"
17
- Requires-Dist: pytest-timeout>=2.3; extra == "test"
18
- Dynamic: license-file
19
-
20
1
  # getbased-agent-stack
21
2
 
22
3
  Meta-package bundling the full [getbased](https://getbased.health) agent stack into one install: the MCP adapter, the RAG engine, the browser dashboard, an orchestration CLI (`init` / `install` / `mcp-config`), hardened systemd units for rag + dashboard, and paste-ready configs for Claude Desktop/Code, Cursor, Cline, and Hermes.
@@ -25,21 +6,34 @@ Part of the [getbased-agents monorepo](https://github.com/elkimek/getbased-agent
25
6
 
26
7
  ## Install
27
8
 
9
+ Linux, one command:
10
+
11
+ ```bash
12
+ curl -sSL https://getbased.health/install.sh | bash
13
+ ```
14
+
15
+ Runs end-to-end: installs `getbased-agent-stack[full]` via whichever of `uv` or `pipx` is available, exposes sibling binaries, runs `getbased-stack init --yes`, and starts rag + dashboard as systemd user services. [Read the script first](https://github.com/elkimek/get-based-site/blob/main/install.sh) if you're cautious.
16
+
17
+ Manual — pipx:
18
+
28
19
  ```bash
29
20
  pipx install --include-deps "getbased-agent-stack[full]"
30
21
  ```
31
22
 
32
23
  The `--include-deps` flag is required — it exposes `getbased-mcp`, `lens`, and `getbased-dashboard` alongside `getbased-stack` on your PATH. Without it, pipx only links the stack's own entry point and the MCP/rag/dashboard binaries stay hidden inside the venv.
33
24
 
34
- `uv` users: install each package as its own tool instead, since `uv tool` has no `--include-deps` equivalent yet:
25
+ Manual uv (0.11+):
35
26
 
36
27
  ```bash
37
- uv tool install getbased-mcp
38
- uv tool install "getbased-rag[full]"
39
- uv tool install getbased-dashboard
40
- uv tool install "getbased-agent-stack[full]"
28
+ uv tool install \
29
+ --with-executables-from getbased-rag \
30
+ --with-executables-from getbased-dashboard \
31
+ --with-executables-from getbased-mcp \
32
+ "getbased-agent-stack[full]"
41
33
  ```
42
34
 
35
+ `--with-executables-from` is uv's equivalent of pipx's `--include-deps` — one tool venv, all four binaries on PATH.
36
+
43
37
  Pulls:
44
38
 
45
39
  - [`getbased-mcp`](https://github.com/elkimek/getbased-agents/tree/main/packages/mcp) — stdio MCP server that Claude Code / Hermes / OpenClaw spawn
@@ -52,17 +46,27 @@ Total install: ~500 MB (the ML deps dominate). Smaller installs available — `p
52
46
 
53
47
  ## Quickstart — one command
54
48
 
49
+ Interactive wizard:
50
+
55
51
  ```bash
56
52
  getbased-stack init
57
53
  ```
58
54
 
55
+ Non-interactive (for scripted installs and curl | bash; `install.sh` uses this):
56
+
57
+ ```bash
58
+ getbased-stack init --yes
59
+ ```
60
+
59
61
  The wizard (~30 seconds):
60
62
 
61
- 1. Prompts for your `GETBASED_TOKEN` (skip if you don't use sync)
63
+ 1. Prompts for your `GETBASED_TOKEN` and `GETBASED_AGENT_CONTEXT_KEY` (skip if you don't use Agent Access; `--yes` keeps current values and lets you set them later with `getbased-stack set ...`)
62
64
  2. Generates a rag API key if one doesn't exist
63
65
  3. Writes `~/.config/getbased/env` (mode 0600) — the shared config file
64
66
  4. Installs systemd user units for rag + dashboard, enables them, starts them
65
67
 
68
+ On non-systemd hosts (Docker, macOS, WSL1) step 4 writes the unit files but skips activation with a clear message instead of crashing — re-run on a systemd-enabled host or start `lens serve` + `getbased-dashboard serve` manually.
69
+
66
70
  Then paste one line into your MCP client:
67
71
 
68
72
  ```bash
@@ -99,7 +103,8 @@ sudo loginctl enable-linger $USER
99
103
 
100
104
  ```bash
101
105
  getbased-stack status # env file, unit state, linger
102
- getbased-stack set GETBASED_TOKEN=new # rotate the token
106
+ getbased-stack set GETBASED_TOKEN=new
107
+ getbased-stack set GETBASED_AGENT_CONTEXT_KEY=new
103
108
  getbased-stack install # re-apply unit files after package upgrade
104
109
  getbased-stack uninstall # stop + disable + remove units
105
110
  ```
@@ -126,7 +131,7 @@ sync GW getbased-rag ◀──────────────┘ g
126
131
 
127
132
  The MCP holds no persistent state; it's a thin translator between MCP tool calls and two HTTP backends:
128
133
 
129
- - `sync.getbased.health/api/context` — read-only lab summary pushed by your PWA session (via Agent Access token)
134
+ - `sync.getbased.health/api/context` — encrypted lab context pushed by your PWA session (authorized by Agent Access token, decrypted locally with Agent Context key)
130
135
  - `localhost:8322` (getbased-rag) — your local research library
131
136
 
132
137
  The dashboard is likewise stateless — it proxies rag for Knowledge operations, imports `getbased_mcp` to introspect env/config, and spawns the MCP binary on demand to verify it works.
@@ -154,4 +159,4 @@ The integration test (`tests/test_integration.py`) spins up `lens serve` in a su
154
159
 
155
160
  ## Licence
156
161
 
157
- GPL-3.0-only, matching the siblings.
162
+ AGPL-3.0-or-later, matching the siblings.
@@ -4,23 +4,23 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "getbased-agent-stack"
7
- version = "0.5.1"
7
+ version = "0.5.3"
8
8
  description = "One-command install of the full getbased agent stack — getbased-mcp + getbased-rag + getbased-dashboard"
9
9
  readme = "README.md"
10
- license = "GPL-3.0-only"
10
+ license = "AGPL-3.0-or-later"
11
11
  requires-python = ">=3.10"
12
12
  # Pulls every sibling package. Bump this meta when a sibling protocol
13
13
  # bump requires coordinated release.
14
14
  dependencies = [
15
- "getbased-mcp>=0.2.3",
16
- "getbased-rag>=0.7.1",
17
- "getbased-dashboard>=0.6.1",
15
+ "getbased-mcp>=0.2.6",
16
+ "getbased-rag>=0.7.2",
17
+ "getbased-dashboard>=0.6.4",
18
18
  ]
19
19
 
20
20
  [project.optional-dependencies]
21
21
  # `full` includes PDF/DOCX parsers and ONNX acceleration (pre-exported
22
22
  # weights — no PyTorch/transformers/optimum dance).
23
- full = ["getbased-rag[full]>=0.7.1"]
23
+ full = ["getbased-rag[full]>=0.7.2"]
24
24
  # For contributors running the integration test harness.
25
25
  test = ["pytest>=8.0", "httpx>=0.27", "pytest-timeout>=2.3"]
26
26
 
@@ -5,4 +5,4 @@ plus a small CLI that proxies to the real binaries. Everything
5
5
  interesting lives in the sibling repos.
6
6
  """
7
7
 
8
- __version__ = "0.4.1"
8
+ __version__ = "0.5.3"
@@ -100,20 +100,28 @@ def cmd_init(args: argparse.Namespace) -> int:
100
100
  )
101
101
  print()
102
102
 
103
- # 1. token (optional)
103
+ # 1. Agent Access secrets (optional)
104
104
  existing = env_file.read_env_file()
105
105
  current_token = existing.get("GETBASED_TOKEN", "")
106
+ current_context_key = existing.get("GETBASED_AGENT_CONTEXT_KEY", "")
106
107
  masked = "****" + current_token[-4:] if current_token else "(unset)"
107
- print(f"[1/4] getbased sync token (current: {masked})")
108
+ key_masked = "****" + current_context_key[-4:] if current_context_key else "(unset)"
109
+ print(f"[1/4] Agent Access token + context key (token: {masked}, key: {key_masked})")
108
110
  if non_interactive:
109
111
  token = current_token
110
- print(" keeping current value (set with `getbased-stack set GETBASED_TOKEN=…` later).")
112
+ context_key = current_context_key
113
+ print(" keeping current values (set with `getbased-stack set GETBASED_TOKEN=…` and `getbased-stack set GETBASED_AGENT_CONTEXT_KEY=…` later).")
111
114
  else:
112
115
  token = _prompt(
113
116
  "Paste GETBASED_TOKEN (press Enter to keep current / skip)",
114
117
  default=current_token,
115
118
  secret=True,
116
119
  )
120
+ context_key = _prompt(
121
+ "Paste GETBASED_AGENT_CONTEXT_KEY (press Enter to keep current / skip)",
122
+ default=current_context_key,
123
+ secret=True,
124
+ )
117
125
 
118
126
  # 2. API key
119
127
  key_path = Path(existing.get("LENS_API_KEY_FILE", str(_default_api_key_file())))
@@ -131,6 +139,8 @@ def cmd_init(args: argparse.Namespace) -> int:
131
139
  merged["GETBASED_STACK_MANAGED"] = "1"
132
140
  if token:
133
141
  merged["GETBASED_TOKEN"] = token
142
+ if context_key:
143
+ merged["GETBASED_AGENT_CONTEXT_KEY"] = context_key
134
144
  merged["LENS_API_KEY_FILE"] = str(key_path)
135
145
  merged.setdefault("LENS_URL", "http://127.0.0.1:8322")
136
146
  path = env_file.write_env_file(merged)
@@ -153,6 +163,14 @@ def cmd_init(args: argparse.Namespace) -> int:
153
163
  _print_linger_hint(strict=False)
154
164
 
155
165
  # 6. MCP config pointers
166
+ print("\nNext steps for Agent Access:")
167
+ print(" 1. In getbased, enable Cross-device Sync and Agent Access.")
168
+ print(" 2. Copy both values from Settings → Agent Access:")
169
+ print(" GETBASED_TOKEN and GETBASED_AGENT_CONTEXT_KEY.")
170
+ print(" 3. Save them here with:")
171
+ print(" getbased-stack set GETBASED_TOKEN=...")
172
+ print(" getbased-stack set GETBASED_AGENT_CONTEXT_KEY=...")
173
+
156
174
  print("\nConfigure your MCP client(s):")
157
175
  for client in mcp_configs.SUPPORTED_CLIENTS:
158
176
  print(f" getbased-stack mcp-config {client}")
@@ -133,9 +133,10 @@ def emit_hermes(resolver: Callable[[str], "str | None"] = shutil.which) -> str:
133
133
  lines = [
134
134
  "# Hermes Agent MCP configuration snippet for ~/.hermes/config.yaml",
135
135
  "# See https://github.com/hermes-agent/hermes-agent for the full config schema.",
136
- "# The getbased stack's shared env file carries GETBASED_TOKEN + rag URL +",
137
- "# api key path; only the opt-in flag belongs in Hermes's config.",
138
- "# (If your Hermes config already sets GETBASED_TOKEN / LENS_* explicitly,",
136
+ "# The getbased stack's shared env file carries GETBASED_TOKEN,",
137
+ "# GETBASED_AGENT_CONTEXT_KEY, rag URL, and api key path; only the",
138
+ "# opt-in flag belongs in Hermes's config.",
139
+ "# (If your Hermes config already sets GETBASED_TOKEN / GETBASED_AGENT_CONTEXT_KEY / LENS_* explicitly,",
139
140
  "# drop the env block entirely — the Python loader honors existing env.)",
140
141
  ]
141
142
  if warning:
@@ -1,3 +1,22 @@
1
+ Metadata-Version: 2.4
2
+ Name: getbased-agent-stack
3
+ Version: 0.5.3
4
+ Summary: One-command install of the full getbased agent stack — getbased-mcp + getbased-rag + getbased-dashboard
5
+ License-Expression: AGPL-3.0-or-later
6
+ Requires-Python: >=3.10
7
+ Description-Content-Type: text/markdown
8
+ License-File: LICENSE
9
+ Requires-Dist: getbased-mcp>=0.2.6
10
+ Requires-Dist: getbased-rag>=0.7.2
11
+ Requires-Dist: getbased-dashboard>=0.6.4
12
+ Provides-Extra: full
13
+ Requires-Dist: getbased-rag[full]>=0.7.2; extra == "full"
14
+ Provides-Extra: test
15
+ Requires-Dist: pytest>=8.0; extra == "test"
16
+ Requires-Dist: httpx>=0.27; extra == "test"
17
+ Requires-Dist: pytest-timeout>=2.3; extra == "test"
18
+ Dynamic: license-file
19
+
1
20
  # getbased-agent-stack
2
21
 
3
22
  Meta-package bundling the full [getbased](https://getbased.health) agent stack into one install: the MCP adapter, the RAG engine, the browser dashboard, an orchestration CLI (`init` / `install` / `mcp-config`), hardened systemd units for rag + dashboard, and paste-ready configs for Claude Desktop/Code, Cursor, Cline, and Hermes.
@@ -6,21 +25,34 @@ Part of the [getbased-agents monorepo](https://github.com/elkimek/getbased-agent
6
25
 
7
26
  ## Install
8
27
 
28
+ Linux, one command:
29
+
30
+ ```bash
31
+ curl -sSL https://getbased.health/install.sh | bash
32
+ ```
33
+
34
+ Runs end-to-end: installs `getbased-agent-stack[full]` via whichever of `uv` or `pipx` is available, exposes sibling binaries, runs `getbased-stack init --yes`, and starts rag + dashboard as systemd user services. [Read the script first](https://github.com/elkimek/get-based-site/blob/main/install.sh) if you're cautious.
35
+
36
+ Manual — pipx:
37
+
9
38
  ```bash
10
39
  pipx install --include-deps "getbased-agent-stack[full]"
11
40
  ```
12
41
 
13
42
  The `--include-deps` flag is required — it exposes `getbased-mcp`, `lens`, and `getbased-dashboard` alongside `getbased-stack` on your PATH. Without it, pipx only links the stack's own entry point and the MCP/rag/dashboard binaries stay hidden inside the venv.
14
43
 
15
- `uv` users: install each package as its own tool instead, since `uv tool` has no `--include-deps` equivalent yet:
44
+ Manual uv (0.11+):
16
45
 
17
46
  ```bash
18
- uv tool install getbased-mcp
19
- uv tool install "getbased-rag[full]"
20
- uv tool install getbased-dashboard
21
- uv tool install "getbased-agent-stack[full]"
47
+ uv tool install \
48
+ --with-executables-from getbased-rag \
49
+ --with-executables-from getbased-dashboard \
50
+ --with-executables-from getbased-mcp \
51
+ "getbased-agent-stack[full]"
22
52
  ```
23
53
 
54
+ `--with-executables-from` is uv's equivalent of pipx's `--include-deps` — one tool venv, all four binaries on PATH.
55
+
24
56
  Pulls:
25
57
 
26
58
  - [`getbased-mcp`](https://github.com/elkimek/getbased-agents/tree/main/packages/mcp) — stdio MCP server that Claude Code / Hermes / OpenClaw spawn
@@ -33,17 +65,27 @@ Total install: ~500 MB (the ML deps dominate). Smaller installs available — `p
33
65
 
34
66
  ## Quickstart — one command
35
67
 
68
+ Interactive wizard:
69
+
36
70
  ```bash
37
71
  getbased-stack init
38
72
  ```
39
73
 
74
+ Non-interactive (for scripted installs and curl | bash; `install.sh` uses this):
75
+
76
+ ```bash
77
+ getbased-stack init --yes
78
+ ```
79
+
40
80
  The wizard (~30 seconds):
41
81
 
42
- 1. Prompts for your `GETBASED_TOKEN` (skip if you don't use sync)
82
+ 1. Prompts for your `GETBASED_TOKEN` and `GETBASED_AGENT_CONTEXT_KEY` (skip if you don't use Agent Access; `--yes` keeps current values and lets you set them later with `getbased-stack set ...`)
43
83
  2. Generates a rag API key if one doesn't exist
44
84
  3. Writes `~/.config/getbased/env` (mode 0600) — the shared config file
45
85
  4. Installs systemd user units for rag + dashboard, enables them, starts them
46
86
 
87
+ On non-systemd hosts (Docker, macOS, WSL1) step 4 writes the unit files but skips activation with a clear message instead of crashing — re-run on a systemd-enabled host or start `lens serve` + `getbased-dashboard serve` manually.
88
+
47
89
  Then paste one line into your MCP client:
48
90
 
49
91
  ```bash
@@ -80,7 +122,8 @@ sudo loginctl enable-linger $USER
80
122
 
81
123
  ```bash
82
124
  getbased-stack status # env file, unit state, linger
83
- getbased-stack set GETBASED_TOKEN=new # rotate the token
125
+ getbased-stack set GETBASED_TOKEN=new
126
+ getbased-stack set GETBASED_AGENT_CONTEXT_KEY=new
84
127
  getbased-stack install # re-apply unit files after package upgrade
85
128
  getbased-stack uninstall # stop + disable + remove units
86
129
  ```
@@ -107,7 +150,7 @@ sync GW getbased-rag ◀──────────────┘ g
107
150
 
108
151
  The MCP holds no persistent state; it's a thin translator between MCP tool calls and two HTTP backends:
109
152
 
110
- - `sync.getbased.health/api/context` — read-only lab summary pushed by your PWA session (via Agent Access token)
153
+ - `sync.getbased.health/api/context` — encrypted lab context pushed by your PWA session (authorized by Agent Access token, decrypted locally with Agent Context key)
111
154
  - `localhost:8322` (getbased-rag) — your local research library
112
155
 
113
156
  The dashboard is likewise stateless — it proxies rag for Knowledge operations, imports `getbased_mcp` to introspect env/config, and spawns the MCP binary on demand to verify it works.
@@ -135,4 +178,4 @@ The integration test (`tests/test_integration.py`) spins up `lens serve` in a su
135
178
 
136
179
  ## Licence
137
180
 
138
- GPL-3.0-only, matching the siblings.
181
+ AGPL-3.0-or-later, matching the siblings.
@@ -0,0 +1,11 @@
1
+ getbased-mcp>=0.2.6
2
+ getbased-rag>=0.7.2
3
+ getbased-dashboard>=0.6.4
4
+
5
+ [full]
6
+ getbased-rag[full]>=0.7.2
7
+
8
+ [test]
9
+ pytest>=8.0
10
+ httpx>=0.27
11
+ pytest-timeout>=2.3
@@ -313,6 +313,8 @@ def test_init_yes_flag_skips_all_prompts(stack_home, fake_shell, monkeypatch):
313
313
  assert rc == 0
314
314
  # Banner reflects the mode so the user sees what happened
315
315
  assert "non-interactive" in out.lower()
316
+ assert "GETBASED_TOKEN and GETBASED_AGENT_CONTEXT_KEY" in out
317
+ assert "getbased-stack set GETBASED_AGENT_CONTEXT_KEY" in out
316
318
  # Env file + units still land
317
319
  assert env_file.env_file_path().exists()
318
320
  assert (stack_home / "config" / "systemd" / "user" / "getbased-rag.service").exists()
@@ -1,22 +0,0 @@
1
- GNU GENERAL PUBLIC LICENSE
2
- Version 3, 29 June 2007
3
-
4
- Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
5
- Everyone is permitted to copy and distribute verbatim copies
6
- of this license document, but changing it is not allowed.
7
-
8
- Preamble
9
-
10
- The GNU General Public License is a free, copyleft license for
11
- software and other kinds of works.
12
-
13
- The licenses for most software and other practical works are designed
14
- to take away your freedom to share and change the works. By contrast,
15
- the GNU General Public License is intended to guarantee your freedom to
16
- share and change all versions of a program--to make sure it remains free
17
- software for all its users. We, the Free Software Foundation, use the
18
- GNU General Public License for most of our software; it applies also to
19
- any other work released this way by its authors. You can apply it to
20
- your programs, too.
21
-
22
- For the full license text, see <https://www.gnu.org/licenses/gpl-3.0.txt>
@@ -1,11 +0,0 @@
1
- getbased-mcp>=0.2.3
2
- getbased-rag>=0.7.1
3
- getbased-dashboard>=0.6.1
4
-
5
- [full]
6
- getbased-rag[full]>=0.7.1
7
-
8
- [test]
9
- pytest>=8.0
10
- httpx>=0.27
11
- pytest-timeout>=2.3