project-notebook 0.1.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.
Files changed (49) hide show
  1. project_notebook-0.1.0/.claude/settings.local.json +68 -0
  2. project_notebook-0.1.0/.gitignore +21 -0
  3. project_notebook-0.1.0/.obsidian/app.json +1 -0
  4. project_notebook-0.1.0/.obsidian/appearance.json +1 -0
  5. project_notebook-0.1.0/.obsidian/core-plugins.json +33 -0
  6. project_notebook-0.1.0/.obsidian/workspace.json +210 -0
  7. project_notebook-0.1.0/.python-version +1 -0
  8. project_notebook-0.1.0/CLAUDE.md +4 -0
  9. project_notebook-0.1.0/LICENSE +21 -0
  10. project_notebook-0.1.0/PKG-INFO +120 -0
  11. project_notebook-0.1.0/PLAN.md +343 -0
  12. project_notebook-0.1.0/README.md +92 -0
  13. project_notebook-0.1.0/docs/.nojekyll +0 -0
  14. project_notebook-0.1.0/docs/architecture.md +249 -0
  15. project_notebook-0.1.0/docs/development.md +80 -0
  16. project_notebook-0.1.0/docs/index.html +474 -0
  17. project_notebook-0.1.0/docs/ios.md +108 -0
  18. project_notebook-0.1.0/docs/security.md +110 -0
  19. project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook/Assets.xcassets/AppIcon.appiconset/Contents.json +14 -0
  20. project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook/Assets.xcassets/AppIcon.appiconset/icon-1024.png +0 -0
  21. project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook/Assets.xcassets/Contents.json +6 -0
  22. project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook/HubDiscovery.swift +68 -0
  23. project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook/Info.plist +68 -0
  24. project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook/LocalNetworkAuthorization.swift +72 -0
  25. project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook/PairingManager.swift +172 -0
  26. project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook/ProjectNotebook.entitlements +14 -0
  27. project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook/ProjectNotebookApp.swift +342 -0
  28. project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook.xcodeproj/project.pbxproj +489 -0
  29. project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  30. project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook.xcodeproj/xcshareddata/xcschemes/ProjectNotebook.xcscheme +91 -0
  31. project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook.xcodeproj/xcshareddata/xcschemes/ShareExtension.xcscheme +106 -0
  32. project_notebook-0.1.0/ios/ProjectNotebook/ShareExtension/Info.plist +56 -0
  33. project_notebook-0.1.0/ios/ProjectNotebook/ShareExtension/ShareExtension.entitlements +14 -0
  34. project_notebook-0.1.0/ios/ProjectNotebook/ShareExtension/ShareViewController.swift +355 -0
  35. project_notebook-0.1.0/ios/ProjectNotebook/Shared/BackgroundUploadDelegate.swift +69 -0
  36. project_notebook-0.1.0/ios/ProjectNotebook/Shared/TokenStore.swift +64 -0
  37. project_notebook-0.1.0/ios/ProjectNotebook/Shared/UploadLog.swift +194 -0
  38. project_notebook-0.1.0/ios/ProjectNotebook/project.yml +78 -0
  39. project_notebook-0.1.0/pyproject.toml +58 -0
  40. project_notebook-0.1.0/src/project_notebook/__init__.py +1 -0
  41. project_notebook-0.1.0/src/project_notebook/cli.py +346 -0
  42. project_notebook-0.1.0/src/project_notebook/hub.py +593 -0
  43. project_notebook-0.1.0/src/project_notebook/pairing.py +94 -0
  44. project_notebook-0.1.0/src/project_notebook/processors/__init__.py +71 -0
  45. project_notebook-0.1.0/src/project_notebook/processors/extract.py +108 -0
  46. project_notebook-0.1.0/src/project_notebook/processors/transcribe.py +107 -0
  47. project_notebook-0.1.0/src/project_notebook/skill/SKILL.md +105 -0
  48. project_notebook-0.1.0/src/project_notebook/tools.py +152 -0
  49. project_notebook-0.1.0/uv.lock +652 -0
@@ -0,0 +1,68 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(python3 test_server.py)",
5
+ "Bash(curl:*)",
6
+ "Bash(pkill -f test_server.py)",
7
+ "Bash(python3 /Users/stevenlybeck/projects/project-notebook/test_server.py)",
8
+ "Bash(pkill -f hub.py)",
9
+ "Bash(python3 hub.py)",
10
+ "Bash(python3 -c ':*)",
11
+ "Bash(pip3 install:*)",
12
+ "Bash(python3:*)",
13
+ "Bash(uv init:*)",
14
+ "Bash(uv add:*)",
15
+ "Bash(uv run:*)",
16
+ "Bash(osascript -e 'display notification \"Hub test\" with title \"Project Notebook\"')",
17
+ "Bash(touch ~/Downloads/test_watcher_probe.txt)",
18
+ "Bash(rm ~/Downloads/test_watcher_probe.txt)",
19
+ "Bash(ls:*)",
20
+ "Bash(mdls:*)",
21
+ "Bash(brew list:*)",
22
+ "Bash(brew install:*)",
23
+ "Bash(xcodegen generate:*)",
24
+ "Bash(xcodebuild -project ProjectNotebook.xcodeproj -scheme ProjectNotebook -destination 'generic/platform=iOS' -quiet build)",
25
+ "Read(//Applications/**)",
26
+ "Bash(mdfind \"kMDItemCFBundleIdentifier == 'com.apple.dt.Xcode'\")",
27
+ "Bash(scutil --get LocalHostName)",
28
+ "WebSearch",
29
+ "Bash(git add:*)",
30
+ "Bash(git reset:*)",
31
+ "Bash(git rm:*)",
32
+ "Bash(git commit:*)",
33
+ "Bash(uv remove:*)",
34
+ "Bash(ps:*)",
35
+ "Bash(sips -g pixelWidth -g pixelHeight -g format -g hasAlpha /Users/stevenlybeck/projects/project-notebook/icon.jpg)",
36
+ "Bash(sips -g pixelWidth -g pixelHeight -g format -g hasAlpha -g space /Users/stevenlybeck/projects/project-notebook/icon.png)",
37
+ "Bash(sips *)",
38
+ "Bash(git *)",
39
+ "Bash(uv build *)",
40
+ "Bash(unzip -l dist/*.whl)",
41
+ "Bash(rm .claude/skills/notebook-register/project-notebook)",
42
+ "Bash(rmdir .claude/skills/notebook-register .claude/skills)",
43
+ "Bash(lsof -nP -iTCP:9999 -sTCP:LISTEN)",
44
+ "Bash(uv tool *)",
45
+ "Bash(cd *)",
46
+ "WebFetch(domain:nonstrict.eu)",
47
+ "Bash(awk '/Begin PBXSourcesBuildPhase section/,/End PBXSourcesBuildPhase section/' ios/ProjectNotebook/ProjectNotebook.xcodeproj/project.pbxproj)",
48
+ "WebFetch(domain:www.avanderlee.com)",
49
+ "WebFetch(domain:useyourloaf.com)",
50
+ "WebFetch(domain:wwdcbysundell.com)",
51
+ "WebFetch(domain:docs.aiohttp.org)",
52
+ "Bash(tailscale ip *)",
53
+ "Bash(ffmpeg -version)",
54
+ "Bash(lsof -nP -iTCP:9876 -sTCP:LISTEN)",
55
+ "Read(//private/tmp/**)",
56
+ "Bash(xargs -I {} sh -c 'echo \"--- {} ---\"; cat \"{}\"; echo; echo \"--- siblings ---\"; ls \"$\\(dirname {}\\)\"')",
57
+ "Bash(gh auth *)",
58
+ "Bash(grep -iE \"\\\\.\\(env|pem|p12|key|mobileprovision|crt|cer\\)$|secret|credential\")",
59
+ "Bash(gh repo *)",
60
+ "Bash(open docs/index.html)",
61
+ "Bash(gh api *)",
62
+ "Bash(whisper-cli --help)",
63
+ "Read(//opt/homebrew/Cellar/whisper-cpp/1.8.2/share/whisper-cpp/**)",
64
+ "Read(//Users/stevenlybeck/.local/share/uv/tools/project-notebook/bin/**)",
65
+ "Bash(/Users/stevenlybeck/.local/share/uv/tools/project-notebook/bin/mlx_whisper --help)"
66
+ ]
67
+ }
68
+ }
@@ -0,0 +1,21 @@
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ wheels/
7
+ *.egg-info
8
+
9
+ # Virtual environments
10
+ .venv
11
+
12
+ # macOS
13
+ .DS_Store
14
+
15
+ # Artifacts (user data, not source)
16
+ artifacts/
17
+
18
+ # Xcode
19
+ ios/ProjectNotebook/ProjectNotebook.xcodeproj/xcuserdata/
20
+ *.xcuserstate
21
+ DerivedData/
@@ -0,0 +1 @@
1
+ {}
@@ -0,0 +1,33 @@
1
+ {
2
+ "file-explorer": true,
3
+ "global-search": true,
4
+ "switcher": true,
5
+ "graph": true,
6
+ "backlink": true,
7
+ "canvas": true,
8
+ "outgoing-link": true,
9
+ "tag-pane": true,
10
+ "footnotes": false,
11
+ "properties": true,
12
+ "page-preview": true,
13
+ "daily-notes": true,
14
+ "templates": true,
15
+ "note-composer": true,
16
+ "command-palette": true,
17
+ "slash-command": false,
18
+ "editor-status": true,
19
+ "bookmarks": true,
20
+ "markdown-importer": false,
21
+ "zk-prefixer": false,
22
+ "random-note": false,
23
+ "outline": true,
24
+ "word-count": true,
25
+ "slides": false,
26
+ "audio-recorder": false,
27
+ "workspaces": false,
28
+ "file-recovery": true,
29
+ "publish": false,
30
+ "sync": true,
31
+ "bases": true,
32
+ "webviewer": false
33
+ }
@@ -0,0 +1,210 @@
1
+ {
2
+ "main": {
3
+ "id": "2553c5a5be9f7154",
4
+ "type": "split",
5
+ "children": [
6
+ {
7
+ "id": "8671934280fa2bd1",
8
+ "type": "tabs",
9
+ "children": [
10
+ {
11
+ "id": "c62807bc4e33cc5b",
12
+ "type": "leaf",
13
+ "state": {
14
+ "type": "markdown",
15
+ "state": {
16
+ "file": "docs/architecture.md",
17
+ "mode": "source",
18
+ "source": false
19
+ },
20
+ "icon": "lucide-file",
21
+ "title": "architecture"
22
+ }
23
+ }
24
+ ]
25
+ }
26
+ ],
27
+ "direction": "vertical"
28
+ },
29
+ "left": {
30
+ "id": "a0d7094d74ccc8de",
31
+ "type": "split",
32
+ "children": [
33
+ {
34
+ "id": "01187edc44ce3512",
35
+ "type": "tabs",
36
+ "children": [
37
+ {
38
+ "id": "98597d96dbee47ee",
39
+ "type": "leaf",
40
+ "state": {
41
+ "type": "file-explorer",
42
+ "state": {
43
+ "sortOrder": "alphabetical",
44
+ "autoReveal": false
45
+ },
46
+ "icon": "lucide-folder-closed",
47
+ "title": "Files"
48
+ }
49
+ },
50
+ {
51
+ "id": "8962046dd5e8f9b2",
52
+ "type": "leaf",
53
+ "state": {
54
+ "type": "search",
55
+ "state": {
56
+ "query": "",
57
+ "matchingCase": false,
58
+ "explainSearch": false,
59
+ "collapseAll": false,
60
+ "extraContext": false,
61
+ "sortOrder": "alphabetical"
62
+ },
63
+ "icon": "lucide-search",
64
+ "title": "Search"
65
+ }
66
+ },
67
+ {
68
+ "id": "d0043373e920cf48",
69
+ "type": "leaf",
70
+ "state": {
71
+ "type": "bookmarks",
72
+ "state": {},
73
+ "icon": "lucide-bookmark",
74
+ "title": "Bookmarks"
75
+ }
76
+ }
77
+ ]
78
+ }
79
+ ],
80
+ "direction": "horizontal",
81
+ "width": 300
82
+ },
83
+ "right": {
84
+ "id": "3c11d2921ae77125",
85
+ "type": "split",
86
+ "children": [
87
+ {
88
+ "id": "e5cb0a4b6124da9c",
89
+ "type": "tabs",
90
+ "children": [
91
+ {
92
+ "id": "64e962a6468a599e",
93
+ "type": "leaf",
94
+ "state": {
95
+ "type": "backlink",
96
+ "state": {
97
+ "file": "docs/architecture.md",
98
+ "collapseAll": false,
99
+ "extraContext": false,
100
+ "sortOrder": "alphabetical",
101
+ "showSearch": false,
102
+ "searchQuery": "",
103
+ "backlinkCollapsed": false,
104
+ "unlinkedCollapsed": true
105
+ },
106
+ "icon": "links-coming-in",
107
+ "title": "Backlinks for architecture"
108
+ }
109
+ },
110
+ {
111
+ "id": "d6f58cc09dafee48",
112
+ "type": "leaf",
113
+ "state": {
114
+ "type": "outgoing-link",
115
+ "state": {
116
+ "file": "docs/architecture.md",
117
+ "linksCollapsed": false,
118
+ "unlinkedCollapsed": true
119
+ },
120
+ "icon": "links-going-out",
121
+ "title": "Outgoing links from architecture"
122
+ }
123
+ },
124
+ {
125
+ "id": "4b710d184717f843",
126
+ "type": "leaf",
127
+ "state": {
128
+ "type": "tag",
129
+ "state": {
130
+ "sortOrder": "frequency",
131
+ "useHierarchy": true,
132
+ "showSearch": false,
133
+ "searchQuery": ""
134
+ },
135
+ "icon": "lucide-tags",
136
+ "title": "Tags"
137
+ }
138
+ },
139
+ {
140
+ "id": "7a014707412a2a90",
141
+ "type": "leaf",
142
+ "state": {
143
+ "type": "all-properties",
144
+ "state": {
145
+ "sortOrder": "frequency",
146
+ "showSearch": false,
147
+ "searchQuery": ""
148
+ },
149
+ "icon": "lucide-archive",
150
+ "title": "All properties"
151
+ }
152
+ },
153
+ {
154
+ "id": "ae8e8106c4528cd4",
155
+ "type": "leaf",
156
+ "state": {
157
+ "type": "outline",
158
+ "state": {
159
+ "file": "docs/architecture.md",
160
+ "followCursor": false,
161
+ "showSearch": false,
162
+ "searchQuery": ""
163
+ },
164
+ "icon": "lucide-list",
165
+ "title": "Outline of architecture"
166
+ }
167
+ }
168
+ ]
169
+ }
170
+ ],
171
+ "direction": "horizontal",
172
+ "width": 300,
173
+ "collapsed": true
174
+ },
175
+ "left-ribbon": {
176
+ "hiddenItems": {
177
+ "switcher:Open quick switcher": false,
178
+ "graph:Open graph view": false,
179
+ "canvas:Create new canvas": false,
180
+ "daily-notes:Open today's daily note": false,
181
+ "templates:Insert template": false,
182
+ "command-palette:Open command palette": false,
183
+ "bases:Create new base": false
184
+ }
185
+ },
186
+ "active": "98597d96dbee47ee",
187
+ "lastOpenFiles": [
188
+ "LICENSE",
189
+ "src/project_notebook/processors/__pycache__/transcribe.cpython-312.pyc",
190
+ "src/project_notebook/processors/__pycache__/extract.cpython-312.pyc",
191
+ "src/project_notebook/processors/transcribe.py",
192
+ "src/project_notebook/processors/extract.py",
193
+ "src/project_notebook/__pycache__/tools.cpython-312.pyc",
194
+ "src/project_notebook/tools.py",
195
+ "docs/index.html",
196
+ "src/project_notebook/processors/__pycache__/whisper.cpython-312.pyc",
197
+ "src/project_notebook/processors/__pycache__/ffmpeg.cpython-312.pyc",
198
+ "src/project_notebook/processors/__pycache__/__init__.cpython-312.pyc",
199
+ "docs/development.md",
200
+ "src/project_notebook/skill/SKILL.md",
201
+ "README.md",
202
+ "docs/security.md",
203
+ "docs/ios.md",
204
+ "ios/ProjectNotebook/ProjectNotebook/Assets.xcassets/AppIcon.appiconset/icon-1024.png",
205
+ "icon.png",
206
+ "icon.jpg",
207
+ "docs/architecture.md",
208
+ "PLAN.md"
209
+ ]
210
+ }
@@ -0,0 +1 @@
1
+ 3.12
@@ -0,0 +1,4 @@
1
+ # Project Notebook
2
+
3
+ ## Setup
4
+ - Always use `uv` for Python dependencies and running Python code (`uv add`, `uv run`).
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Steven Lybeck
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.
@@ -0,0 +1,120 @@
1
+ Metadata-Version: 2.4
2
+ Name: project-notebook
3
+ Version: 0.1.0
4
+ Summary: Like AirDrop, but it lands in your Claude Code session. Share photos, voice memos, and videos from your phone straight into your active coding project.
5
+ Project-URL: Homepage, https://stevenlybeck.com/project-notebook/
6
+ Project-URL: Source, https://github.com/stevenlybeck/project-notebook
7
+ Project-URL: Issues, https://github.com/stevenlybeck/project-notebook/issues
8
+ Author-email: Steven Lybeck <slybeck@gmail.com>
9
+ License-Expression: MIT
10
+ License-File: LICENSE
11
+ Keywords: airdrop,artifacts,claude-code,ios,share-extension,transcription,voice-memo
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Environment :: Console
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Operating System :: MacOS
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Topic :: Multimedia
20
+ Classifier: Topic :: Software Development
21
+ Classifier: Topic :: Utilities
22
+ Requires-Python: >=3.12
23
+ Requires-Dist: aiohttp>=3.13.5
24
+ Requires-Dist: pyyaml>=6.0
25
+ Requires-Dist: segno>=1.6.1
26
+ Requires-Dist: zeroconf>=0.131.0
27
+ Description-Content-Type: text/markdown
28
+
29
+ # Project Notebook
30
+
31
+ > Like AirDrop, but it lands in your Claude Code session.
32
+
33
+ A local bridge from your phone's share sheet into the Claude Code session
34
+ you're already in. Photos, voice memos, videos, screenshots — whatever just
35
+ happened off-screen, brought back in. The session writes down what you were
36
+ thinking when each artifact arrived, attached to the file. A month later,
37
+ the photo still means something.
38
+
39
+ **Landing page (with diagrams and the story):**
40
+ <https://stevenlybeck.com/project-notebook/>
41
+
42
+ ## What it does
43
+
44
+ - **Phone → Mac → session.** An iOS Share Extension uploads to a small
45
+ hub running on your Mac, which notifies your active Claude Code
46
+ session over a live pipe.
47
+ - **Per-project library, automatic.** Each artifact lands in
48
+ `~/.project-notebook/artifacts/<project>/`, sidecared with extracted
49
+ metadata, audio, a preview frame, and a transcript.
50
+ - **Session context becomes annotations.** Claude reads each artifact
51
+ as it arrives and writes a note back capturing what was happening
52
+ when you shared it.
53
+
54
+ ## Install
55
+
56
+ ```sh
57
+ uv tool install project-notebook
58
+ project-notebook install-claude-code-skill
59
+ project-notebook check # see which features are on; install hints for the rest
60
+ ```
61
+
62
+ Project Notebook itself has no optional features — the core hub, CLI,
63
+ skill, and pairing are always available. Audio transcription and
64
+ video-metadata extraction are backed by external tools you install
65
+ separately. `check` tells you what's on and how to turn on the rest.
66
+
67
+ On Apple Silicon for transcription:
68
+
69
+ ```sh
70
+ uv tool install mlx-whisper
71
+ ```
72
+
73
+ For video metadata and preview frames:
74
+
75
+ ```sh
76
+ brew install ffmpeg
77
+ ```
78
+
79
+ ## Pair your phone
80
+
81
+ ```sh
82
+ project-notebook pair # prints a QR; scan it with the Project Notebook iOS app
83
+ ```
84
+
85
+ The iOS app currently ships through private TestFlight. See
86
+ [docs/ios.md](docs/ios.md) for the build/distribution state.
87
+
88
+ ## Open a session
89
+
90
+ In any Claude Code session:
91
+
92
+ ```
93
+ /notebook-register
94
+ ```
95
+
96
+ The skill holds a live pipe to the hub for the lifetime of the session —
97
+ no TTLs, no staleness. Anything you share from your phone shows up as
98
+ a notification in the conversation within seconds.
99
+
100
+ ## Architecture
101
+
102
+ - [Landing page](https://stevenlybeck.com/project-notebook/) —
103
+ diagrams and the why
104
+ - [docs/architecture.md](docs/architecture.md) — the artifact pipeline,
105
+ plane by plane
106
+ - [docs/security.md](docs/security.md) — three-plane access model (Unix
107
+ socket, LAN, loopback)
108
+ - [docs/ios.md](docs/ios.md) — iOS app + share extension
109
+ - [docs/development.md](docs/development.md) — running from source
110
+
111
+ ## Status
112
+
113
+ Personal tool, alpha. The end-to-end loop works on Apple Silicon Macs
114
+ with an iOS phone on the same LAN (or Tailscale). Cross-platform
115
+ support and additional transcription backends are
116
+ [planned](PLAN.md) but not yet wired up.
117
+
118
+ ## License
119
+
120
+ [MIT](LICENSE) © Steven Lybeck