Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
258 commits
Select commit Hold shift + click to select a range
e83c1fe
Don't stop a session in bypass for routine work
enowdev Nov 4, 2026
1b397e6
Tell GOA of a worker's turn in one line, with its real last message
enowdev Nov 4, 2026
6deb5a8
Merge fix/sessions-survive-update-2
enowdev Nov 4, 2026
d2cdcab
Merge fix/canvas-render-watched-host
enowdev Nov 4, 2026
eca4492
Merge feat/guide-files
enowdev Nov 4, 2026
69333a1
Merge feat/bypass-policy
enowdev Nov 4, 2026
fdf6602
Merge one line per turn, and record the built-in plugin that asks in …
enowdev Nov 4, 2026
25aad13
Run a session's config on OpenCode 2, whose background server ignored it
enowdev Nov 4, 2026
9f15f49
Let the build panel and a session's notice be closed
enowdev Nov 4, 2026
6a9723c
Open the Browser on enowx.id
enowdev Nov 4, 2026
089cb69
Add designshare: a design's bundle and its checks
enowdev Nov 4, 2026
dafb44e
Add enowX UI's server to the cloud
enowdev Nov 4, 2026
da7b58d
Never lose a team's item that waited
enowdev Nov 4, 2026
413dc80
Keep decide trim from changing what a command does
enowdev Nov 4, 2026
ee6da22
Add library methods: prepare, publish, status, withdraw
enowdev Nov 4, 2026
d0cd439
Say what an SSH command said on stdout when its stderr is empty
enowdev Nov 4, 2026
723cda7
Add sharing a design to the community library
enowdev Nov 4, 2026
8a9edb7
Confirm a program is the agent before using it
enowdev Nov 4, 2026
f261743
Document enowX UI, and test its sweep
enowdev Nov 4, 2026
4ff2182
Keep the library's menu current, delete drafts, start updates from wh…
enowdev Nov 4, 2026
e056619
Run GOD of Agents on OpenCode, held by its config
enowdev Nov 4, 2026
37b9799
Let a design be reported for showing private data
enowdev Nov 4, 2026
c99ecfa
Lay out Claude Platform's record and interfaces
enowdev Nov 4, 2026
1d9de83
Stub Claude Platform's seams and let a transcript say its cost
enowdev Nov 4, 2026
10ceb17
Add Project Docs' core: metadata in the body, catalog, staleness, the…
enowdev Nov 4, 2026
bdef54b
Pick a config from the new tab menu
enowdev Nov 4, 2026
f7998ad
Keep the build panel's body clear of its scrollbar
enowdev Nov 4, 2026
22316c6
Add Project Docs templates for product, UX, planning and launch
enowdev Nov 4, 2026
0504b77
Keep the library in the cloud's bucket, under its own prefix
enowdev Nov 4, 2026
34c8c47
Add a stand-in Messages API for the agent's tests
enowdev Nov 4, 2026
37cc2fe
Give Claude Platform its file tools
enowdev Nov 4, 2026
708bb0e
Give Claude Platform Glob and Grep in Go alone
enowdev Nov 4, 2026
96f02f3
Give Claude Platform its Bash tool
enowdev Nov 4, 2026
bf6c9e2
Add Claude Platform's AskUserQuestion and TodoWrite tools
enowdev Nov 4, 2026
bea06d1
Add Claude Platform's permission engine
enowdev Nov 4, 2026
657fed8
Merge Claude Platform's tools and permission engine
enowdev Nov 4, 2026
ffe891c
Bring a sleeping session back for what is sent to it
enowdev Nov 4, 2026
5ce933a
Bring an ended session back for its queued task
enowdev Nov 4, 2026
70bd042
Keep hibernation off a session with a task under way
enowdev Nov 4, 2026
54d760a
Say asleep on GOA's board and in a blocked report
enowdev Nov 4, 2026
0bedb26
Connect Claude Platform to MCP servers
enowdev Nov 4, 2026
6d16c69
Merge Claude Platform's MCP client
enowdev Nov 4, 2026
1deda1b
Let the stand-in API send blocks whole, for fallbacks
enowdev Nov 4, 2026
faf9c78
Build Claude Platform's loop on the Messages API
enowdev Nov 4, 2026
f54fc95
Test the loop end to end against the stand-in API
enowdev Nov 4, 2026
f41b1be
Merge Claude Platform's loop and the stand-in API
enowdev Nov 4, 2026
786cabf
Say when a session's real model differs from what it started on
enowdev Nov 4, 2026
2ec950f
Say what a render or a Browser needs of the app
enowdev Nov 4, 2026
70b265d
Check send to a hibernated session from the command line
enowdev Nov 4, 2026
fde432f
Record the protocol's additions for sleeping sessions
enowdev Nov 4, 2026
631044f
Hand Claude Platform's events to the session's daemon
enowdev Nov 4, 2026
55268d4
Add Claude Platform's terminal and its command
enowdev Nov 4, 2026
bc44fa2
Add Claude Platform as a built-in agent
enowdev Nov 4, 2026
a280b2f
Read Claude Platform's conversations for the chat
enowdev Nov 4, 2026
190bc42
Add a daemon method for Claude Platform's system prompt
enowdev Nov 4, 2026
0122788
Count Claude Platform's tokens from its record
enowdev Nov 4, 2026
e31fd5e
Draw Markdown still arriving without parsing it whole
enowdev Nov 4, 2026
719db80
Lend Claude Platform its key from the vault
enowdev Nov 4, 2026
cc90aeb
Give Claude Platform's chat streaming, a cost chip and key notices
enowdev Nov 4, 2026
6966c8a
Add Claude Platform's sheet of API keys and system prompt
enowdev Nov 4, 2026
79bfb61
Open Claude Platform's sessions on the chat and wire its sheet
enowdev Nov 4, 2026
1412c94
Document Claude Platform's chat and sheet
enowdev Nov 4, 2026
e359117
Document Claude Platform
enowdev Nov 4, 2026
9799f70
Test which credential an agent's key is picked from
enowdev Nov 4, 2026
d72da02
Merge Claude Platform's terminal and command
enowdev Nov 4, 2026
55723a4
Format the sheet's tests
enowdev Nov 4, 2026
15554ee
Keep "always allow" from allowing every command, and obey hooks fully
enowdev Nov 4, 2026
9a1ed9a
Add Project Docs templates for the technical areas
enowdev Nov 4, 2026
577cde2
Test that every Project Docs template is complete and its links resolve
enowdev Nov 4, 2026
07aee81
Read a project's planned tasks, criteria and what a task's prompt car…
enowdev Nov 4, 2026
f731570
Find a project's rules however its folder is reached
enowdev Nov 4, 2026
214ad39
Merge sleeping sessions into release/next
enowdev Nov 4, 2026
83f15e8
List sync conflicts without their versions' data
enowdev Nov 4, 2026
378e8d6
Merge the vault's audit log by its lines, and settle its conflicts
enowdev Nov 4, 2026
694e8ef
Do nothing on a sync when no file changed
enowdev Nov 4, 2026
915cab0
Wait for a session by its events, not the list
enowdev Nov 4, 2026
d42711f
Follow a watched host's sessions by events
enowdev Nov 4, 2026
b04b2a4
Back off from a host whose connections drop as they come up
enowdev Nov 4, 2026
fc271f7
Say how logs merge and how little an idle sync does
enowdev Nov 4, 2026
8a5c830
Let Claude Platform's cost and key notes wrap, and test the vault in …
enowdev Nov 4, 2026
a9b707b
Add enowx-app profile for the running app and daemon
enowdev Nov 4, 2026
7f950e0
Add Project Docs' skills and what RAG embeds of a document
enowdev Nov 4, 2026
61c4c0c
Give agents Project Docs: feature, skills, the Notes page's read-only…
enowdev Nov 4, 2026
2942c04
Embed attached documents without their records and template prompts
enowdev Nov 4, 2026
ec62cfa
Document Project Docs
enowdev Nov 4, 2026
3e32d3e
Merge Claude Platform's chat, cost chip and key sheet
enowdev Nov 4, 2026
24e5525
Keep every menu, select and pop-up list in the window
enowdev Nov 4, 2026
918c1e1
Close a pop-up when what it belongs to goes away
enowdev Nov 4, 2026
7322e7b
Close the chat's slash menu on a click outside it
enowdev Nov 4, 2026
0222654
Check rules at each prompt and keep what each session got
enowdev Nov 4, 2026
e6d9ae5
Say in a session's header whether its rules arrived
enowdev Nov 4, 2026
68cf3a9
Hand tasks over from Project Docs, and read a project beside the board
enowdev Nov 4, 2026
b2f6d8c
Describe GOD of Agents' tasks from Project Docs
enowdev Nov 4, 2026
401aeee
Don't name a release in the sync protocol's comment
enowdev Nov 4, 2026
ce83208
Merge rules reaching agents into release/next
enowdev Nov 4, 2026
6294075
Merge skills, guide and docs of Project Docs
enowdev Nov 4, 2026
6931f6b
Merge GOD of Agents' tasks from Project Docs
enowdev Nov 4, 2026
b133d82
Add what is left to write in a project, and template stripping
enowdev Nov 4, 2026
a5c62e6
Export a Project Docs project into a repository
enowdev Nov 4, 2026
e45804e
Hold agents to proposals for approved Project Docs
enowdev Nov 4, 2026
e15080e
Add the docs command line and MCP tools
enowdev Nov 4, 2026
1512dce
Check gaps and area pages on real packs
enowdev Nov 4, 2026
12400c4
Merge Project Docs' command line, write guard and repo export
enowdev Nov 4, 2026
2f60028
Add the Project Docs view: new project, summary and document strip
enowdev Nov 4, 2026
aed96d7
Give Project Docs a hook above the Notes page
enowdev Nov 4, 2026
d3344e3
Wire Project Docs into the app's Notes page
enowdev Nov 4, 2026
f8f881a
Use one helper to load a Project Docs project
enowdev Nov 4, 2026
ca7514c
Propose an agent's renaming of an approved document
enowdev Nov 4, 2026
3675cb7
Test that a document's sync keeps what makes it approved honest
enowdev Nov 4, 2026
a0d50dc
Keep catching GOA's workers up on every poll of a watched host
enowdev Nov 4, 2026
f7c7ea4
Keep the app's state fields' alignment as it was
enowdev Nov 4, 2026
7b5a465
Add comments, notifications, numbers and announced picks to the library
enowdev Nov 4, 2026
462bb7b
Make a short video of a moving design as it's published
enowdev Nov 4, 2026
596be66
Document the library's community
enowdev Nov 4, 2026
60bcf01
Format the app's state fields
enowdev Nov 4, 2026
8e7a6d6
Merge the library's community stream
enowdev Nov 4, 2026
0f0b513
Merge Project Docs' view in the Notes page
enowdev Nov 4, 2026
7c025c5
Wire export to repo in the app, listing what the daemon will write
enowdev Nov 4, 2026
e2028ba
Return from wait only at a turn's true end
enowdev Nov 4, 2026
485f42f
Merge Claude Platform's place in enowX: preset, chat reader, tokens, …
enowdev Nov 4, 2026
930623a
Leave a pop-up list that fits outside any scroller
enowdev Nov 4, 2026
8eaedff
Open the composer's menu in its test on a composer already drawn
enowdev Nov 4, 2026
3d99f0c
Merge sync.conflicts and idle traffic into release/next
enowdev Nov 4, 2026
227539f
Join up Claude Platform's agent with enowX's side
enowdev Nov 4, 2026
e4a66bd
Merge dropdowns, popups and menus staying in the window into release/…
enowdev Nov 4, 2026
d8ad107
Let a host read the community library, and keep sending to the app's …
enowdev Nov 4, 2026
03317c3
Add the community library to the command line and agents' tools
enowdev Nov 4, 2026
5d899f9
Add browsing the community library to the app
enowdev Nov 4, 2026
21e55a3
Document browsing the library and what keeps agents from publishing
enowdev Nov 4, 2026
5ddeb5b
Merge browsing the library in the app and for agents
enowdev Nov 4, 2026
bf07322
End an unslop's region agents with its run
enowdev Nov 4, 2026
7a8d400
Start a page's agent anew when its conversation left with its session
enowdev Nov 4, 2026
d928867
Say which code allocates in a profile, and walk pages without drawing
enowdev Nov 4, 2026
9ee584b
Attach a session's terminal when it shows, and leave it out of sight
enowdev Nov 4, 2026
052c8dd
Draw a long page's layers on asking
enowdev Nov 4, 2026
fdb5d36
Let go of conversations with no chat left to ask
enowdev Nov 4, 2026
92fb3b6
Return memory to the system after a burst, and bound the Go heap
enowdev Nov 4, 2026
b2a0b79
Add creators' profiles, open for work, likes, collections and follows
enowdev Nov 4, 2026
62a27cf
Keep who contributed to enowX, for the library's badge
enowdev Nov 4, 2026
b2f69ca
Let a creator take their data out of the library, or delete it
enowdev Nov 4, 2026
ec8e183
Document the library's creators
enowdev Nov 4, 2026
a778438
Look at processes once for a restart plan, and only for a daemon left…
enowdev Nov 4, 2026
03742b9
Ask other hosts only as often as what shows needs
enowdev Nov 4, 2026
2bb172b
Look at ports and processes less when sessions rest
enowdev Nov 4, 2026
c5eeb69
Add what people take from a design: code, skills, app links
enowdev Nov 4, 2026
9097ca6
Answer a design's code, copy, reference and skill by each version's l…
enowdev Nov 4, 2026
c01fdd8
Take designs from the library on a host: copies, references, skills
enowdev Nov 4, 2026
4d0e1f1
Add library open, ref and skill for the command line and agents
enowdev Nov 4, 2026
415a655
Open enowx:// links in the app, and say where a copied canvas came from
enowdev Nov 4, 2026
1c43794
Document taking designs from enowX UI
enowdev Nov 4, 2026
c5e9df7
Bound the canvas pictures held in memory
enowdev Nov 4, 2026
7b24931
Let go of the Canvas page's web view and pictures once left
enowdev Nov 4, 2026
0abf493
Refuse tool inputs that readers would see differently
enowdev Nov 4, 2026
bae3e56
Have the app look only at itself for its own usage
enowdev Nov 4, 2026
c629ac4
Start a waking over when the session is hibernated again
enowdev Nov 4, 2026
db032e2
Keep a late turn's end off a queued task being typed in
enowdev Nov 4, 2026
2fc8400
Merge the fixes of a send after hibernating and of a late turn's end
enowdev Nov 4, 2026
2f83ee0
Merge taking designs from the library: code, copies, references, skills
enowdev Nov 4, 2026
e409bf6
Keep the agent's API key to the agent's own process
enowdev Nov 4, 2026
614c530
Keep a session working while its turn ended with background tasks
enowdev Nov 4, 2026
3818cc8
Show the agents in a session's background, found in its process tree
enowdev Nov 4, 2026
5fafdeb
Search the library by words, and filter by what the server reads
enowdev Nov 4, 2026
1b5ae63
Find a session's conversation without reading it into memory
enowdev Nov 4, 2026
9f7964e
List designs that look close beside the one under review
enowdev Nov 4, 2026
da29d42
Add searching by meaning behind an embedder, off by default
enowdev Nov 4, 2026
b696ecf
Document the library's search, filters and near matches
enowdev Nov 4, 2026
2ccfd7d
Merge creators: profiles, open for work, likes, collections, follows
enowdev Nov 4, 2026
b3246a2
Keep a conversation's mode and GOA's rules from changing by themselves
enowdev Nov 4, 2026
ab2d711
Test a region's agent ending on sessions that don't exit
enowdev Nov 4, 2026
de6c1c6
Don't draw a frame for looks that change nothing
enowdev Nov 4, 2026
9997a62
Close permission holes in reads, MCP hints, attachments and kept rules
enowdev Nov 4, 2026
9f61cd9
Find an agent that left its session's tree before a look saw it
enowdev Nov 4, 2026
dc654d2
Merge the library's search, filters and near matches
enowdev Nov 4, 2026
888bb03
Show Claude Platform's text while the model pauses
enowdev Nov 4, 2026
0ca421a
Keep Claude Platform's screen moving while it works
enowdev Nov 4, 2026
8f0f14c
Name the 401 of a bad key, and show a turn's error once
enowdev Nov 4, 2026
4ec5b58
Keep enowxd stop SESSION from stopping the daemon
enowdev Nov 4, 2026
2a3dfb3
End a mode switch under way when another is asked for
enowdev Nov 4, 2026
aba2fa6
Find Claude Platform's conversations where it keeps them
enowdev Nov 4, 2026
8efde13
Fix /clear's deadlock and what escapes the session's budget
enowdev Nov 4, 2026
e7f5664
Keep the prompt editor to its host, and let a too-long prompt reset
enowdev Nov 4, 2026
95c3681
Collect at half the default heap growth
enowdev Nov 4, 2026
4bee637
Ask an open canvas's page without waking the window
enowdev Nov 4, 2026
8ab63f0
Say in a profile what conversations and pictures are held
enowdev Nov 4, 2026
81cbaf3
Say where an agent's vault key goes now
enowdev Nov 4, 2026
163d75e
Merge Claude Platform's fixes from the independent review
enowdev Nov 4, 2026
11521cb
Say a hook's rewrite runs on Claude Platform
enowdev Nov 4, 2026
d1ef100
Say a hook's rewrite reaches Claude Platform, as it does
enowdev Nov 4, 2026
97b562e
Test Claude Platform end to end through the built program
enowdev Nov 4, 2026
8d9583c
Merge Claude Platform's end-to-end test and what it found
enowdev Nov 4, 2026
abcf5fe
Poll a chat only while it is on screen
enowdev Nov 4, 2026
7c5e9e7
Give Kilo Code its first prompt by flag
enowdev Nov 4, 2026
4b47325
Record which agents really got enowX's prompt and tools
enowdev Nov 4, 2026
6ab94d6
Refuse a design whose document would grow past a budget
enowdev Nov 4, 2026
8459798
Keep what a moderator took down from coming back
enowdev Nov 4, 2026
d3f60ce
Test Claude Platform on a key the vault lent, with the real program
enowdev Nov 4, 2026
234857a
Merge old to-dos and background agents into release/next
enowdev Nov 4, 2026
183ea63
Keep the vault key's end-to-end test off Windows, as its helpers are
enowdev Nov 4, 2026
74953e3
Hold each account to its own limits when sending to the bucket
enowdev Nov 4, 2026
2f81d8e
Keep why a version was rejected between its creator and moderators
enowdev Nov 4, 2026
7581b58
Take a dropped version's video with it
enowdev Nov 4, 2026
01ed1a6
Keep frames saying they moved from burying what people reported
enowdev Nov 4, 2026
42c8ee4
Have another moderator decide on a moderator's own design
enowdev Nov 4, 2026
4e3ce29
Keep a first sign-in from taking a kept handle
enowdev Nov 4, 2026
fcb0ce6
Never type into the shell an agent leaves behind
enowdev Nov 4, 2026
b87a3fb
Walk a component as a browser reads it
enowdev Nov 4, 2026
bb143ae
Say a session's background agents live, and not as done or idle
enowdev Nov 4, 2026
30cf1e9
Keep community text clean, capped and inside the label
enowdev Nov 4, 2026
b4e2ea0
Say what the app and daemon cost, and the path to under 100 MB
enowdev Nov 4, 2026
89ec0e3
Let one of a session's background agents be stopped, asking first
enowdev Nov 4, 2026
d3e3f07
Show a worker's background agents on GOA's board, and tell GOA of them
enowdev Nov 4, 2026
5fb9607
Name background agents where hibernating or updating would stop them
enowdev Nov 4, 2026
d1d1ebf
Keep a skill only by the user's click on a card
enowdev Nov 4, 2026
33a9f02
Ask vmmap for its summary with the flag it documents
enowdev Nov 4, 2026
499968f
Make a design's video with its draft
enowdev Nov 4, 2026
b96f999
Test reading vmmap's summary on every system
enowdev Nov 4, 2026
2695409
Fix the CLI's background command and Codex's own session going unseen
enowdev Nov 4, 2026
27baa5a
Warn of every spelling of a page changing its address
enowdev Nov 4, 2026
3f2159c
Keep the background agents' tests out of the Windows build
enowdev Nov 4, 2026
ca0c1f0
Merge background agents and the shell an agent leaves into release/next
enowdev Nov 4, 2026
534093c
Say how long the longest measured run was
enowdev Nov 4, 2026
5e95702
Merge the library's hardening
enowdev Nov 4, 2026
ee73703
Keep the library's links whole, and drop drafts nobody saved
enowdev Nov 4, 2026
4950ae8
Merge the profile command, floor and memory work into release/next
enowdev Nov 4, 2026
6d81842
Fix what staticcheck finds in the profile and background work
enowdev Nov 4, 2026
7885953
Keep what holds GOA whatever its config brings
enowdev Nov 4, 2026
89fa21e
Change GOA's agent or config on the daemon
enowdev Nov 4, 2026
7b1237f
Change GOA's agent or config from the command line and over MCP
enowdev Nov 4, 2026
654d365
Run every Claude Code session in bypass, whatever was asked or saved
enowdev Nov 4, 2026
17b09fc
Accept Claude Code's bypass warning in the settings it starts with
enowdev Nov 4, 2026
33a13a2
Land session_switch on its mode without passing through plan mode
enowdev Nov 4, 2026
09eed69
Keep GOD of Agents' secrets the user's to allow in bypass
enowdev Nov 4, 2026
3f8e2e6
Keep a program left running from holding a version check
enowdev Nov 4, 2026
5296565
Say a running session is running when asked to continue it
enowdev Nov 4, 2026
889ec36
Close New session once a session wakes, its message following
enowdev Nov 4, 2026
9012012
Stop offering a choice of Claude Code's permission mode for new sessions
enowdev Nov 4, 2026
c0dfa5d
Say Claude Code always runs in bypass, and what that leaves
enowdev Nov 4, 2026
d1ca45b
Show what a dialog asks over that dialog
enowdev Nov 4, 2026
1beb562
Add Settings to GOA's header to change its agent and config
enowdev Nov 4, 2026
cd12758
Say how GOA's agent and config change
enowdev Nov 4, 2026
ac98730
Merge changing GOA's agent and config into release/next
enowdev Nov 4, 2026
7b78bef
Wake a Codex session on its own conversation
enowdev Nov 4, 2026
c7f76ce
Merge Claude Code always in bypass into release/next
enowdev Nov 4, 2026
53511c6
Check GOA on Claude Code stays in bypass over a change of config
enowdev Nov 4, 2026
bf54f3d
Say GOA on Claude Code stays in bypass over a change
enowdev Nov 4, 2026
4ac24a1
Merge the Claude Platform agent into release/next
enowdev Nov 4, 2026
02a44d1
Merge Project Docs into release/next
enowdev Nov 4, 2026
f121e7e
Merge the enowX UI work into release/next
enowdev Nov 4, 2026
1707803
Fix what vet and staticcheck find in the merged branches
enowdev Nov 4, 2026
f0a79c7
Fit the merged branches' tests and switch to each other
enowdev Nov 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
13 changes: 12 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ Go 1.27+ is required (MyGo needs it). With an older `go`, set `GOTOOLCHAIN=go1.2
| `core/git` | Thin wrappers over the `git` CLI | **No** |
| `core/project` | Project folders a daemon knows, in the user's order and groups, stored in `~/.enowx-app/projects.json` | **No** |
| `core/notes` | The user's notes on a host, a Markdown file each in `~/.enowx-app/notes` (see `docs/notes.md`) | **No** |
| `core/projectdocs` | Project Docs: a project documented as notes under one project note: the first line and Based on lines in the body, catalog and templates, staleness, the approval gate, the guard on agents' writes, the skills (see `docs/project-docs.md`) | **No** |
| `core/features` | Which features agents get, per scope (everywhere, host, project, session), resolved for a session; the registry is `core/agent.Features` (see `docs/features.md`) | **No** |
| `core/notify` | How the app notifies of agents: the settings kept in the synced settings, the sounds built in (synthesized), quiet hours | **No** |
| `core/usersync` | Keeps the user's data (notes, canvases, settings, vault) the same on every host: three-way file sync, merges, conflicts, trash (see `docs/user-data-sync.md`) | **No** |
Expand All @@ -44,6 +45,9 @@ Go 1.27+ is required (MyGo needs it). With an older `go`, set `GOTOOLCHAIN=go1.2
| `core/vault` | The user's credential vault: sealed with a key that stays on the device, its platforms, what a session gets of a credential, hosts' imports, the SSH agent and the record of uses (see `docs/vault.md`) | **No** |
| `core/accounts` | Agents' configs (synced): other accounts, each a home of its own sharing the agent's settings, and model APIs; team members' accounts per host (see `docs/configs.md`, `docs/accounts.md`) | **No** |
| `core/agent` | Agent presets (Claude Code, Codex, …) and how they take a first prompt | **No** |
| `core/platformagent` | Claude Platform, enowX's own agent (see `docs/claude-platform.md`): the loop over Anthropic's Messages API | **No** |
| `core/platformagent/record` | Its conversation's file format, read by `core/transcript` and `core/tokens` | **No** |
| `core/platformagent/terminal`, `tools`, `permission`, `mcpclient` | Its screen in a session's terminal, its tools, permission rules and MCP client | **No** |
| `core/agentapi` | How each agent takes a model API: per session by its environment and flags (a config's), or in its own settings, backed up first, for those that can't (see `docs/configs.md`, `docs/agent-api.md`) | **No** |
| `core/hosts` | The device's server list (`~/.enowx-app/hosts.json`); passwords live in the keychain, never here | **No** |
| `core/tailnet` | Devices on the user's tailnet, via the `tailscale` CLI | **No** |
Expand Down Expand Up @@ -76,13 +80,18 @@ Go 1.27+ is required (MyGo needs it). With an older `go`, set `GOTOOLCHAIN=go1.2
| `core/discordrpc` | Discord Rich Presence over the Discord app's local IPC socket (named pipe on Windows) | **No** |
| `core/cacheclean` | Clean cache: what a host's enowX folder takes, what can go of it, and removing that, never anything outside the few folders it names (see `docs/daemon.md`) | **No** |
| `core/procstat` | Memory and CPU of process trees and of the machine, for the resource usage view | **No** |
| `core/selfprofile` | What the process it runs in holds and uses, by the system's count and the Go runtime's, for `enowx-app profile` (see `docs/performance.md`) | **No** |
| `core/memtune` | How long-running programs give memory back: the limit on the Go heap, returning what a burst leaves (see `docs/performance.md`) | **No** |
| `cloud/` | The team cloud's server (`cloud/server`), its database (`cloud/store`), API types (`cloud/api`) and the sealing of a team's keys and items (`cloud/seal`) (see `docs/cloud.md`) | **No** |
| `cloud/library` | enowX UI's server, under `/v1/library`: the community library's API, its web sign-in, moderation (see `docs/library.md`) | **No** |
| `core/designshare` | A canvas's design made into what the community library keeps: its bundle and checks, the host's drafts, the code, skills and `enowx://` links people take from it; `core/designshare/thumb` its picture (see `docs/library.md`) | **No** |
| `cmd/enowx-cloud` | The cloud server's entry point and its image (`Dockerfile`) | **No** |
| `hostconn/` | Connects to a host's daemon: starts or replaces it locally, installs or upgrades it over SSH | **No** |
| `docs/` | The docs, and package `docs` shipping them in the program for `goa doc` (all top-level `*.md` but `PLAN.md`) | **No** |
| `version/` | The release version shared by app, daemon and client | **No** |
| `internal/quietcmd` | Starts programs in the background without a console window on Windows | **No** |
| `internal/watchdog` | Leaves a report when a thread stops answering (every goroutine's stack, what was on screen), and a line of what memory holds, in the data folder's `watchdog` folder | **No** |
| `internal/rpccount` | A connection counting calls and bytes, for tests saying how often a method is called | **No** |
| `internal/testlisten` | A test binary standing in for a dev server a session starts, for tests of ports | **No** |
| `core/*` (others) | Runner, scheduler, store (later) | **No** |
| `transport/` | Local socket, SSH, daemon spawning | **No** |
Expand All @@ -92,8 +101,10 @@ Go 1.27+ is required (MyGo needs it). With an older `go`, set `GOTOOLCHAIN=go1.2
| `ui/widget` | Controls every view shares: buttons, dialogs, menus, chips, Markdown | Yes |
| `ui/textfmt` | How values read in the UI: sizes, plurals, paths | **No** |
| `ui/localpicker` | Picks files and folders of this device, for adding them to a session's folder | Yes |
| `ui/chatview`, `ui/activityview`, `ui/appwindow`, `ui/libraryview`, `ui/browserview`, `ui/checkview`, `ui/diffview`, `ui/fileview`, `ui/portview`, `ui/trafficview`, `ui/androidview`, `ui/notesview`, `ui/canvasview`, `ui/vaultview`, `ui/usageview`, `ui/folderpicker`, `ui/syncview` | Self-contained views; they get what they need from `ui` through options and callbacks, never import it | Yes |
| `ui/chatview`, `ui/activityview`, `ui/appwindow`, `ui/libraryview`, `ui/communityview`, `ui/browserview`, `ui/checkview`, `ui/diffview`, `ui/fileview`, `ui/portview`, `ui/trafficview`, `ui/androidview`, `ui/notesview`, `ui/canvasview`, `ui/vaultview`, `ui/usageview`, `ui/folderpicker`, `ui/syncview` | Self-contained views; they get what they need from `ui` through options and callbacks, never import it | Yes |
| `ui/onboardview` | The first run: the app assembling itself, a clock driving the opening, frames, wires and the change of style, the seven steps in a panel; its links in `links.go` (see `docs/onboarding.md`); self-contained like the views above | Yes |
| `ui/platformview` | Claude Platform's sheet (API keys, from the vault; its system prompt) and the words its chat says of them; self-contained like the views above | Yes |
| `ui/projectdocsview` | Project Docs on the Notes page: making a project, its summary, a document's strip; self-contained like the views above, drawn through a hook of `ui/notesview` | Yes |
| `ui/tokenview` | The Tokens tab of Resource usage: every host's token use, budgets, prices, coverage; self-contained like the views above | Yes |

Keep MyGo out of packages marked **No**. If MyGo ever has to be replaced, only `ui/`, `cmd/enowx` and the terminal emulation in `core/session` should change.
Expand Down
86 changes: 86 additions & 0 deletions cli/background.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package cli

import (
"errors"
"flag"
"fmt"
"strconv"
"text/tabwriter"
"time"

"github.com/enowx/enowx/proto"
"github.com/enowx/enowx/ui/textfmt"
)

const backgroundUsage = "usage: enowx-app background [SESSION] | background stop SESSION PID --yes"

// background lists a session's background agents, or stops one.
func (r runner) background(args []string) error {
if len(args) > 0 && args[0] == "stop" {
return r.backgroundStop(args[1:])
}
if len(args) > 1 {
return errors.New(backgroundUsage)
}
list, err := r.c.Sessions()
if err != nil {
return err
}
only := ""
if len(args) == 1 {
s, err := r.session(args[0])
if err != nil {
return err
}
only = s.ID
}
w := tabwriter.NewWriter(r.out, 0, 0, 2, ' ', 0)
fmt.Fprintln(w, "SESSION\tPID\tAGENT\tFOR\tCPU\tMEMORY\tNOTE")
now := time.Now()
for _, s := range list {
if only != "" && s.ID != only {
continue
}
for _, b := range s.Background {
note := ""
switch {
case b.Stuck:
note = "stuck: next to no CPU for a while"
case b.Left:
note = "left from under its agent"
}
fmt.Fprintf(w, "%s\t%d\t%s\t%s\t%s\t%s\t%s\n", s.ID, b.PID, b.Name, textfmt.Age(b.Since, now), textfmt.CPU(b.CPUPercent), textfmt.Bytes(b.Memory), note)
}
}
if err := w.Flush(); err != nil {
return err
}
fmt.Fprintln(r.out, "Seen by the process tree: a subagent inside its agent's process, at an API, or under a CLI's own background service (OpenCode's server) doesn't show.")
return nil
}

func (r runner) backgroundStop(args []string) error {
fs := flag.NewFlagSet("background stop", flag.ContinueOnError)
yes := fs.Bool("yes", false, "")
s, rest, err := r.sessionAndFlags(fs, args, backgroundUsage)
if err != nil {
return err
}
if len(rest) != 1 {
return errors.New(backgroundUsage)
}
pid, err := strconv.Atoi(rest[0])
if err != nil {
return errors.New(backgroundUsage)
}
for _, b := range s.Background {
if b.PID != pid {
continue
}
if err := needYes(*yes, "stopping "+b.Name+" (what it hasn't saved is lost)"); err != nil {
return err
}
return r.guarded(proto.MethodSessionStopBackground, proto.StopBackgroundParams{Session: s.ID, PID: pid, Start: b.Start}, nil)
}
return fmt.Errorf("process %d isn't a background agent of %s", pid, s.ID)
}
1 change: 1 addition & 0 deletions cli/canvas_brief.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ func (r runner) canvasBrief(args []string) error {
return err
}
if *set == "" {
defer r.canvasReferences(c)
if c.Brief == nil {
fmt.Fprintf(r.out, "No brief yet. Write one: enowx-app canvas brief %s --set -, with these sections:\n\n%s", c.ID, designbrief.Template())
return nil
Expand Down
2 changes: 1 addition & 1 deletion cli/canvas_chat.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ func (r runner) canvasSession(id, agent string) (proto.SessionInfo, bool, error)
return proto.SessionInfo{}, false, err
}
for i := len(list) - 1; i >= 0; i-- {
if s := list[i]; s.CanvasFor == id && s.Agent == agent && !s.Exited {
if s := list[i]; s.CanvasFor == id && s.Agent == agent && !s.Exited && !strings.HasPrefix(s.Group, proto.UnslopGroup) {
return s, true, nil
}
}
Expand Down
7 changes: 6 additions & 1 deletion cli/canvas_designs.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"strings"

"github.com/enowx/enowx/core/canvas"
"github.com/enowx/enowx/core/designshare"
"github.com/enowx/enowx/proto"
)

Expand Down Expand Up @@ -165,6 +166,10 @@ func canvasSized(c proto.Canvas) bool {
}

func (r runner) listDesigns(c proto.Canvas) error {
return r.labelledIfCopied(c, func(r runner) error { return r.printDesigns(c) })
}

func (r runner) printDesigns(c proto.Canvas) error {
fmt.Fprintf(r.out, "%s %s: %d designs\n", c.ID, c.Title, len(c.Frames))
for i, f := range c.Frames {
marks := ""
Expand All @@ -179,7 +184,7 @@ func (r runner) listDesigns(c proto.Canvas) error {
if group != "" {
group = " (" + group + ")"
}
fmt.Fprintf(r.out, "%3d %s%s %d×%d%s %s\n", i+1, f.Name, group, f.Width, f.Height, marks, canvas.Link(c.ID, i+1))
fmt.Fprintf(r.out, "%3d %s%s %d×%d%s %s\n", i+1, designshare.OneLine(f.Name), group, f.Width, f.Height, marks, canvas.Link(c.ID, i+1))
if f.Description != "" {
fmt.Fprintf(r.out, " %s\n", f.Description)
}
Expand Down
15 changes: 14 additions & 1 deletion cli/canvas_show.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"time"

"github.com/enowx/enowx/core/canvas"
"github.com/enowx/enowx/core/designshare"
"github.com/enowx/enowx/proto"
)

Expand All @@ -28,6 +29,7 @@ func (r runner) canvasList() error {
names[sp.Team] = sp.Name
}
}
var copied strings.Builder // their titles are the library's creators' words
for _, c := range list {
state := ""
if c.Team != "" {
Expand All @@ -36,8 +38,15 @@ func (r runner) canvasList() error {
if c.Paused {
state += " (paused by the user)"
}
if c.Source != nil {
fmt.Fprintf(&copied, "%s %-9s %s%s\n", c.ID, c.Kind, designshare.OneLine(c.Title), state)
continue
}
fmt.Fprintf(r.out, "%s %-9s %s%s\n", c.ID, c.Kind, c.Title, state)
}
if copied.Len() > 0 {
fmt.Fprintf(r.out, "Copied from the community library:\n%s\n", designshare.ForAgents(strings.TrimRight(copied.String(), "\n")))
}
return nil
}

Expand Down Expand Up @@ -91,6 +100,10 @@ func (r runner) canvasNew(title string, f *canvasFlags) error {
// canvasShow prints what an agent works from: frames, their elements by
// id, and the comments still open.
func (r runner) canvasShow(c proto.Canvas, f *canvasFlags) error {
return r.labelledIfCopied(c, func(r runner) error { return r.printCanvas(c, f) })
}

func (r runner) printCanvas(c proto.Canvas, f *canvasFlags) error {
if *f.showHTML {
i, err := canvas.FrameIndex(c, *f.frame)
if err != nil {
Expand All @@ -107,7 +120,7 @@ func (r runner) canvasShow(c proto.Canvas, f *canvasFlags) error {
fmt.Fprintf(r.out, "Projects: %s\n", strings.Join(c.Projects, ", "))
}
for _, fr := range c.Frames {
fmt.Fprintf(r.out, "\nFrame %s (%s) %d×%d\n", fr.Name, fr.ID, fr.Width, fr.Height)
fmt.Fprintf(r.out, "\nFrame %s (%s) %d×%d\n", designshare.OneLine(fr.Name), fr.ID, fr.Width, fr.Height)
if g := fr.Grid; g != nil {
var names []string
for _, a := range g.Areas {
Expand Down
Loading
Loading