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.
- project_notebook-0.1.0/.claude/settings.local.json +68 -0
- project_notebook-0.1.0/.gitignore +21 -0
- project_notebook-0.1.0/.obsidian/app.json +1 -0
- project_notebook-0.1.0/.obsidian/appearance.json +1 -0
- project_notebook-0.1.0/.obsidian/core-plugins.json +33 -0
- project_notebook-0.1.0/.obsidian/workspace.json +210 -0
- project_notebook-0.1.0/.python-version +1 -0
- project_notebook-0.1.0/CLAUDE.md +4 -0
- project_notebook-0.1.0/LICENSE +21 -0
- project_notebook-0.1.0/PKG-INFO +120 -0
- project_notebook-0.1.0/PLAN.md +343 -0
- project_notebook-0.1.0/README.md +92 -0
- project_notebook-0.1.0/docs/.nojekyll +0 -0
- project_notebook-0.1.0/docs/architecture.md +249 -0
- project_notebook-0.1.0/docs/development.md +80 -0
- project_notebook-0.1.0/docs/index.html +474 -0
- project_notebook-0.1.0/docs/ios.md +108 -0
- project_notebook-0.1.0/docs/security.md +110 -0
- project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook/Assets.xcassets/AppIcon.appiconset/Contents.json +14 -0
- project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook/Assets.xcassets/AppIcon.appiconset/icon-1024.png +0 -0
- project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook/Assets.xcassets/Contents.json +6 -0
- project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook/HubDiscovery.swift +68 -0
- project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook/Info.plist +68 -0
- project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook/LocalNetworkAuthorization.swift +72 -0
- project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook/PairingManager.swift +172 -0
- project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook/ProjectNotebook.entitlements +14 -0
- project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook/ProjectNotebookApp.swift +342 -0
- project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook.xcodeproj/project.pbxproj +489 -0
- project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook.xcodeproj/xcshareddata/xcschemes/ProjectNotebook.xcscheme +91 -0
- project_notebook-0.1.0/ios/ProjectNotebook/ProjectNotebook.xcodeproj/xcshareddata/xcschemes/ShareExtension.xcscheme +106 -0
- project_notebook-0.1.0/ios/ProjectNotebook/ShareExtension/Info.plist +56 -0
- project_notebook-0.1.0/ios/ProjectNotebook/ShareExtension/ShareExtension.entitlements +14 -0
- project_notebook-0.1.0/ios/ProjectNotebook/ShareExtension/ShareViewController.swift +355 -0
- project_notebook-0.1.0/ios/ProjectNotebook/Shared/BackgroundUploadDelegate.swift +69 -0
- project_notebook-0.1.0/ios/ProjectNotebook/Shared/TokenStore.swift +64 -0
- project_notebook-0.1.0/ios/ProjectNotebook/Shared/UploadLog.swift +194 -0
- project_notebook-0.1.0/ios/ProjectNotebook/project.yml +78 -0
- project_notebook-0.1.0/pyproject.toml +58 -0
- project_notebook-0.1.0/src/project_notebook/__init__.py +1 -0
- project_notebook-0.1.0/src/project_notebook/cli.py +346 -0
- project_notebook-0.1.0/src/project_notebook/hub.py +593 -0
- project_notebook-0.1.0/src/project_notebook/pairing.py +94 -0
- project_notebook-0.1.0/src/project_notebook/processors/__init__.py +71 -0
- project_notebook-0.1.0/src/project_notebook/processors/extract.py +108 -0
- project_notebook-0.1.0/src/project_notebook/processors/transcribe.py +107 -0
- project_notebook-0.1.0/src/project_notebook/skill/SKILL.md +105 -0
- project_notebook-0.1.0/src/project_notebook/tools.py +152 -0
- 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 @@
|
|
|
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,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
|