superboard 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 (93) hide show
  1. superboard-0.1.0/.github/workflows/leak-scan.yml +31 -0
  2. superboard-0.1.0/.github/workflows/macos-smoke.yml +75 -0
  3. superboard-0.1.0/.github/workflows/publish-to-pypi.yml +98 -0
  4. superboard-0.1.0/.gitignore +25 -0
  5. superboard-0.1.0/LICENSE +21 -0
  6. superboard-0.1.0/PITCH.md +9 -0
  7. superboard-0.1.0/PKG-INFO +142 -0
  8. superboard-0.1.0/README.md +122 -0
  9. superboard-0.1.0/RELEASES.md +21 -0
  10. superboard-0.1.0/RELEASING.md +87 -0
  11. superboard-0.1.0/SECURITY.md +14 -0
  12. superboard-0.1.0/SUPPORT.md +10 -0
  13. superboard-0.1.0/docs/DEVELOPMENT.md +89 -0
  14. superboard-0.1.0/docs/USING-SUPERBOARD.md +187 -0
  15. superboard-0.1.0/docs/assets/superboard-hero.png +0 -0
  16. superboard-0.1.0/pyproject.toml +45 -0
  17. superboard-0.1.0/sandbox/inbox/board.md +55 -0
  18. superboard-0.1.0/scripts/hooks/pre-commit +20 -0
  19. superboard-0.1.0/scripts/hooks/pre-push +58 -0
  20. superboard-0.1.0/scripts/install-hooks.sh +30 -0
  21. superboard-0.1.0/scripts/leak_scan.py +255 -0
  22. superboard-0.1.0/scripts/record-installed-e2e.py +203 -0
  23. superboard-0.1.0/scripts/sandbox.sh +9 -0
  24. superboard-0.1.0/scripts/smoke-installed.sh +124 -0
  25. superboard-0.1.0/scripts/smoke-local.sh +32 -0
  26. superboard-0.1.0/scripts/testrig.sh +184 -0
  27. superboard-0.1.0/superboard/ARCHITEKTUR.md +221 -0
  28. superboard-0.1.0/superboard/CHANGELOG.md +405 -0
  29. superboard-0.1.0/superboard/__init__.py +6 -0
  30. superboard-0.1.0/superboard/__main__.py +225 -0
  31. superboard-0.1.0/superboard/actions.json +4 -0
  32. superboard-0.1.0/superboard/board.config.example.json +18 -0
  33. superboard-0.1.0/superboard/board_integrity.py +159 -0
  34. superboard-0.1.0/superboard/board_lint.py +307 -0
  35. superboard-0.1.0/superboard/board_ls.py +120 -0
  36. superboard-0.1.0/superboard/board_write.py +249 -0
  37. superboard-0.1.0/superboard/bump.py +248 -0
  38. superboard-0.1.0/superboard/claude_identity.py +86 -0
  39. superboard-0.1.0/superboard/config.py +92 -0
  40. superboard-0.1.0/superboard/conftest.py +87 -0
  41. superboard-0.1.0/superboard/contract.py +190 -0
  42. superboard-0.1.0/superboard/dev_radar.py +642 -0
  43. superboard-0.1.0/superboard/gc_runner.py +2475 -0
  44. superboard-0.1.0/superboard/git_state.py +83 -0
  45. superboard-0.1.0/superboard/guard_hook.py +174 -0
  46. superboard-0.1.0/superboard/icon.icns +0 -0
  47. superboard-0.1.0/superboard/icon.png +0 -0
  48. superboard-0.1.0/superboard/index.html +8248 -0
  49. superboard-0.1.0/superboard/make-icon.py +118 -0
  50. superboard-0.1.0/superboard/markers.py +59 -0
  51. superboard-0.1.0/superboard/migrate_diet.py +117 -0
  52. superboard-0.1.0/superboard/onboarding-showcase.html +32 -0
  53. superboard-0.1.0/superboard/onboarding.py +56 -0
  54. superboard-0.1.0/superboard/paths.py +58 -0
  55. superboard-0.1.0/superboard/pytest.ini +32 -0
  56. superboard-0.1.0/superboard/radar_watch.py +334 -0
  57. superboard-0.1.0/superboard/receipt.py +267 -0
  58. superboard-0.1.0/superboard/receipt_hook.py +60 -0
  59. superboard-0.1.0/superboard/registries.py +168 -0
  60. superboard-0.1.0/superboard/retro_scan.py +675 -0
  61. superboard-0.1.0/superboard/rituals.json +4 -0
  62. superboard-0.1.0/superboard/server.py +5194 -0
  63. superboard-0.1.0/superboard/sidecar.py +128 -0
  64. superboard-0.1.0/superboard/superboard-skill.md +118 -0
  65. superboard-0.1.0/superboard/sweep.py +620 -0
  66. superboard-0.1.0/superboard/terminal.py +336 -0
  67. superboard-0.1.0/superboard/test_board_integrity.py +106 -0
  68. superboard-0.1.0/superboard/test_board_lint.py +240 -0
  69. superboard-0.1.0/superboard/test_board_ls.py +138 -0
  70. superboard-0.1.0/superboard/test_board_write.py +92 -0
  71. superboard-0.1.0/superboard/test_bootstrap.py +240 -0
  72. superboard-0.1.0/superboard/test_bump.py +63 -0
  73. superboard-0.1.0/superboard/test_cache_consistency.py +386 -0
  74. superboard-0.1.0/superboard/test_codex_runner.py +542 -0
  75. superboard-0.1.0/superboard/test_english_product_text.py +198 -0
  76. superboard-0.1.0/superboard/test_extensions.py +77 -0
  77. superboard-0.1.0/superboard/test_first_run.py +295 -0
  78. superboard-0.1.0/superboard/test_guard_hook.py +143 -0
  79. superboard-0.1.0/superboard/test_leak_scan.py +52 -0
  80. superboard-0.1.0/superboard/test_make_icon.py +81 -0
  81. superboard-0.1.0/superboard/test_onboarding_close.py +77 -0
  82. superboard-0.1.0/superboard/test_paths.py +212 -0
  83. superboard-0.1.0/superboard/test_pixel_language.py +99 -0
  84. superboard-0.1.0/superboard/test_radar_watch.py +152 -0
  85. superboard-0.1.0/superboard/test_registries.py +97 -0
  86. superboard-0.1.0/superboard/test_retro_scan.py +433 -0
  87. superboard-0.1.0/superboard/test_server.py +5675 -0
  88. superboard-0.1.0/superboard/test_terminal.py +310 -0
  89. superboard-0.1.0/superboard/test_thread_search.py +264 -0
  90. superboard-0.1.0/superboard/test_ui_smoke.py +307 -0
  91. superboard-0.1.0/superboard/test_usage_summary.py +83 -0
  92. superboard-0.1.0/superboard/test_workflow_profile.py +79 -0
  93. superboard-0.1.0/superboard/thread_search.py +675 -0
@@ -0,0 +1,31 @@
1
+ # The backstop, not the gate.
2
+ #
3
+ # scripts/hooks/pre-push is what actually prevents a leak — it runs before the
4
+ # commits leave the machine. This runs after they arrive, so it cannot un-publish
5
+ # anything. What it buys is the case the hook cannot cover: a push from a clone
6
+ # where nobody ran install-hooks.sh, a --no-verify, a web edit, a contributor's
7
+ # fork. It is the smoke detector; the hook is not leaving the stove on.
8
+ #
9
+ # It scans the full history of the pushed ref, not just the tip, because that is
10
+ # what a clone can read — hence fetch-depth: 0. A shallow checkout would make the
11
+ # whole job say "clean" for the wrong reason.
12
+ name: leak scan
13
+
14
+ on:
15
+ push:
16
+ pull_request:
17
+
18
+ jobs:
19
+ leak-scan:
20
+ runs-on: ubuntu-latest
21
+ steps:
22
+ - uses: actions/checkout@v4
23
+ with:
24
+ fetch-depth: 0 # full history — the surface a clone actually sees
25
+ - uses: actions/setup-python@v5
26
+ with:
27
+ python-version: '3.13'
28
+ - name: working tree
29
+ run: python3 scripts/leak_scan.py
30
+ - name: history
31
+ run: python3 scripts/leak_scan.py --history HEAD
@@ -0,0 +1,75 @@
1
+ name: clean macOS smoke test
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ pull_request:
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ clean-macos:
12
+ name: macOS / Python ${{ matrix.python-version }}
13
+ runs-on: macos-latest
14
+ strategy:
15
+ fail-fast: false
16
+ matrix:
17
+ python-version: ["3.10", "3.13"]
18
+
19
+ steps:
20
+ - uses: actions/checkout@v4
21
+
22
+ - uses: actions/setup-python@v5
23
+ with:
24
+ python-version: ${{ matrix.python-version }}
25
+
26
+ - name: Build and install the wheel
27
+ shell: bash
28
+ run: |
29
+ set -euo pipefail
30
+ python -m pip install --upgrade pip
31
+ rm -rf dist
32
+ python -m pip wheel . --wheel-dir dist
33
+ test "$(ls dist/superboard-*.whl | wc -l)" -eq 1 || {
34
+ echo "::error::dist/ holds more than one wheel — cannot tell which is under test"
35
+ ls -la dist; exit 1
36
+ }
37
+ git rev-parse HEAD > dist/BUILD_SHA
38
+ python -m pip install --force-reinstall dist/superboard-*.whl
39
+
40
+ - name: Exercise a clean first start
41
+ shell: bash
42
+ env:
43
+ SB_SMOKE_ROOT: ${{ runner.temp }}
44
+ SB_SMOKE_LABEL: python-${{ matrix.python-version }}
45
+ run: |
46
+ set -euo pipefail
47
+ SB_SMOKE_PYTHON="$(command -v python)" scripts/smoke-installed.sh
48
+
49
+ - name: Record visible end-to-end proof
50
+ if: matrix.python-version == '3.13'
51
+ shell: bash
52
+ run: |
53
+ set -euo pipefail
54
+ python -m pip install playwright
55
+ python -m playwright install chromium
56
+ python scripts/record-installed-e2e.py --output evidence
57
+
58
+ - name: Upload visible proof
59
+ if: always() && matrix.python-version == '3.13'
60
+ uses: actions/upload-artifact@v4
61
+ with:
62
+ name: macos-visible-e2e-python-${{ matrix.python-version }}
63
+ path: evidence/
64
+ retention-days: 14
65
+ if-no-files-found: error
66
+
67
+ - name: Upload diagnostics on failure
68
+ if: failure()
69
+ uses: actions/upload-artifact@v4
70
+ with:
71
+ name: macos-smoke-python-${{ matrix.python-version }}
72
+ path: |
73
+ ${{ runner.temp }}/superboard-python-${{ matrix.python-version }}.log
74
+ ${{ runner.temp }}/superboard-collision-python-${{ matrix.python-version }}.log
75
+ ${{ runner.temp }}/quick-capture-python-${{ matrix.python-version }}.json
@@ -0,0 +1,98 @@
1
+ name: publish to PyPI
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+ pull_request:
8
+ paths:
9
+ - ".github/workflows/publish-to-pypi.yml"
10
+ - "pyproject.toml"
11
+ - "RELEASES.md"
12
+ - "scripts/smoke-installed.sh"
13
+ - "superboard/**"
14
+ workflow_dispatch:
15
+
16
+ permissions:
17
+ contents: read
18
+
19
+ jobs:
20
+ build-and-smoke:
21
+ runs-on: ubuntu-latest
22
+ steps:
23
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
24
+ with:
25
+ persist-credentials: false
26
+ - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
27
+ with:
28
+ python-version: "3.13"
29
+ - name: Verify tag matches package version
30
+ if: startsWith(github.ref, 'refs/tags/v')
31
+ shell: bash
32
+ run: |
33
+ set -euo pipefail
34
+ package_version="$(python -c 'import tomllib; print(tomllib.load(open("pyproject.toml", "rb"))["project"]["version"])')"
35
+ test "${GITHUB_REF_NAME}" = "v${package_version}"
36
+ - name: Build distributions
37
+ run: python -m pip install --upgrade build twine && python -m build
38
+ - name: Check metadata
39
+ run: python -m twine check dist/*
40
+ - name: Install and smoke the exact wheel
41
+ shell: bash
42
+ env:
43
+ SB_SMOKE_ROOT: ${{ runner.temp }}
44
+ SB_SMOKE_LABEL: release
45
+ run: |
46
+ set -euo pipefail
47
+ python -m pip install --force-reinstall dist/superboard-*.whl
48
+ SB_SMOKE_PYTHON="$(command -v python)" scripts/smoke-installed.sh
49
+ - name: Store verified distributions
50
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
51
+ with:
52
+ name: python-package-distributions
53
+ path: dist/
54
+ if-no-files-found: error
55
+
56
+ publish:
57
+ if: startsWith(github.ref, 'refs/tags/v')
58
+ needs: build-and-smoke
59
+ runs-on: ubuntu-latest
60
+ environment:
61
+ name: pypi
62
+ url: https://pypi.org/p/superboard
63
+ permissions:
64
+ id-token: write
65
+ steps:
66
+ - name: Download verified distributions
67
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
68
+ with:
69
+ name: python-package-distributions
70
+ path: dist/
71
+ - name: Publish to PyPI
72
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # release/v1
73
+
74
+ github-release:
75
+ if: startsWith(github.ref, 'refs/tags/v')
76
+ needs: publish
77
+ runs-on: ubuntu-latest
78
+ permissions:
79
+ contents: write
80
+ steps:
81
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
82
+ with:
83
+ persist-credentials: false
84
+ - name: Extract curated release notes
85
+ shell: bash
86
+ run: |
87
+ set -euo pipefail
88
+ version="${GITHUB_REF_NAME#v}"
89
+ awk -v heading="## [${version}]" '
90
+ index($0, heading) == 1 { found=1; next }
91
+ found && /^## \[/ { exit }
92
+ found { print }
93
+ ' RELEASES.md > release-notes.md
94
+ test -s release-notes.md
95
+ - name: Create GitHub release after PyPI succeeds
96
+ env:
97
+ GH_TOKEN: ${{ github.token }}
98
+ run: gh release create "$GITHUB_REF_NAME" --repo "$GITHUB_REPOSITORY" --verify-tag --notes-file release-notes.md
@@ -0,0 +1,25 @@
1
+ __pycache__/
2
+ *.pyc
3
+ .pytest_cache/
4
+ .ruff_cache/
5
+ # runtime data (never belongs in the repo)
6
+ .superboard/
7
+ sandbox/.data/
8
+ sandbox/inbox/gc-threads/
9
+ sandbox/inbox/gc-receipts/
10
+ sandbox/inbox/board-archive.md
11
+ journal/
12
+ usage-log.jsonl
13
+ git-anchor.json
14
+ killed-runs.jsonl
15
+ killed/
16
+ thread-search.sqlite
17
+ board.config.json
18
+ dist/
19
+ # resolver artefact of `uv run --with …` during testing, not a project lock
20
+ uv.lock
21
+ .testrig/
22
+ # browser profile the UI smoke test creates next to the package
23
+ board-smoke/
24
+ # private leak-scan vocabulary (symlink into a private repo) — never publish
25
+ .leakpatterns
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Benjamin Meindl
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,9 @@
1
+ # Where this goes — the long version
2
+
3
+ Tuesday, 8:40. You sit down to three items — not forty. One is a two-option sheet with a recommendation and the single number that actually moves the decision. One is a draft parked at the exact point where your edits carry the most weight. One is a raw idea, deliberately untouched, because the system has learned that's the kind you want to shape yourself. Next to them, a short reading: two things that moved overnight that you'd genuinely want to see. Everything else was researched, built, filed, or consciously not started — each weighed in the open against priorities you set.
4
+
5
+ This didn't take years of working together. It took weeks. Coaching a great hire into this takes months; here the loop runs on days. There is a real onboarding period — it asks too much at first, you correct constantly, and the correcting is the investment. Then the questions change character: "Before I finish this — you killed a similar idea in March because it competed with the launch for your attention. Still true?"
6
+
7
+ And you can always see what it knows. Everything it has learned about working with you sits in plain files you can open and amend in a text editor. When a better model ships, you point it at your folder. By afternoon it works with you like before, but sharper. Flow doesn't reset.
8
+
9
+ Today, Superboard is a board. Step one of exactly this.
@@ -0,0 +1,142 @@
1
+ Metadata-Version: 2.5
2
+ Name: superboard
3
+ Version: 0.1.0
4
+ Summary: A personal task board where every to-do is a standing conversation thread with your agent.
5
+ Project-URL: Homepage, https://github.com/bmeindl/superboard
6
+ Project-URL: Documentation, https://github.com/bmeindl/superboard#readme
7
+ Project-URL: Issues, https://github.com/bmeindl/superboard/issues
8
+ Project-URL: Source, https://github.com/bmeindl/superboard
9
+ Author: Benjamin Meindl
10
+ License-Expression: MIT
11
+ License-File: LICENSE
12
+ Keywords: agent,claude,kanban,personal-task-host,todo
13
+ Classifier: Development Status :: 3 - Alpha
14
+ Classifier: Environment :: Web Environment
15
+ Classifier: Intended Audience :: End Users/Desktop
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Topic :: Office/Business :: Scheduling
18
+ Requires-Python: >=3.10
19
+ Description-Content-Type: text/markdown
20
+
21
+ # Superboard
22
+
23
+ **A local to-do board where every card can stay manual or become a standing
24
+ conversation with a coding agent.** Add ordinary work first; delegate research,
25
+ writing or changes when that helps. The underlying state stays in plain files
26
+ you own.
27
+
28
+ [![leak scan](https://github.com/bmeindl/superboard/actions/workflows/leak-scan.yml/badge.svg?branch=main)](https://github.com/bmeindl/superboard/actions/workflows/leak-scan.yml)
29
+
30
+ ![A fresh Superboard workspace with onboarding separate from ordinary to-dos](https://raw.githubusercontent.com/bmeindl/superboard/v0.1.0/docs/assets/superboard-hero.png)
31
+
32
+ ```sh
33
+ uvx superboard ~/Superboard
34
+ # then open http://localhost:47822
35
+ ```
36
+
37
+ Already use Claude Code? Give it the whole setup job:
38
+
39
+ > Use <https://github.com/bmeindl/superboard> as the Superboard package I want.
40
+ > Read its README, explain what you will run, set it up in `~/Superboard`, start
41
+ > it, and open the local board for me. Do not clone the source into my workspace.
42
+
43
+ Claude Code still uses its existing host permissions and may ask before installing
44
+ `uv` or opening an application. The explicit terminal command above remains the
45
+ portable fallback.
46
+
47
+ ## The one-minute version
48
+
49
+ 1. Open the board. A fresh workspace separates **Getting started** from the empty
50
+ **My to-dos** area where normal work belongs.
51
+ 2. Open **1 · Start here · Meet Superboard** and press **▶ Agent**. It opens the
52
+ local introduction when the runner can access your desktop; otherwise it returns
53
+ the local link. It answers questions in that card and tells you when to mark it done.
54
+ 3. Use **2 · Set up this workspace**, then **3 · Add your first real to-do**.
55
+ The agent adapts the foundation and puts one genuine card under My to-dos.
56
+ 4. The remaining cards each name one outcome—agent/model setup, Cockpit, email
57
+ digest, one routine, Off Duty, night rest or later thread learning—so you can
58
+ complete or skip them independently.
59
+ 5. Add more work whenever. `Enter` creates a manual card; `Cmd/Ctrl+Enter` creates it and
60
+ starts the agent.
61
+ 6. Finish onboarding. The final card archives the setup threads and removes the
62
+ Getting started category.
63
+
64
+ This is not a five-minute setup, and it does not pretend to be. A board becomes
65
+ genuinely useful over weeks, as your own threads accumulate.
66
+
67
+ There is no settings maze. Topics, actions, rituals, context, and skills are
68
+ workspace files. Ask the agent to change them; inspect the diff whenever you
69
+ want. Optional procedural skills can be copied from a separate catalogue one at
70
+ a time, previewed first, and then customized locally.
71
+
72
+ ## What you need
73
+
74
+ - Python 3.10+ and `uv`/`uvx`. The release gates cover macOS and Ubuntu; Windows
75
+ has not been verified and is not supported in this alpha.
76
+ - Claude Code installed and authenticated for the supported default runner.
77
+ - Codex is an experimental macOS runner and uses the CLI bundled with ChatGPT.
78
+ OpenCode is not a supported runner in `0.1.0`.
79
+ - Provider usage: Superboard does not include model access or tokens.
80
+
81
+ The board still opens without an agent CLI, but hand-offs cannot run — and it
82
+ says so: the first screen carries the reason and the ▶ Agent buttons are marked
83
+ rather than silently inert.
84
+
85
+ ## What an agent run can do
86
+
87
+ `▶ Agent` starts the selected CLI in auto mode. The run inherits that CLI's host
88
+ access and configured MCP/provider setup; when the task requires it, the agent can
89
+ edit or commit inside the workspace and may propose machine-wide or outside-workspace
90
+ actions. Superboard does not wrap the CLI in a second approval system. Tell the agent
91
+ what is off-limits, ask it to change its local operating rules, or ask for exact
92
+ terminal handoff commands when an interactive step is needed. The files and git diff
93
+ remain the review surface.
94
+
95
+ ## Why local files?
96
+
97
+ Superboard has no cloud account, database, or sync service. The board, context,
98
+ and learned working rules stay inspectable and portable inside your workspace.
99
+ Changing agent providers does not mean abandoning what the workspace learned.
100
+
101
+ Each `▶ Agent` starts a fresh CLI process. Continuity comes from a resumable
102
+ provider session plus the durable board thread — not from a hidden Superboard
103
+ memory. A warm provider cache may reduce repeated tokens; a cold cache never
104
+ loses work.
105
+
106
+ ## How it works
107
+
108
+ Superboard is the piece that holds your work and coordinates the agents doing it — a personal task host. The **board** is the visible surface — columns, cards, one glance. Each **card** is a task with its own standing thread: the full conversation between you and the agent working it, persistent across weeks. A **runner** executes — it picks up cards you've handed off, works headlessly, and reports back into the thread: results, or a short decision sheet when only you can decide. Underneath: plain local markdown files. No database, no account, no sync. The agent brings the intelligence; the files keep it honest.
109
+
110
+ ## The first weeks
111
+
112
+ Superboard doesn't promise one-minute setup. It promises an honest onboarding — the kind you'd give a strong new hire. Week one, it asks too much: it doesn't know your projects, your people, or which decisions are yours alone. You correct it constantly, and the correcting is the investment — every correction lands in plain files it reads next time, and you can open any of them to see exactly what it thinks it knows. A few weeks in, the questions change character: less "what is this?", more "you killed a similar idea in March because it competed for your attention — still true?" And it compounds with what you already have: Superboard runs on top of your existing agent setup, and the more you bring — skills, context, working habits — the faster it gets good. Starting from zero works too; it just makes the first weeks matter more. Tools that promise instant magic tend to plateau fast. Superboard starts slower — and keeps compounding.
113
+
114
+ ## Agentic first — it grows, and you grow it
115
+
116
+ The mechanics work on day one: board, runner, standing threads, decision sheets, a working skill set — extracted from a system used daily for months. The personalization is what takes weeks. And nothing about it is finished, by design: there is no feature backlog between you and the tool — when you want the cards to work differently, you don't file a request, you tell your agent to rebuild them. The whole system is plain files and readable code, small enough for an agent to navigate and change, with every change reviewable. From the first week it grows toward you: your skills, your rules, what it has learned about how you decide. Every install grows toward its owner — that divergence is the point, not a side effect. And it flows both ways: when your setup grows something good — a skill, a routine, a sharper way of asking — it's built to flow back through ordinary open-source contribution and become part of everyone's next start. That's open source applied to a tool whose job is to learn.
117
+
118
+ ## Where this goes
119
+
120
+ Today, Superboard is a board. The direction is a working morning that starts with three prepared items instead of forty open loops — everything else researched, built, filed, or consciously not started while you were away, each weighed in the open against priorities you set. Questions that get sharper the longer you work together. And because everything it learns lives in inspectable files, changing models doesn't have to mean starting over. That's the target narrative, told honestly as direction — the full version is in [PITCH.md](https://github.com/bmeindl/superboard/blob/v0.1.0/PITCH.md). This board is step one of exactly it.
121
+
122
+ ## Start here, then ask the agent
123
+
124
+ The board and its onboarding cards are the primary product documentation. The
125
+ README deliberately stops at orientation; users should not need to study a
126
+ manual before doing useful work.
127
+
128
+ - [Using Superboard](https://github.com/bmeindl/superboard/blob/v0.1.0/docs/USING-SUPERBOARD.md) — installation, workspace files,
129
+ onboarding behavior, customization, and restart rules.
130
+ - [Development and test rigs](https://github.com/bmeindl/superboard/blob/v0.1.0/docs/DEVELOPMENT.md) — sandbox, fresh-wheel test,
131
+ and privacy gates.
132
+ - [Architecture](https://github.com/bmeindl/superboard/blob/v0.1.0/superboard/ARCHITEKTUR.md) — contracts and trust boundaries for
133
+ agents and contributors.
134
+ - [Product direction](https://github.com/bmeindl/superboard/blob/v0.1.0/PITCH.md) · [Support posture](https://github.com/bmeindl/superboard/blob/v0.1.0/SUPPORT.md)
135
+
136
+ Superboard is alpha-stage personal tooling, not a hosted multi-user project
137
+ manager or a supported service. The point is a small, understandable frame that
138
+ your own agent and workspace can grow into.
139
+
140
+ ## License
141
+
142
+ MIT — see [LICENSE](https://github.com/bmeindl/superboard/blob/v0.1.0/LICENSE).
@@ -0,0 +1,122 @@
1
+ # Superboard
2
+
3
+ **A local to-do board where every card can stay manual or become a standing
4
+ conversation with a coding agent.** Add ordinary work first; delegate research,
5
+ writing or changes when that helps. The underlying state stays in plain files
6
+ you own.
7
+
8
+ [![leak scan](https://github.com/bmeindl/superboard/actions/workflows/leak-scan.yml/badge.svg?branch=main)](https://github.com/bmeindl/superboard/actions/workflows/leak-scan.yml)
9
+
10
+ ![A fresh Superboard workspace with onboarding separate from ordinary to-dos](https://raw.githubusercontent.com/bmeindl/superboard/v0.1.0/docs/assets/superboard-hero.png)
11
+
12
+ ```sh
13
+ uvx superboard ~/Superboard
14
+ # then open http://localhost:47822
15
+ ```
16
+
17
+ Already use Claude Code? Give it the whole setup job:
18
+
19
+ > Use <https://github.com/bmeindl/superboard> as the Superboard package I want.
20
+ > Read its README, explain what you will run, set it up in `~/Superboard`, start
21
+ > it, and open the local board for me. Do not clone the source into my workspace.
22
+
23
+ Claude Code still uses its existing host permissions and may ask before installing
24
+ `uv` or opening an application. The explicit terminal command above remains the
25
+ portable fallback.
26
+
27
+ ## The one-minute version
28
+
29
+ 1. Open the board. A fresh workspace separates **Getting started** from the empty
30
+ **My to-dos** area where normal work belongs.
31
+ 2. Open **1 · Start here · Meet Superboard** and press **▶ Agent**. It opens the
32
+ local introduction when the runner can access your desktop; otherwise it returns
33
+ the local link. It answers questions in that card and tells you when to mark it done.
34
+ 3. Use **2 · Set up this workspace**, then **3 · Add your first real to-do**.
35
+ The agent adapts the foundation and puts one genuine card under My to-dos.
36
+ 4. The remaining cards each name one outcome—agent/model setup, Cockpit, email
37
+ digest, one routine, Off Duty, night rest or later thread learning—so you can
38
+ complete or skip them independently.
39
+ 5. Add more work whenever. `Enter` creates a manual card; `Cmd/Ctrl+Enter` creates it and
40
+ starts the agent.
41
+ 6. Finish onboarding. The final card archives the setup threads and removes the
42
+ Getting started category.
43
+
44
+ This is not a five-minute setup, and it does not pretend to be. A board becomes
45
+ genuinely useful over weeks, as your own threads accumulate.
46
+
47
+ There is no settings maze. Topics, actions, rituals, context, and skills are
48
+ workspace files. Ask the agent to change them; inspect the diff whenever you
49
+ want. Optional procedural skills can be copied from a separate catalogue one at
50
+ a time, previewed first, and then customized locally.
51
+
52
+ ## What you need
53
+
54
+ - Python 3.10+ and `uv`/`uvx`. The release gates cover macOS and Ubuntu; Windows
55
+ has not been verified and is not supported in this alpha.
56
+ - Claude Code installed and authenticated for the supported default runner.
57
+ - Codex is an experimental macOS runner and uses the CLI bundled with ChatGPT.
58
+ OpenCode is not a supported runner in `0.1.0`.
59
+ - Provider usage: Superboard does not include model access or tokens.
60
+
61
+ The board still opens without an agent CLI, but hand-offs cannot run — and it
62
+ says so: the first screen carries the reason and the ▶ Agent buttons are marked
63
+ rather than silently inert.
64
+
65
+ ## What an agent run can do
66
+
67
+ `▶ Agent` starts the selected CLI in auto mode. The run inherits that CLI's host
68
+ access and configured MCP/provider setup; when the task requires it, the agent can
69
+ edit or commit inside the workspace and may propose machine-wide or outside-workspace
70
+ actions. Superboard does not wrap the CLI in a second approval system. Tell the agent
71
+ what is off-limits, ask it to change its local operating rules, or ask for exact
72
+ terminal handoff commands when an interactive step is needed. The files and git diff
73
+ remain the review surface.
74
+
75
+ ## Why local files?
76
+
77
+ Superboard has no cloud account, database, or sync service. The board, context,
78
+ and learned working rules stay inspectable and portable inside your workspace.
79
+ Changing agent providers does not mean abandoning what the workspace learned.
80
+
81
+ Each `▶ Agent` starts a fresh CLI process. Continuity comes from a resumable
82
+ provider session plus the durable board thread — not from a hidden Superboard
83
+ memory. A warm provider cache may reduce repeated tokens; a cold cache never
84
+ loses work.
85
+
86
+ ## How it works
87
+
88
+ Superboard is the piece that holds your work and coordinates the agents doing it — a personal task host. The **board** is the visible surface — columns, cards, one glance. Each **card** is a task with its own standing thread: the full conversation between you and the agent working it, persistent across weeks. A **runner** executes — it picks up cards you've handed off, works headlessly, and reports back into the thread: results, or a short decision sheet when only you can decide. Underneath: plain local markdown files. No database, no account, no sync. The agent brings the intelligence; the files keep it honest.
89
+
90
+ ## The first weeks
91
+
92
+ Superboard doesn't promise one-minute setup. It promises an honest onboarding — the kind you'd give a strong new hire. Week one, it asks too much: it doesn't know your projects, your people, or which decisions are yours alone. You correct it constantly, and the correcting is the investment — every correction lands in plain files it reads next time, and you can open any of them to see exactly what it thinks it knows. A few weeks in, the questions change character: less "what is this?", more "you killed a similar idea in March because it competed for your attention — still true?" And it compounds with what you already have: Superboard runs on top of your existing agent setup, and the more you bring — skills, context, working habits — the faster it gets good. Starting from zero works too; it just makes the first weeks matter more. Tools that promise instant magic tend to plateau fast. Superboard starts slower — and keeps compounding.
93
+
94
+ ## Agentic first — it grows, and you grow it
95
+
96
+ The mechanics work on day one: board, runner, standing threads, decision sheets, a working skill set — extracted from a system used daily for months. The personalization is what takes weeks. And nothing about it is finished, by design: there is no feature backlog between you and the tool — when you want the cards to work differently, you don't file a request, you tell your agent to rebuild them. The whole system is plain files and readable code, small enough for an agent to navigate and change, with every change reviewable. From the first week it grows toward you: your skills, your rules, what it has learned about how you decide. Every install grows toward its owner — that divergence is the point, not a side effect. And it flows both ways: when your setup grows something good — a skill, a routine, a sharper way of asking — it's built to flow back through ordinary open-source contribution and become part of everyone's next start. That's open source applied to a tool whose job is to learn.
97
+
98
+ ## Where this goes
99
+
100
+ Today, Superboard is a board. The direction is a working morning that starts with three prepared items instead of forty open loops — everything else researched, built, filed, or consciously not started while you were away, each weighed in the open against priorities you set. Questions that get sharper the longer you work together. And because everything it learns lives in inspectable files, changing models doesn't have to mean starting over. That's the target narrative, told honestly as direction — the full version is in [PITCH.md](https://github.com/bmeindl/superboard/blob/v0.1.0/PITCH.md). This board is step one of exactly it.
101
+
102
+ ## Start here, then ask the agent
103
+
104
+ The board and its onboarding cards are the primary product documentation. The
105
+ README deliberately stops at orientation; users should not need to study a
106
+ manual before doing useful work.
107
+
108
+ - [Using Superboard](https://github.com/bmeindl/superboard/blob/v0.1.0/docs/USING-SUPERBOARD.md) — installation, workspace files,
109
+ onboarding behavior, customization, and restart rules.
110
+ - [Development and test rigs](https://github.com/bmeindl/superboard/blob/v0.1.0/docs/DEVELOPMENT.md) — sandbox, fresh-wheel test,
111
+ and privacy gates.
112
+ - [Architecture](https://github.com/bmeindl/superboard/blob/v0.1.0/superboard/ARCHITEKTUR.md) — contracts and trust boundaries for
113
+ agents and contributors.
114
+ - [Product direction](https://github.com/bmeindl/superboard/blob/v0.1.0/PITCH.md) · [Support posture](https://github.com/bmeindl/superboard/blob/v0.1.0/SUPPORT.md)
115
+
116
+ Superboard is alpha-stage personal tooling, not a hosted multi-user project
117
+ manager or a supported service. The point is a small, understandable frame that
118
+ your own agent and workspace can grow into.
119
+
120
+ ## License
121
+
122
+ MIT — see [LICENSE](https://github.com/bmeindl/superboard/blob/v0.1.0/LICENSE).
@@ -0,0 +1,21 @@
1
+ # Releases
2
+
3
+ Public version history of Superboard. The public number (`pyproject.toml`, what PyPI
4
+ and `uvx` show) moves only at deliberate releases and follows the usual reading:
5
+ patch = fixes, minor = something new, major = something you should read about
6
+ before upgrading. `Build` names the internal board stand that ships inside a release
7
+ — that number counts every change by size and is not a stability promise.
8
+ `CHANGELOG.md` inside the package is that internal build history.
9
+
10
+ ## [0.1.0] — 2026-08-26 · first public alpha
11
+
12
+ - A local Now / Next / Backlog board where an ordinary to-do can stay manual or
13
+ become a standing conversation with an agent.
14
+ - Thirteen concrete onboarding cards sit separately from an empty My to-dos area;
15
+ the agent-led introduction, first genuine task, runner setup, help, Cockpit
16
+ actions, and optional routines each have one clear outcome.
17
+ - Claude Code is the supported default runner; Codex on macOS is experimental.
18
+ - Plain Markdown and JSON remain the source of truth—no hosted account, database,
19
+ or bundled model access.
20
+ - Release gates cover the exact wheel, macOS and Ubuntu smoke tests, a real-agent
21
+ confirmation journey, and private-vocabulary leak scans.
@@ -0,0 +1,87 @@
1
+ # Releasing Superboard
2
+
3
+ **This is guidance, not law — a living document.** It collects what we currently
4
+ think a good release looks like: the technical steps and the product checks around
5
+ them. Read it before a release, pick what applies with judgment, skip what does not
6
+ (say so in the release notes' working thread), and — the one real rule — **leave it
7
+ better than you found it**: every release that teaches something edits this file in
8
+ the same commit. The owner takes the calls marked **OWNER**.
9
+
10
+ Why guidance: a public release is a *promise*, not a version bump. The internal board
11
+ counts every change by size (`Build 6.x`, see `superboard/CHANGELOG.md`); the public
12
+ number (`pyproject.toml`, `RELEASES.md`) moves only when we consciously say "this is
13
+ what a stranger gets now".
14
+
15
+ ## 0 · Decide that a release is due
16
+
17
+ - **OWNER** picks the number and the step: patch = fixes only · minor = something new
18
+ a user notices · major = something to read before upgrading.
19
+ - Write down, in one sentence, what this release is *for* — it becomes the first line
20
+ of the release notes.
21
+
22
+ ## 1 · Bring the public projection up to date
23
+
24
+ - From the origin board, run its port status (`port_to_superboard.py`): classify every
25
+ reported file as launch-relevant, intentionally divergent, superseded, or deferred.
26
+ Port launch-relevant changes and record the rest; a raw count is not a release gate.
27
+ - Compare both build numbers before `sync-version`. Run it only when the origin is
28
+ actually ahead; never use it to downgrade a candidate with independent fixes.
29
+ - Run `scripts/leak_scan.py --history` on purpose; the hooks are a backstop.
30
+
31
+ ## 2 · Test what a stranger actually gets
32
+
33
+ - Fresh install from a clean environment using the *built artifact*, not the source
34
+ tree: `scripts/testrig.sh fresh`.
35
+ - Installed smoke: `scripts/smoke-installed.sh`, plus green macOS smoke on the release
36
+ commit.
37
+ - **E2E by hand:** empty workspace → first run → first item → agent reply →
38
+ thread → archive. `scripts/record-installed-e2e.py` records the proof.
39
+ - Every supported OS/Python claimed in the README gets at least the smoke; remove
40
+ untested claims.
41
+
42
+ ## 3 · Product surface — does the outside still match the inside?
43
+
44
+ - Read the README top to bottom as a stranger and run every command verbatim.
45
+ - Compare screenshots and demos with the E2E proof. Changed UI means re-recording.
46
+ - Recheck `PITCH.md`, `SUPPORT.md`, package metadata, and the sandbox.
47
+
48
+ ## 4 · Write the release
49
+
50
+ - From the origin board: `port_to_superboard.py release <x.y.z>` sets the public
51
+ version and prepares the `RELEASES.md` entry.
52
+ - Curate the notes into 3–8 user-facing lines; delete the raw internal headings.
53
+ - **OWNER** reads the notes and README diff. This is the go/no-go.
54
+
55
+ ## 5 · Publish
56
+
57
+ - Before the first release, create the GitHub `pypi` environment with required manual
58
+ approval and register a PyPI pending publisher for the GitHub owner reported by
59
+ `gh repo view --json nameWithOwner`, repository `superboard`, workflow
60
+ `publish-to-pypi.yml`, environment `pypi`.
61
+ - Commit (`chore(release): v<x.y.z>`), tag `v<x.y.z>`, and push only after the explicit
62
+ go. Never push directly to main.
63
+ - Use a public no-reply identity for commit and annotated-tag metadata. The history
64
+ leak gate scans commit objects as well as blobs; inspect its author/committer output.
65
+ - The tag workflow builds, checks, installs, smokes, and publishes the same artifact via
66
+ Trusted Publishing. Never use a local PyPI token.
67
+ - Verify from outside: clean environment, `uvx superboard --version`, first run,
68
+ PyPI page, GitHub release page, README images and links.
69
+
70
+ ## 6 · After
71
+
72
+ - Announce through the launch channels selected for this release.
73
+ - Watch the first days for issues, install failures, and CI failures.
74
+ - Put anything learned about the ritual back into this file.
75
+
76
+ ## Hard lines
77
+
78
+ No release with an unresolved launch-relevant port item, a red installed smoke, or a
79
+ README claim nobody verified this round.
80
+
81
+ ## Changelog of this document
82
+
83
+ - 2026-08-25 · first version; deliberately expected to evolve after the first release.
84
+ - 2026-08-26 · added the concrete pending-publisher identity, approval environment,
85
+ and same-artifact build/smoke/publish contract.
86
+ - 2026-08-26 · added commit-metadata privacy and curated GitHub release notes after
87
+ the final launch challenge found that clean blobs were not the whole public surface.
@@ -0,0 +1,14 @@
1
+ # Security policy
2
+
3
+ Superboard is an alpha desktop tool that runs local agent CLIs with the permissions
4
+ of the account and machine that start it. Review the workspace instructions before
5
+ using auto mode, and do not put secrets in `board.md` or a public issue.
6
+
7
+ ## Reporting a vulnerability
8
+
9
+ Please use the repository's **Security → Advisories → Report a vulnerability** flow on GitHub.
10
+ Include the affected version, reproduction steps, and the impact. Do not open a public
11
+ issue until the report has been assessed.
12
+
13
+ Security reports for the current `0.1.x` alpha line are accepted. Fix timelines depend
14
+ on severity; there is no separate long-term-support branch yet.