Controlled build room for Codi/Codex work.
Tagline: Because talking is not building.
Shipyard turns messy ideas into tracked build tasks, shows what the crew is doing, requires Boss approval before shipping, saves decisions, and works from phone or desktop.
The Boss should be able to run the build crew from anywhere:
Drop messy idea
Hermes catches it
Shipyard tracks it
Codi/Codex builds it
Gate asks Boss for approval
Hangar remembers why
Shipyard is not supposed to be another chat thread. It is a small construction site with a front desk, floor, approval gate, and memory.
| Role | Name | Job |
|---|---|---|
| Boss | User | Final authority, priorities, approvals, taste, ship/kill decisions |
| Hermes | Herman the worm / @Professor_Hermbot |
Mobile front desk and coordinator |
| Codi | ChatGPT / Codex / @CodiShipyardBot |
Build brain, coding worker, GitHub/Codex handoff |
| Shipyard | This app | Control room: Inlet, Floor, Gate, Hangar |
| GitHub | Repo/issues/commits | Ledger and source of truth for code history |
| Cloudflare | Worker/bridge | Always-online doorway for mobile workflows |
Core rule:
Boss decides.
Hermes coordinates.
Codi builds.
Shipyard tracks.
GitHub records.
| Area | Status | Notes |
|---|---|---|
| Static PWA | Working | MGP v1.15; index.html, manifest.json, sw.js, icons |
| Local board | Working | Browser localStorage key: shipyard.local.v1; card lifecycle and trails work |
| GitHub intake | Working | Create Codi issue created real issue #25 during smoke test |
| Local bridge | Working | /health passed with repo orangetrd-byte/Shipyard |
| Mobile install | Working | PWA shell and phone layout exist |
| Hermes Telegram | Parked prototype | Future-update lane; not part of current core build |
| Codi Telegram | Parked | Do not build further until Telegram lane is active again |
| Cloudflare bridge | Parked | Future always-online doorway; local/core board comes first |
| Approval model | Working locally | Cards stop in You're OK; Saved Stuff only after Looks Good |
| Runner visibility | Not built yet | Logs, touched files, diff preview are future |
| Test issue cleanup | Done | Test issue #25 closed as not planned |
Current phase from CURRENT_PHASE.md:
Phase 1.15: Core intake and board lifecycle stable
Current practical focus:
- Keep the app local-first and mobile-friendly.
- Keep MGP visible in version/build information.
- Keep Boss approval explicit before future merge/deploy automation.
- Keep
Create Codi issueandKeep on boardimpossible to confuse. - Keep Telegram and Cloudflare parked until they are deliberately active again.
- Improve the core Shipyard board before adding more doorways.
Where rough ideas land.
Inputs may be typed notes, voice-note summaries, screenshots, pasted code, or quick mobile thoughts. The point is no blank page and no lost idea.
Current:
Keep on boardcreates a local card on this device.Create Codi issuecreates a real GitHub issue through the bridge or fallback.- GitHub issue bodies now use real line breaks.
- Smoke test issue
#25proved the intake path and was closed.
Target:
- Every mobile idea becomes a visible Shipyard card.
- Screenshots/attachments become task context.
- Future always-online inlet can use Telegram/Cloudflare when that lane is reopened.
Where active work is visible.
Current:
- Board has lanes.
- GitHub issues can blend into Workshop Waiting.
- Local cards show
Source: This device. - Refreshed GitHub cards show as GitHub issues.
- Local cards can move Waiting -> Being Built -> You're OK.
Target:
- Show Codi/Codex status.
- Show touched files.
- Show live logs.
- Show whether work is clean, blocked, or ready for Gate.
Approval checkpoint.
Current:
- Shipyard UI has You're OK approval area.
- Local cards stop for Boss approval.
Looks Goodsaves to Hangar/Saved Stuff.Needs Changessends work back to Waiting.Toss Itremoves the card and logs the decision.
Target:
- Side-by-side diff.
- Boss buttons: Ship It / Tweak / Scrap.
- Auto-merge only after explicit Ship It.
- Comment back to Codi/Codex when tweak is requested.
Project memory.
Current:
- Local Saved Stuff exists.
- Approved local cards save a short decision trail.
- Telegram history JSON exists but is parked future work.
Target:
- Decision log.
- Reusable workflow templates.
- Saved diffs/snippets/reference links.
- Search by keyword, tag, date.
Telegram is parked as future-update work. Keep this section for context, but do not treat it as the active build lane.
Use two separate bots and two separate tokens.
| Bot | Telegram | Env Var | Purpose |
|---|---|---|---|
| Hermes | @Professor_Hermbot |
HERMES_TELEGRAM_TOKEN |
Mobile front desk, coordination, Inlet/Floor/Gate/Hangar |
| Codi | @CodiShipyardBot |
CODI_TELEGRAM_TOKEN |
Build handoff, GitHub issue creation, Codex dispatch |
Do not use the old generic token name anymore:
[Environment]::SetEnvironmentVariable("TELEGRAM_BOT_TOKEN",$null,"User")Do not paste real tokens into chat or repo files.
Start Hermes local polling prototype:
cd C:\Users\Dad\Documents\GitHub\Shipyard
.\start-hermes.ps1Start the local Codi/GitHub bridge:
cd C:\Users\Dad\Documents\GitHub\Shipyard
.\start-shipyard-bridge.ps1Install local Codi bridge at login:
cd C:\Users\Dad\Documents\GitHub\Shipyard
.\install-shipyard-bridge-startup.ps1Hermes prototype commands:
/inlet <text> Create a rough item
/floor List active items
/hangar [query] Search or list archived items
Current button:
Promote to Gate
Codi commands are not built yet. Proposed:
/issue <text> Create tracked GitHub/Codex task
/status Check bridge/build status
/help List commands
Current repo shape:
Shipyard/
index.html
manifest.json
sw.js
icons/
shipyard-bridge.mjs
start-shipyard-bridge.ps1
install-shipyard-bridge-startup.ps1
start-hermes.ps1
telegram/
bot.js
state.js
bridge.js
commands/
inlet.js
floor.js
gate.js
hangar.js
Browser state:
{
"tasks": [],
"memory": [],
"events": []
}Browser storage key:
shipyard.local.v1
Telegram state files:
telegram/telegram_inbox.json
telegram/telegram_approvals.json
telegram/telegram_history.json
- Boss approval is required before future merge/deploy automation.
- No API keys or bot tokens in browser code.
- No secrets committed to repo.
- Keep local-first behavior working.
- Keep
shipyard.local.v1compatible unless a migration is deliberate. - Keep MGP visible in build/version information.
- Do not collapse Hermes and Codi into one token or one job.
- Do not make mobile use depend permanently on PowerShell polling.
Status: done
- Phone/PWA can create a real GitHub issue.
- Bridge
/healthpasses. -
manifest.json,sw.js, andindex.htmlsmoke checks pass. - GitHub issue body formatting uses real line breaks.
- Test issue
#25was closed after verification.
Status: in progress
- Rename Drop Idea actions to
Create Codi issueandKeep on board. - Show source on local cards.
- Keep GitHub issue cards visually separate.
- Move local cards through Waiting, Being Built, You're OK, and Saved Stuff.
- Save approved cards with a short trail.
- Decide whether old/local test cards should have an archive/cleanup path.
- Decide whether GitHub issue cards need board actions or should stay read-only links.
Status: future
- Show Codex/Codi run status.
- Show touched files.
- Show live log tail.
- Show diff preview.
- Require Gate approval before merge/deploy.
Status: parked
- Hermes
/inletitems appear in Shipyard Inlet/Workshop - Gate promotions appear in You're OK
- Hangar decisions sync into Saved Stuff
- Avoid duplicate cards between Telegram JSON, localStorage, and GitHub issues
- Should
@Professor_Hermbotkeep the visible name Herman, Hermes, or Herman/Hermes? - Should Codi create GitHub issues directly or queue them for Boss approval first?
- Should Hangar live in localStorage, repo docs, GitHub issues, or all three?
- What is the first real task that proves this saves time instead of creating homework?
Every phase must pass this:
- Build it in one session or less.
- Use it for two real tasks.
- Kill it if it does not save time.
No roadmap romance. If it feels like homework, it dies.