obsideo-cli 0.3.0__tar.gz → 0.4.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.
- obsideo_cli-0.4.0/LICENSE +21 -0
- {obsideo_cli-0.3.0 → obsideo_cli-0.4.0}/PKG-INFO +12 -7
- {obsideo_cli-0.3.0 → obsideo_cli-0.4.0}/README.md +84 -84
- {obsideo_cli-0.3.0 → obsideo_cli-0.4.0}/obsideo/cli.py +1072 -935
- {obsideo_cli-0.3.0 → obsideo_cli-0.4.0}/obsideo_cli.egg-info/PKG-INFO +12 -7
- {obsideo_cli-0.3.0 → obsideo_cli-0.4.0}/obsideo_cli.egg-info/SOURCES.txt +1 -0
- {obsideo_cli-0.3.0 → obsideo_cli-0.4.0}/obsideo_core/config.py +5 -1
- {obsideo_cli-0.3.0 → obsideo_cli-0.4.0}/obsideo_core/login.py +9 -3
- {obsideo_cli-0.3.0 → obsideo_cli-0.4.0}/obsideo_core/storage.py +290 -290
- obsideo_cli-0.4.0/pyproject.toml +33 -0
- obsideo_cli-0.3.0/pyproject.toml +0 -27
- {obsideo_cli-0.3.0 → obsideo_cli-0.4.0}/obsideo/__init__.py +0 -0
- {obsideo_cli-0.3.0 → obsideo_cli-0.4.0}/obsideo/__main__.py +0 -0
- {obsideo_cli-0.3.0 → obsideo_cli-0.4.0}/obsideo/manifest.py +0 -0
- {obsideo_cli-0.3.0 → obsideo_cli-0.4.0}/obsideo/sync.py +0 -0
- {obsideo_cli-0.3.0 → obsideo_cli-0.4.0}/obsideo_cli.egg-info/dependency_links.txt +0 -0
- {obsideo_cli-0.3.0 → obsideo_cli-0.4.0}/obsideo_cli.egg-info/entry_points.txt +0 -0
- {obsideo_cli-0.3.0 → obsideo_cli-0.4.0}/obsideo_cli.egg-info/requires.txt +0 -0
- {obsideo_cli-0.3.0 → obsideo_cli-0.4.0}/obsideo_cli.egg-info/top_level.txt +0 -0
- {obsideo_cli-0.3.0 → obsideo_cli-0.4.0}/obsideo_core/__init__.py +0 -0
- {obsideo_cli-0.3.0 → obsideo_cli-0.4.0}/obsideo_core/crypto.py +0 -0
- {obsideo_cli-0.3.0 → obsideo_cli-0.4.0}/obsideo_core/identity.py +0 -0
- {obsideo_cli-0.3.0 → obsideo_cli-0.4.0}/obsideo_core/names.py +0 -0
- {obsideo_cli-0.3.0 → obsideo_cli-0.4.0}/setup.cfg +0 -0
- {obsideo_cli-0.3.0 → obsideo_cli-0.4.0}/tests/test_cli.py +0 -0
- {obsideo_cli-0.3.0 → obsideo_cli-0.4.0}/tests/test_core.py +0 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Regan Milne
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -1,25 +1,30 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: obsideo-cli
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary: Obsideo Cloud - encrypted storage
|
|
3
|
+
Version: 0.4.0
|
|
4
|
+
Summary: Obsideo Cloud CLI - client-side encrypted storage for people and AI agents: content is encrypted on your machine before upload. 12 GB free, no card. Save, browse, and sync from your terminal; agent integration contract at obsideo.io/agents.md
|
|
5
5
|
License: MIT
|
|
6
6
|
Project-URL: Homepage, https://obsideo.io
|
|
7
|
+
Project-URL: Documentation, https://obsideo.io/docs/
|
|
8
|
+
Project-URL: Agent integration (AGENTS.md), https://obsideo.io/agents.md
|
|
9
|
+
Keywords: encrypted storage,ai agents,agent storage,s3,backup,end-to-end encryption,object storage,free tier,cli,sync
|
|
7
10
|
Requires-Python: >=3.10
|
|
8
11
|
Description-Content-Type: text/markdown
|
|
12
|
+
License-File: LICENSE
|
|
9
13
|
Requires-Dist: boto3>=1.28
|
|
10
14
|
Requires-Dist: cryptography>=41.0
|
|
11
15
|
Requires-Dist: certifi
|
|
16
|
+
Dynamic: license-file
|
|
12
17
|
|
|
13
18
|
# obsideo-cli
|
|
14
19
|
|
|
15
|
-
**
|
|
20
|
+
**Client-side encrypted storage: your content is encrypted on your machine before upload, so the platform cannot read it.** (File names are stored in the clear; keep them non-sensitive.) Save, browse, and sync whatever you want
|
|
16
21
|
from your terminal. Files are encrypted on your machine before they leave, so
|
|
17
22
|
Obsideo's gateway, coordinator, and storage providers only ever see ciphertext.
|
|
18
|
-
Your data lands on three
|
|
23
|
+
Your data lands on three providers (RF=3).
|
|
19
24
|
|
|
20
25
|
```
|
|
21
26
|
pip install obsideo-cli
|
|
22
|
-
obsideo login # email ->
|
|
27
|
+
obsideo login # email -> 12 GB free
|
|
23
28
|
obsideo # open the shell
|
|
24
29
|
```
|
|
25
30
|
|
|
@@ -30,7 +35,7 @@ $ obsideo login
|
|
|
30
35
|
Enter your email: you@example.com
|
|
31
36
|
Check your email for a verification code.
|
|
32
37
|
Enter verification code: 482913
|
|
33
|
-
You're all set.
|
|
38
|
+
You're all set. 12 GB free.
|
|
34
39
|
```
|
|
35
40
|
|
|
36
41
|
Login is handled by Obsideo's signup service at **`signup.obsideo.io`**: it emails
|
|
@@ -56,7 +61,7 @@ obsideo:/trip/ get cat.jpg ./downloaded.jpg
|
|
|
56
61
|
|
|
57
62
|
| Command | Description |
|
|
58
63
|
|---|---|
|
|
59
|
-
| `obsideo login` | Sign up / log in with your email (
|
|
64
|
+
| `obsideo login` | Sign up / log in with your email (12 GB free) |
|
|
60
65
|
| `ls [path]` | List files and folders |
|
|
61
66
|
| `cd <path>` / `pwd` | Move around / show location |
|
|
62
67
|
| `put <local> [name]` | Encrypt + upload a file, or a whole folder (recursive). `--no-encrypt` to store as-is |
|
|
@@ -1,84 +1,84 @@
|
|
|
1
|
-
# obsideo-cli
|
|
2
|
-
|
|
3
|
-
**
|
|
4
|
-
from your terminal. Files are encrypted on your machine before they leave, so
|
|
5
|
-
Obsideo's gateway, coordinator, and storage providers only ever see ciphertext.
|
|
6
|
-
Your data lands on three
|
|
7
|
-
|
|
8
|
-
```
|
|
9
|
-
pip install obsideo-cli
|
|
10
|
-
obsideo login # email ->
|
|
11
|
-
obsideo # open the shell
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
## Get started
|
|
15
|
-
|
|
16
|
-
```
|
|
17
|
-
$ obsideo login
|
|
18
|
-
Enter your email: you@example.com
|
|
19
|
-
Check your email for a verification code.
|
|
20
|
-
Enter verification code: 482913
|
|
21
|
-
You're all set.
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
Login is handled by Obsideo's signup service at **`signup.obsideo.io`**: it emails
|
|
25
|
-
you a one-time code and provisions your free tier. There's no password - just your
|
|
26
|
-
email and a local key (see *How it works*).
|
|
27
|
-
|
|
28
|
-
Then either drop into the shell or run one-shot commands:
|
|
29
|
-
|
|
30
|
-
```
|
|
31
|
-
$ obsideo
|
|
32
|
-
obsideo:/ put ~/notes.txt
|
|
33
|
-
obsideo:/ ls
|
|
34
|
-
[file] notes.txt 1.2 KB
|
|
35
|
-
obsideo:/ put ~/photos # a whole folder, uploaded recursively
|
|
36
|
-
obsideo:/ put "C:\My Files\tax return.pdf" # paths with spaces: just quote them
|
|
37
|
-
obsideo:/ mkdir trip
|
|
38
|
-
obsideo:/ cd trip
|
|
39
|
-
obsideo:/trip/ put ~/cat.jpg
|
|
40
|
-
obsideo:/trip/ get cat.jpg ./downloaded.jpg
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
## Commands
|
|
44
|
-
|
|
45
|
-
| Command | Description |
|
|
46
|
-
|---|---|
|
|
47
|
-
| `obsideo login` | Sign up / log in with your email (
|
|
48
|
-
| `ls [path]` | List files and folders |
|
|
49
|
-
| `cd <path>` / `pwd` | Move around / show location |
|
|
50
|
-
| `put <local> [name]` | Encrypt + upload a file, or a whole folder (recursive). `--no-encrypt` to store as-is |
|
|
51
|
-
| `get <remote> [local]` | Download + decrypt a file |
|
|
52
|
-
| `rm <remote>` | Delete a file |
|
|
53
|
-
| `mkdir <name>` | Create a folder |
|
|
54
|
-
| `info <remote>` | Show object metadata |
|
|
55
|
-
| `account` | Show storage used vs. your free quota |
|
|
56
|
-
| `sync push\|pull\|status` | Sync your local folder with Obsideo |
|
|
57
|
-
| `config [set k v]` | Show or change settings |
|
|
58
|
-
|
|
59
|
-
## How it works
|
|
60
|
-
|
|
61
|
-
`obsideo` is a thin front-end over the shared **`obsideo_core`** layer (storage
|
|
62
|
-
seam, signing identity, account crypto, email-OTP login). The `mlvault` ML
|
|
63
|
-
extension builds on the same core - build the core once, two front-ends.
|
|
64
|
-
|
|
65
|
-
- **Encryption:** AES-256-GCM with one account data key held locally at
|
|
66
|
-
`~/.obsideo/data.key`. Copy that key to another machine and everything is
|
|
67
|
-
readable there; lose it and the data is unrecoverable by design. Back it up.
|
|
68
|
-
- **Signing identity:** an Ed25519 key (`~/.obsideo/signing.key`) authorizes
|
|
69
|
-
deletes (Principle 2 - the network can't delete your data without your
|
|
70
|
-
signature). Generated locally; only the public half is ever sent.
|
|
71
|
-
- **Filename encryption:** on by default (`encrypt_names`). Each path component
|
|
72
|
-
(folder names + filename) is encrypted on your machine with AES-SIV - deterministic,
|
|
73
|
-
so `ls`/`cd` still list under the encrypted prefix and the client decrypts the
|
|
74
|
-
returned tokens back to real names. Turn it off with `config set encrypt_names false`
|
|
75
|
-
(interop/debug; existing objects aren't migrated).
|
|
76
|
-
- **What Obsideo sees:** ciphertext only - never a filename or a byte of content.
|
|
77
|
-
Residual leaks (by design at this level): directory *structure* (depth, fan-out),
|
|
78
|
-
object *sizes* (ciphertext ≈ plaintext), and object *counts*. Identical names
|
|
79
|
-
encrypt to identical tokens, so Obsideo can tell two objects share a name - never
|
|
80
|
-
what it is.
|
|
81
|
-
|
|
82
|
-
## License
|
|
83
|
-
|
|
84
|
-
MIT
|
|
1
|
+
# obsideo-cli
|
|
2
|
+
|
|
3
|
+
**Client-side encrypted storage: your content is encrypted on your machine before upload, so the platform cannot read it.** (File names are stored in the clear; keep them non-sensitive.) Save, browse, and sync whatever you want
|
|
4
|
+
from your terminal. Files are encrypted on your machine before they leave, so
|
|
5
|
+
Obsideo's gateway, coordinator, and storage providers only ever see ciphertext.
|
|
6
|
+
Your data lands on three providers (RF=3).
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
pip install obsideo-cli
|
|
10
|
+
obsideo login # email -> 12 GB free
|
|
11
|
+
obsideo # open the shell
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Get started
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
$ obsideo login
|
|
18
|
+
Enter your email: you@example.com
|
|
19
|
+
Check your email for a verification code.
|
|
20
|
+
Enter verification code: 482913
|
|
21
|
+
You're all set. 12 GB free.
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Login is handled by Obsideo's signup service at **`signup.obsideo.io`**: it emails
|
|
25
|
+
you a one-time code and provisions your free tier. There's no password - just your
|
|
26
|
+
email and a local key (see *How it works*).
|
|
27
|
+
|
|
28
|
+
Then either drop into the shell or run one-shot commands:
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
$ obsideo
|
|
32
|
+
obsideo:/ put ~/notes.txt
|
|
33
|
+
obsideo:/ ls
|
|
34
|
+
[file] notes.txt 1.2 KB
|
|
35
|
+
obsideo:/ put ~/photos # a whole folder, uploaded recursively
|
|
36
|
+
obsideo:/ put "C:\My Files\tax return.pdf" # paths with spaces: just quote them
|
|
37
|
+
obsideo:/ mkdir trip
|
|
38
|
+
obsideo:/ cd trip
|
|
39
|
+
obsideo:/trip/ put ~/cat.jpg
|
|
40
|
+
obsideo:/trip/ get cat.jpg ./downloaded.jpg
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Commands
|
|
44
|
+
|
|
45
|
+
| Command | Description |
|
|
46
|
+
|---|---|
|
|
47
|
+
| `obsideo login` | Sign up / log in with your email (12 GB free) |
|
|
48
|
+
| `ls [path]` | List files and folders |
|
|
49
|
+
| `cd <path>` / `pwd` | Move around / show location |
|
|
50
|
+
| `put <local> [name]` | Encrypt + upload a file, or a whole folder (recursive). `--no-encrypt` to store as-is |
|
|
51
|
+
| `get <remote> [local]` | Download + decrypt a file |
|
|
52
|
+
| `rm <remote>` | Delete a file |
|
|
53
|
+
| `mkdir <name>` | Create a folder |
|
|
54
|
+
| `info <remote>` | Show object metadata |
|
|
55
|
+
| `account` | Show storage used vs. your free quota |
|
|
56
|
+
| `sync push\|pull\|status` | Sync your local folder with Obsideo |
|
|
57
|
+
| `config [set k v]` | Show or change settings |
|
|
58
|
+
|
|
59
|
+
## How it works
|
|
60
|
+
|
|
61
|
+
`obsideo` is a thin front-end over the shared **`obsideo_core`** layer (storage
|
|
62
|
+
seam, signing identity, account crypto, email-OTP login). The `mlvault` ML
|
|
63
|
+
extension builds on the same core - build the core once, two front-ends.
|
|
64
|
+
|
|
65
|
+
- **Encryption:** AES-256-GCM with one account data key held locally at
|
|
66
|
+
`~/.obsideo/data.key`. Copy that key to another machine and everything is
|
|
67
|
+
readable there; lose it and the data is unrecoverable by design. Back it up.
|
|
68
|
+
- **Signing identity:** an Ed25519 key (`~/.obsideo/signing.key`) authorizes
|
|
69
|
+
deletes (Principle 2 - the network can't delete your data without your
|
|
70
|
+
signature). Generated locally; only the public half is ever sent.
|
|
71
|
+
- **Filename encryption:** on by default (`encrypt_names`). Each path component
|
|
72
|
+
(folder names + filename) is encrypted on your machine with AES-SIV - deterministic,
|
|
73
|
+
so `ls`/`cd` still list under the encrypted prefix and the client decrypts the
|
|
74
|
+
returned tokens back to real names. Turn it off with `config set encrypt_names false`
|
|
75
|
+
(interop/debug; existing objects aren't migrated).
|
|
76
|
+
- **What Obsideo sees:** ciphertext only - never a filename or a byte of content.
|
|
77
|
+
Residual leaks (by design at this level): directory *structure* (depth, fan-out),
|
|
78
|
+
object *sizes* (ciphertext ≈ plaintext), and object *counts*. Identical names
|
|
79
|
+
encrypt to identical tokens, so Obsideo can tell two objects share a name - never
|
|
80
|
+
what it is.
|
|
81
|
+
|
|
82
|
+
## License
|
|
83
|
+
|
|
84
|
+
MIT
|