ebbtide 0.2.0__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.
@@ -0,0 +1,34 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ *.so
6
+ *.egg-info/
7
+ build/
8
+ *.egg
9
+ .venv/
10
+ venv/
11
+ env/
12
+
13
+ # Environment
14
+ .env
15
+
16
+ # Memory databases (EBBTIDE_DB)
17
+ *.db
18
+ *.db-*
19
+
20
+ # IDE
21
+ .vscode/
22
+ .idea/
23
+ *.swp
24
+ *.swo
25
+
26
+ # OS
27
+ .DS_Store
28
+ Thumbs.db
29
+
30
+ # Local Claude Code settings
31
+ .claude/settings.local.json
32
+
33
+ # Benchmark datasets and results (bench/): downloaded, never committed
34
+ /data/
ebbtide-0.2.0/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Nikhil Pawar
4
+ Copyright (c) 2026 Dory.md contributors
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
ebbtide-0.2.0/PKG-INFO ADDED
@@ -0,0 +1,151 @@
1
+ Metadata-Version: 2.5
2
+ Name: ebbtide
3
+ Version: 0.2.0
4
+ Summary: Long-term memory for AI agents that forgets on purpose: an MCP server on a forgetting curve.
5
+ Project-URL: Homepage, https://aimsotrash-ebbtide.vercel.app
6
+ Project-URL: Repository, https://github.com/aimsotrash/Ebbtide
7
+ Author: Nikhil Pawar
8
+ License-Expression: MIT
9
+ License-File: LICENSE
10
+ Requires-Python: >=3.12
11
+ Requires-Dist: mcp==2.3.0
12
+ Requires-Dist: numpy==2.4.6
13
+ Requires-Dist: sentence-transformers==6.1.0
14
+ Requires-Dist: torch==2.14.1
15
+ Requires-Dist: transformers==5.19.0
16
+ Description-Content-Type: text/markdown
17
+
18
+ # Ebbtide
19
+
20
+ [![CI](https://github.com/aimsotrash/Ebbtide/actions/workflows/ci.yml/badge.svg)](https://github.com/aimsotrash/Ebbtide/actions/workflows/ci.yml)
21
+ [![MCP Badge](https://lobehub.com/badge/mcp/aimsotrash-ebbtide)](https://lobehub.com/mcp/aimsotrash-ebbtide)
22
+
23
+ **Long-term memory for AI agents that forgets on purpose.**
24
+
25
+ Ebbtide was called Engram until October 31, 2026; I renamed it because several other memory
26
+ servers for AI agents already use that name. It began as a notes app, which I retired in
27
+ October 2026; its last version is the git tag
28
+ [`notes-app`](https://github.com/aimsotrash/Ebbtide/tree/notes-app).
29
+
30
+ **Live:** [aimsotrash-ebbtide.vercel.app](https://aimsotrash-ebbtide.vercel.app)
31
+
32
+ ## Install
33
+
34
+ With [uv](https://docs.astral.sh/uv/), on Linux or an Apple silicon Mac (macOS 14 or later).
35
+ For Claude Code:
36
+
37
+ ```bash
38
+ uv tool install --torch-backend cpu ebbtide
39
+ claude mcp add ebbtide -s user -- ebbtide
40
+ ```
41
+
42
+ For any other MCP client, add this to its configuration:
43
+
44
+ ```json
45
+ {
46
+ "mcpServers": {
47
+ "ebbtide": {
48
+ "command": "uvx",
49
+ "args": ["--torch-backend", "cpu", "ebbtide"]
50
+ }
51
+ }
52
+ }
53
+ ```
54
+
55
+ `--torch-backend cpu` installs PyTorch's CPU build (about 1.2 GB) instead of several GB of
56
+ CUDA libraries; Ebbtide doesn't use a GPU. The first `remember` or `recall` downloads a 90 MB
57
+ embedding model, and after that Ebbtide runs offline. Settings and
58
+ the memory panel are in [`ebbtide/README.md`](ebbtide/README.md).
59
+
60
+ ## Memory for AI agents
61
+
62
+ [`ebbtide/`](ebbtide/README.md) is an MCP server that gives an agent such as Claude
63
+ Code long-term memory across sessions, through four tools: `remember`, `recall`, `forget`
64
+ and `memory_stats`. Two resources, `ebbtide://memories` and `ebbtide://memories/{id}`, let a
65
+ client attach memories as context without strengthening them, and two prompts,
66
+ `recall_first` and `save_session`, start the common workflows. Each memory fades along a forgetting curve unless it is recalled, and
67
+ every recall makes it last longer. When the store reaches its budget, 1000 memories by
68
+ default, the weakest one goes first. The memories live in a SQLite file on your machine,
69
+ and only what a recall returns enters the agent's context.
70
+
71
+ A local panel lists the memories and how strong each one is, with a slider that looks
72
+ ahead to show which ones are fading.
73
+
74
+ ### Should an agent forget?
75
+
76
+ I replayed six memory policies on two public long-conversation benchmarks and measured
77
+ whether the memory still finds the evidence each question needs.
78
+ [LongMemEval](bench/RESULTS.md) has 500 questions with histories of about 490 turns;
79
+ its 30 abstention questions have no evidence to find, so 470 are scored. Settings were picked on
80
+ 92 dev questions and fixed before the other 378 were first scored.
81
+ [LoCoMo](bench/RESULTS-locomo.md) has 10 conversations that span 5 to 10 months, and
82
+ nothing was tuned on it.
83
+
84
+ - **Keeping everything wins when you can afford it.** With room for half the history, the
85
+ best forgetting policy finds all the evidence in its top 10 results for 37% of LongMemEval
86
+ questions and 27% of LoCoMo questions. Keeping everything does for 58.5% and 44.6%.
87
+ - **No forgetting rule wins everywhere.** On LongMemEval, keeping what gets used beats
88
+ keeping the newest. On LoCoMo, keeping the newest does best at the turn level.
89
+ - **Strengthening on recall beats plain LRU, modestly.** ebbtide-count, the server's
90
+ default, keeps up to 4 points more of the evidence than LRU on LongMemEval, and ranks every
91
+ answer session in its top 10 up to 14 points more often; I chose these comparisons after
92
+ seeing the results. On LoCoMo, where I chose the comparison before running it, both gains
93
+ held but were smaller (up to 1.6 and 3.4 points), and it found all the evidence in its top
94
+ 10 about as often as LRU.
95
+ - **Strengthening too hard backfires on facts that change.** FSRS-style spacing made old
96
+ facts stick: on LongMemEval's knowledge-update questions it found the newest fact 12 to
97
+ 17 points less often than LRU.
98
+ - **Fading didn't help as a ranking signal.** Tuning picked similarity alone almost
99
+ everywhere, so the gains come from what is kept, not from how it is ranked.
100
+
101
+ MemoryBank (Zhong et al., 2023) already applied an Ebbinghaus curve to LLM memory. What is
102
+ new here is the measured comparison with simple baselines, losses included.
103
+
104
+ ## Stack
105
+
106
+ Python · MCP · sentence-transformers · NumPy · SQLite · React · TypeScript · Vite ·
107
+ Tailwind CSS · Motion
108
+
109
+ ## Run it locally
110
+
111
+ To run the MCP server, follow the setup in [`ebbtide/README.md`](ebbtide/README.md).
112
+
113
+ To reproduce the benchmarks, from the repo root:
114
+
115
+ ```bash
116
+ uv venv -p 3.12 .venv && uv pip install --python .venv -e . # CPU-only PyTorch, per pyproject.toml
117
+ .venv/bin/python -m bench.longmemeval embed # downloads the data and embeds it once, ~45 min on a laptop CPU
118
+ .venv/bin/python -m bench.longmemeval run # writes bench/RESULTS.md
119
+ .venv/bin/python -m bench.locomo # writes bench/RESULTS-locomo.md
120
+ ```
121
+
122
+ The landing page for the MCP server lives in `site/` (Vite, React and Tailwind):
123
+
124
+ ```bash
125
+ cd site && npm install && npm run dev # http://localhost:5173
126
+ ```
127
+
128
+ The Python tests (20: 13 intelligence, 3 MCP server, 4 benchmark) stub the embedding model,
129
+ so they need only `requirements-test.txt`, which adds pytest; any venv works, such as the one
130
+ above or a fresh `uv venv -p 3.12 .venv`:
131
+
132
+ ```bash
133
+ uv pip install --python .venv -r requirements-test.txt
134
+ .venv/bin/python -m pytest intelligence/tests ebbtide/tests bench
135
+ ```
136
+
137
+ ## References
138
+
139
+ - Di Wu et al. *LongMemEval: Benchmarking Chat Assistants on Long-Term Interactive Memory.*
140
+ 2024. [arXiv:2410.10813](https://arxiv.org/abs/2410.10813)
141
+ - Adyasha Maharana et al. *Evaluating Very Long-Term Conversational Memory of LLM Agents.*
142
+ ACL 2024. [arXiv:2402.17753](https://arxiv.org/abs/2402.17753). The LoCoMo data is
143
+ CC BY-NC 4.0; it is downloaded, never committed, and used here for non-commercial research.
144
+ - Wanjun Zhong et al. *MemoryBank: Enhancing Large Language Models with Long-Term Memory.*
145
+ 2023. [arXiv:2305.10250](https://arxiv.org/abs/2305.10250)
146
+ - FSRS, the spaced-repetition scheduler whose default weights the spaced rule uses:
147
+ [open-spaced-repetition](https://github.com/open-spaced-repetition)
148
+
149
+ ## License
150
+
151
+ [MIT](LICENSE).
@@ -0,0 +1,134 @@
1
+ # Ebbtide
2
+
3
+ [![CI](https://github.com/aimsotrash/Ebbtide/actions/workflows/ci.yml/badge.svg)](https://github.com/aimsotrash/Ebbtide/actions/workflows/ci.yml)
4
+ [![MCP Badge](https://lobehub.com/badge/mcp/aimsotrash-ebbtide)](https://lobehub.com/mcp/aimsotrash-ebbtide)
5
+
6
+ **Long-term memory for AI agents that forgets on purpose.**
7
+
8
+ Ebbtide was called Engram until October 31, 2026; I renamed it because several other memory
9
+ servers for AI agents already use that name. It began as a notes app, which I retired in
10
+ October 2026; its last version is the git tag
11
+ [`notes-app`](https://github.com/aimsotrash/Ebbtide/tree/notes-app).
12
+
13
+ **Live:** [aimsotrash-ebbtide.vercel.app](https://aimsotrash-ebbtide.vercel.app)
14
+
15
+ ## Install
16
+
17
+ With [uv](https://docs.astral.sh/uv/), on Linux or an Apple silicon Mac (macOS 14 or later).
18
+ For Claude Code:
19
+
20
+ ```bash
21
+ uv tool install --torch-backend cpu ebbtide
22
+ claude mcp add ebbtide -s user -- ebbtide
23
+ ```
24
+
25
+ For any other MCP client, add this to its configuration:
26
+
27
+ ```json
28
+ {
29
+ "mcpServers": {
30
+ "ebbtide": {
31
+ "command": "uvx",
32
+ "args": ["--torch-backend", "cpu", "ebbtide"]
33
+ }
34
+ }
35
+ }
36
+ ```
37
+
38
+ `--torch-backend cpu` installs PyTorch's CPU build (about 1.2 GB) instead of several GB of
39
+ CUDA libraries; Ebbtide doesn't use a GPU. The first `remember` or `recall` downloads a 90 MB
40
+ embedding model, and after that Ebbtide runs offline. Settings and
41
+ the memory panel are in [`ebbtide/README.md`](ebbtide/README.md).
42
+
43
+ ## Memory for AI agents
44
+
45
+ [`ebbtide/`](ebbtide/README.md) is an MCP server that gives an agent such as Claude
46
+ Code long-term memory across sessions, through four tools: `remember`, `recall`, `forget`
47
+ and `memory_stats`. Two resources, `ebbtide://memories` and `ebbtide://memories/{id}`, let a
48
+ client attach memories as context without strengthening them, and two prompts,
49
+ `recall_first` and `save_session`, start the common workflows. Each memory fades along a forgetting curve unless it is recalled, and
50
+ every recall makes it last longer. When the store reaches its budget, 1000 memories by
51
+ default, the weakest one goes first. The memories live in a SQLite file on your machine,
52
+ and only what a recall returns enters the agent's context.
53
+
54
+ A local panel lists the memories and how strong each one is, with a slider that looks
55
+ ahead to show which ones are fading.
56
+
57
+ ### Should an agent forget?
58
+
59
+ I replayed six memory policies on two public long-conversation benchmarks and measured
60
+ whether the memory still finds the evidence each question needs.
61
+ [LongMemEval](bench/RESULTS.md) has 500 questions with histories of about 490 turns;
62
+ its 30 abstention questions have no evidence to find, so 470 are scored. Settings were picked on
63
+ 92 dev questions and fixed before the other 378 were first scored.
64
+ [LoCoMo](bench/RESULTS-locomo.md) has 10 conversations that span 5 to 10 months, and
65
+ nothing was tuned on it.
66
+
67
+ - **Keeping everything wins when you can afford it.** With room for half the history, the
68
+ best forgetting policy finds all the evidence in its top 10 results for 37% of LongMemEval
69
+ questions and 27% of LoCoMo questions. Keeping everything does for 58.5% and 44.6%.
70
+ - **No forgetting rule wins everywhere.** On LongMemEval, keeping what gets used beats
71
+ keeping the newest. On LoCoMo, keeping the newest does best at the turn level.
72
+ - **Strengthening on recall beats plain LRU, modestly.** ebbtide-count, the server's
73
+ default, keeps up to 4 points more of the evidence than LRU on LongMemEval, and ranks every
74
+ answer session in its top 10 up to 14 points more often; I chose these comparisons after
75
+ seeing the results. On LoCoMo, where I chose the comparison before running it, both gains
76
+ held but were smaller (up to 1.6 and 3.4 points), and it found all the evidence in its top
77
+ 10 about as often as LRU.
78
+ - **Strengthening too hard backfires on facts that change.** FSRS-style spacing made old
79
+ facts stick: on LongMemEval's knowledge-update questions it found the newest fact 12 to
80
+ 17 points less often than LRU.
81
+ - **Fading didn't help as a ranking signal.** Tuning picked similarity alone almost
82
+ everywhere, so the gains come from what is kept, not from how it is ranked.
83
+
84
+ MemoryBank (Zhong et al., 2023) already applied an Ebbinghaus curve to LLM memory. What is
85
+ new here is the measured comparison with simple baselines, losses included.
86
+
87
+ ## Stack
88
+
89
+ Python · MCP · sentence-transformers · NumPy · SQLite · React · TypeScript · Vite ·
90
+ Tailwind CSS · Motion
91
+
92
+ ## Run it locally
93
+
94
+ To run the MCP server, follow the setup in [`ebbtide/README.md`](ebbtide/README.md).
95
+
96
+ To reproduce the benchmarks, from the repo root:
97
+
98
+ ```bash
99
+ uv venv -p 3.12 .venv && uv pip install --python .venv -e . # CPU-only PyTorch, per pyproject.toml
100
+ .venv/bin/python -m bench.longmemeval embed # downloads the data and embeds it once, ~45 min on a laptop CPU
101
+ .venv/bin/python -m bench.longmemeval run # writes bench/RESULTS.md
102
+ .venv/bin/python -m bench.locomo # writes bench/RESULTS-locomo.md
103
+ ```
104
+
105
+ The landing page for the MCP server lives in `site/` (Vite, React and Tailwind):
106
+
107
+ ```bash
108
+ cd site && npm install && npm run dev # http://localhost:5173
109
+ ```
110
+
111
+ The Python tests (20: 13 intelligence, 3 MCP server, 4 benchmark) stub the embedding model,
112
+ so they need only `requirements-test.txt`, which adds pytest; any venv works, such as the one
113
+ above or a fresh `uv venv -p 3.12 .venv`:
114
+
115
+ ```bash
116
+ uv pip install --python .venv -r requirements-test.txt
117
+ .venv/bin/python -m pytest intelligence/tests ebbtide/tests bench
118
+ ```
119
+
120
+ ## References
121
+
122
+ - Di Wu et al. *LongMemEval: Benchmarking Chat Assistants on Long-Term Interactive Memory.*
123
+ 2024. [arXiv:2410.10813](https://arxiv.org/abs/2410.10813)
124
+ - Adyasha Maharana et al. *Evaluating Very Long-Term Conversational Memory of LLM Agents.*
125
+ ACL 2024. [arXiv:2402.17753](https://arxiv.org/abs/2402.17753). The LoCoMo data is
126
+ CC BY-NC 4.0; it is downloaded, never committed, and used here for non-commercial research.
127
+ - Wanjun Zhong et al. *MemoryBank: Enhancing Large Language Models with Long-Term Memory.*
128
+ 2023. [arXiv:2305.10250](https://arxiv.org/abs/2305.10250)
129
+ - FSRS, the spaced-repetition scheduler whose default weights the spaced rule uses:
130
+ [open-spaced-repetition](https://github.com/open-spaced-repetition)
131
+
132
+ ## License
133
+
134
+ [MIT](LICENSE).
@@ -0,0 +1,111 @@
1
+ # Ebbtide MCP server
2
+
3
+ Long-term memory for AI agents, served over the Model Context Protocol (stdio). Each
4
+ memory fades along a forgetting curve unless it is recalled, and each recall makes it
5
+ last longer. When the store is full, the weakest memory goes. The memory model and its
6
+ policies live in [`intelligence/memory/agent.py`](../intelligence/memory/agent.py); this
7
+ package adds the tools and SQLite persistence.
8
+
9
+ ## Tools
10
+
11
+ | Tool | What it does |
12
+ |---|---|
13
+ | `remember(text, tags?)` | Stores one memory. Returns its id and the ids of any memories the budget pushed out. |
14
+ | `recall(query, k=5)` | Returns the `k` most relevant memories (at most 20), each with its strength just before this recall. Recalling strengthens a memory. |
15
+ | `forget(id)` | Deletes a memory permanently. |
16
+ | `memory_stats()` | Reports the count, budget, policy, mean strength, and how many memories have ever been stored. |
17
+
18
+ ## Resources
19
+
20
+ Reading a resource is not recalling: neither one strengthens a memory.
21
+
22
+ | Resource | What it holds |
23
+ |---|---|
24
+ | `ebbtide://memories` | Every kept memory, strongest first, with its strength now. |
25
+ | `ebbtide://memories/{id}` | One memory by its id. |
26
+
27
+ ## Prompts
28
+
29
+ | Prompt | What it asks the agent to do |
30
+ |---|---|
31
+ | `recall_first(question)` | Recall what's relevant before answering the question. |
32
+ | `save_session()` | Store each fact, preference, decision or lesson from the conversation worth keeping. |
33
+
34
+ ## Setup
35
+
36
+ With [uv](https://docs.astral.sh/uv/), on Linux or an Apple silicon Mac (macOS 14 or later):
37
+
38
+ ```bash
39
+ uv tool install --torch-backend cpu ebbtide
40
+ claude mcp add ebbtide -s user -- ebbtide
41
+ ```
42
+
43
+ The first command installs two commands, `ebbtide` and `ebbtide-panel`, from PyPI in an
44
+ isolated environment. `--torch-backend cpu` picks PyTorch's CPU build (about 1.2 GB on disk)
45
+ over several GB of CUDA libraries; Ebbtide doesn't use a GPU. `-s user` makes Ebbtide available in
46
+ every project; without it, Claude Code would use it only in the folder you ran it from. To
47
+ update later, run `uv tool upgrade ebbtide`. To run the latest commit instead of the latest
48
+ release, install `git+https://github.com/aimsotrash/Ebbtide` in place of `ebbtide`.
49
+
50
+ Other MCP clients take the same server as a `uvx` command:
51
+
52
+ ```json
53
+ {
54
+ "mcpServers": {
55
+ "ebbtide": {
56
+ "command": "uvx",
57
+ "args": ["--torch-backend", "cpu", "ebbtide"]
58
+ }
59
+ }
60
+ }
61
+ ```
62
+
63
+ `uvx` installs on the first launch, which takes a minute or two and can outlast a client's
64
+ startup timeout. Running `uvx --torch-backend cpu ebbtide < /dev/null` once in a terminal
65
+ does that install ahead of time.
66
+
67
+ The first `remember` or `recall` in a session takes about 5 seconds while the embedding
68
+ model (`all-MiniLM-L6-v2`) loads, and the very first run also downloads it (~90 MB).
69
+ After that, a call takes about 10 ms.
70
+
71
+ ## Panel
72
+
73
+ ```bash
74
+ ebbtide-panel # then open http://127.0.0.1:8765
75
+ ```
76
+
77
+ A quiet local page beside the agent: every memory, strongest first, with its strength,
78
+ half-life and recall count. It reads the same database read-only every 2 seconds, so a
79
+ `remember`, a `recall` or an eviction shows up as it happens. The look-ahead slider shows
80
+ how strong each memory would be after that many more days without a recall: the recalled
81
+ ones fade more slowly. It listens on 127.0.0.1 only and loads nothing from the internet.
82
+
83
+ For a demo that shouldn't touch your real memories, point both at a scratch database: set
84
+ `EBBTIDE_DB=/tmp/ebbtide-demo.db` for the panel, and pass `-e EBBTIDE_DB=/tmp/ebbtide-demo.db`
85
+ when you register the server. Once a first run has downloaded the embedding model, the server
86
+ loads it from disk and never goes online, so venue Wi-Fi doesn't matter.
87
+
88
+ ## Configuration
89
+
90
+ | Variable | Default | Purpose |
91
+ |---|---|---|
92
+ | `EBBTIDE_DB` | `~/.local/share/ebbtide/memory.db` | SQLite file holding the memories and their embeddings. |
93
+ | `EBBTIDE_POLICY` | `ebbtide-count` | A policy name from `intelligence.memory.POLICIES`. Of the forgetting-curve policies, the default scored best on the benchmark's dev split at the 25% and 50% budgets; see [`bench/RESULTS.md`](../bench/RESULTS.md). |
94
+ | `EBBTIDE_BUDGET` | `1000` | The most memories kept. `keep-all` ignores it. |
95
+
96
+ Pass them with `-e` when you register the server, and give the panel the same values, since it
97
+ reads them from its own environment. Each tool call is one SQLite
98
+ transaction, so two agents can share one database safely.
99
+
100
+ ## Test
101
+
102
+ From the repo root:
103
+
104
+ ```bash
105
+ uv venv -p 3.12 .venv && uv pip install --python .venv -r requirements-test.txt
106
+ .venv/bin/python -m pytest ebbtide/tests/
107
+ ```
108
+
109
+ They call every tool through an in-process MCP client and fetch the panel through its
110
+ HTTP handler, with a stub embedder and a fake clock, so they never load the embedding model or need
111
+ PyTorch.
@@ -0,0 +1 @@
1
+ """Ebbtide as an MCP server: long-term memory for AI agents. Run: python -m ebbtide"""
@@ -0,0 +1,3 @@
1
+ from ebbtide.server import main
2
+
3
+ main()
@@ -0,0 +1,93 @@
1
+ Copyright 2024 The Geist Project Authors (https://github.com/vercel/geist-font) Geist-Italic[wght].ttf: Copyright 2024 The Geist Project Authors (https://github.com/vercel/geist-font)
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+ This license is copied below, and is also available with a FAQ at:
5
+ http://scripts.sil.org/OFL
6
+
7
+
8
+ -----------------------------------------------------------
9
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
+ -----------------------------------------------------------
11
+
12
+ PREAMBLE
13
+ The goals of the Open Font License (OFL) are to stimulate worldwide
14
+ development of collaborative font projects, to support the font creation
15
+ efforts of academic and linguistic communities, and to provide a free and
16
+ open framework in which fonts may be shared and improved in partnership
17
+ with others.
18
+
19
+ The OFL allows the licensed fonts to be used, studied, modified and
20
+ redistributed freely as long as they are not sold by themselves. The
21
+ fonts, including any derivative works, can be bundled, embedded,
22
+ redistributed and/or sold with any software provided that any reserved
23
+ names are not used by derivative works. The fonts and derivatives,
24
+ however, cannot be released under any other type of license. The
25
+ requirement for fonts to remain under this license does not apply
26
+ to any document created using the fonts or their derivatives.
27
+
28
+ DEFINITIONS
29
+ "Font Software" refers to the set of files released by the Copyright
30
+ Holder(s) under this license and clearly marked as such. This may
31
+ include source files, build scripts and documentation.
32
+
33
+ "Reserved Font Name" refers to any names specified as such after the
34
+ copyright statement(s).
35
+
36
+ "Original Version" refers to the collection of Font Software components as
37
+ distributed by the Copyright Holder(s).
38
+
39
+ "Modified Version" refers to any derivative made by adding to, deleting,
40
+ or substituting -- in part or in whole -- any of the components of the
41
+ Original Version, by changing formats or by porting the Font Software to a
42
+ new environment.
43
+
44
+ "Author" refers to any designer, engineer, programmer, technical
45
+ writer or other person who contributed to the Font Software.
46
+
47
+ PERMISSION & CONDITIONS
48
+ Permission is hereby granted, free of charge, to any person obtaining
49
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
50
+ redistribute, and sell modified and unmodified copies of the Font
51
+ Software, subject to the following conditions:
52
+
53
+ 1) Neither the Font Software nor any of its individual components,
54
+ in Original or Modified Versions, may be sold by itself.
55
+
56
+ 2) Original or Modified Versions of the Font Software may be bundled,
57
+ redistributed and/or sold with any software, provided that each copy
58
+ contains the above copyright notice and this license. These can be
59
+ included either as stand-alone text files, human-readable headers or
60
+ in the appropriate machine-readable metadata fields within text or
61
+ binary files as long as those fields can be easily viewed by the user.
62
+
63
+ 3) No Modified Version of the Font Software may use the Reserved Font
64
+ Name(s) unless explicit written permission is granted by the corresponding
65
+ Copyright Holder. This restriction only applies to the primary font name as
66
+ presented to the users.
67
+
68
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69
+ Software shall not be used to promote, endorse or advertise any
70
+ Modified Version, except to acknowledge the contribution(s) of the
71
+ Copyright Holder(s) and the Author(s) or with their explicit written
72
+ permission.
73
+
74
+ 5) The Font Software, modified or unmodified, in part or in whole,
75
+ must be distributed entirely under this license, and must not be
76
+ distributed under any other license. The requirement for fonts to
77
+ remain under this license does not apply to any document created
78
+ using the Font Software.
79
+
80
+ TERMINATION
81
+ This license becomes null and void if any of the above conditions are
82
+ not met.
83
+
84
+ DISCLAIMER
85
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
+ OTHER DEALINGS IN THE FONT SOFTWARE.
Binary file