Skip to content

A project's page counts its skills and offers Add skills - #2051

Merged
suleimansh merged 2 commits into
mainfrom
add-skills-button
Oct 10, 2026
Merged

suleimansh merged 2 commits into
mainfrom
add-skills-button

Conversation

@suleimansh

Copy link
Copy Markdown
Member

The fifth and last step of @openagt/init (#2023): the dashboard side.

👤

  • "Add project" in the dashboard stays small and offers the skills with a button. Running init in a terminal does the same thing.
  • When a skill has a newer text, the person is told. It updates only on their word.
  • The "Add skills" button offers the same commit. It never pushes.
  • While a skill's text is in the folder but not yet on the branch agents start from, the dashboard says so, so the launcher never offers a command the agent does not have.

🤖 automated · Opus 5.5, effort high

What a person sees

On a project's page, under the bar with the project's menu, one line:

This project has 3 of 25 skills. Add skills

  • Add skills opens the list with ticks npx @openagt/init shows in a terminal, in the same groups, with the scheduler as one more tick. In a project with no skills yet, the same default picks are ticked. Save writes the ticked skills and deletes the unticked ones.
  • After a save the screen says what was written, and offers Commit these files: one commit of the files that save wrote or deleted, those alone. Nothing is pushed.
  • The sidebar gains or loses the Tickets, Queue and Automations pages right after a save.
  • The line also says, when it is so:
    • "3 skills have a newer text." with Update;
    • "2 skill files are not committed." with Commit;
    • "tickets, plan: waiting to reach main. An agent started from main does not have them."
  • In the launcher, a command whose skill is still waiting is shown, switched off, with "waiting to reach main". The / list in the prompt box and the "Post-merge cleanup" box leave it out.

How

  • The dashboard reads and writes through @openagt/init's own code (readProject, applyChange, commitSkills), so the screen and the terminal cannot drift apart.
  • Three new calls from the browser: read a project's skills, change them, commit them. A change takes only names of init's list; anything else is refused whole. No path comes from the browser.
  • "Waiting" is read from one listing of the branch agents start from: the remote's default branch, or the folder's own branch where there is no remote.

Picks of mine

  • A skill is called waiting only when that is known. Before saying so against a remote branch, the dashboard fetches that branch (at most once a minute per project). Otherwise a pull request merged a moment ago would keep its skill "waiting" here. Where the skills folder is a link to somewhere the listing does not show, nothing is said to be waiting.
  • Where the person starts agents from the folder's own branch, a skill that branch already has is not waiting.
  • A scheduler ticked in the dashboard starts at once, by running the start line the tick just added. Unticked, it is stopped.
  • The line's own "Commit" takes every skill file that stands uncommitted. The commit after a save takes that save's files only.
  • The list opens on the project as it stood at that moment. A later read does not move the ticks under the person.
  • The launcher now reads a project's commands again every 15 seconds, so a skill written in a terminal shows up without a reload.
  • Version numbers. The packages that changed since they were published get a new one: @openagt/dashboard 0.9.0 to 0.10.0; agent-data, agent-runner, files and the four agent-driver packages 0.0.2 to 0.0.3.

Known

  • A row a person made with "New automation" and kept on this machine is in no branch, so its command reads as waiting.
  • A change in the launcher can take up to 15 seconds to show.
  • An open project page now costs about a dozen quick git reads every 15 seconds.
  • A save, an update and a commit read the project list again, and the sidebar blinks once.

To publish (never by an agent): all 35 packages, from the main checkout after a build, in a real terminal: pnpm -r publish --access public. New on npm: @openagt/init. After that the README's quickstart can say npx @openagt/init.

Checked

  • Full root CI alone (the first run caught a typing slip in a new test). The init and dashboard tests that use real git, once more without my git settings.
  • A rig in a real browser, on a dashboard of its own (another port, its own settings folder), two projects:
    • The line showed "3 of 25". Add skills wrote 19 skills and the pages appeared.
    • After a restart the line said "38 skill files are not committed"; Commit made one commit of those 38.
    • In the project with a remote, two skills read "waiting to reach main" after a local commit, and stopped waiting after a push. The launcher showed /ux as waiting.
    • The scheduler started when ticked and stopped when unticked.
  • The same with the dashboard started as a person starts it, npx @openagt/dashboard, with the packages served by a throwaway registry on this Mac (never npm).
  • Broken on purpose four ways (nothing ever waits; any name is taken from the browser; a waiting command can be picked; nothing ticked the first time): the tests caught each.
  • One fresh reviewer: the / list and the cleanup box still took a waiting command; "waiting" was wrong for linked skill folders, for a branch merged elsewhere and for a start from the local branch; the commit failed where .claude/skills is a link; the dialog's commit took more than its own files; and smaller points. All acted on, each with a test. The rig was run again after the fixes.

DECISIONS.md

packages/openagent/DECISIONS.md, three new bullets, writing down the picks above:

"Add project" stays small: it writes no skill. The project's page then says how many skills it has ("This project has 4 of 25 skills"), with an "Add skills" button that opens the same list with ticks npx @openagt/init shows in a terminal, through that package's own code, so the two cannot drift apart. Picked over "Add project" writing the skills itself, which put files into every project a person adds, and over only pointing to the terminal.

When a skill in a project has a newer text, the project's page says so in one line ("3 skills have a newer text") with an "Update" button; the texts are written only on that press, and the person reads the change in git. Picked over saying nothing until asked, and over writing every text again unasked.

After a change the dashboard offers the same commit init does: one commit of the skill files that change wrote or deleted, those alone, on the branch the folder is on, never a push. While a skill's text is in the folder but not yet on the branch agents start from, the page says so ("tickets: waiting to reach main"), and the launcher does not take its command, so it never offers a command the agent does not have. Picked over leaving the commit to the person with a line of advice, and over committing and pushing unasked.

@suleimansh
suleimansh enabled auto-merge (squash) October 10, 2026 04:20
@suleimansh
suleimansh merged commit 26954a9 into main Oct 10, 2026
6 checks passed
@suleimansh
suleimansh deleted the add-skills-button branch October 10, 2026 04:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant