Skip to content

feat: Rework skills, overview and search - #6

Merged
nfebe merged 28 commits into
mainfrom
feat/local-machine
Sep 28, 2026
Merged

nfebe merged 28 commits into
mainfrom
feat/local-machine

Conversation

@nfebe

@nfebe nfebe commented Sep 27, 2026

Copy link
Copy Markdown
Contributor

Skills are a table, with uses editable per row for any skill. Reading a skill and editing one are separate routes.

Overview leads with one action and shows recent reviews plus the files that change most and are depended on most.

Repositories group by owner and say when each was last read. The folder picker searches by name.

Ctrl or Cmd K searches skills, knowledge, code, repositories and pages.

Fixed: a graph query now reaches the core instead of being applied to what was already sent; opening a review no longer narrows the listing to its repository; "all repositories" survives a screen that shows one; the view builds against the design commit the lockfile names.

Pins @sourceant/design by commit. Merge sourceant/design#6 first.

A repository the core is reading now, one read an hour ago and one never read
looked the same on the Repositories screen: what it knew it worked out for
itself and forgot on every reload. The core now says when each folder was last
read and whether one is being read, and the screen shows that, refreshing
itself until a read finishes.

Adding a folder no longer asks for a read of its own, because registering one
starts it.
Every setting arrived with equal weight, so a group of ten fields asked ten
questions where most already had the right answer. What the core marks as
tuning now sits behind one line somebody opens, leaving the settings a person
has to choose.
The Skills screen only printed what each file said about itself. A skill synced
from a coding agent could not be answered for at all, because nothing here may
edit those files, and a skill of your own took a trip through the editor and a
whole document rewritten.

Each row now says whether reviews on this machine read it: when it looks
relevant, always, or never. The list can be narrowed to what a review would
read, and says that five is the most any one change is read against.
A machine with a dozen folders on it read as a list of a dozen unrelated
things, and finding one meant reading all of them. Folders now sit under the
owner their name already carries, and the folder, knowledge and review lists
each take a word to narrow by once they are long enough to need it.
The model was a text box somebody typed a name into from memory, and a wrong
key showed up later as a review failing. The field is now a searchable list of
what the core can reach, keeping whatever is already set even when no provider
lists it, and saving a model with a key says whether the provider accepts the
pair.

A screen that says no model is configured now links to the field that fixes it.
The dev server answered the view's own calls with its index page, so
working on the view meant rebuilding the binary that embeds it for every
change. It now hands those calls to the agent, which is what the readme
already claimed.
Adding a folder meant walking down to it one directory at a time, which is the
long way round for somebody who already knows where it is.

Typing a name now answers with what matches under your home folder, working
trees first and shallower paths before deeper ones, and each match shows its
path so two folders of the same name can be told apart. Dependencies, build
output and hidden directories are left unwalked.
A dropdown reading "When it looks relevant" said in four words what the
product says in one everywhere else, and hid the answer until somebody opened
it. Each row now carries the same segmented strip the rest of the screens use,
with Auto, Always and Never, so which skills reviews read is visible while
scanning the list. The editor says Auto too.
The skills screen asked one question twice. "Used for" and "in reviews" were
the same thing said in two places, and the kind a skill is read as was mixed
into it, so a skill read as a review pass looked like a skill that is only for
reviews. There is one answer now: the purposes it applies to, each on, off or
unsaid, with the kind beside it as its own column. A purpose nobody said is
still decided by the change.

Sixty rows of prose are also a list nobody reads, so they are a table: what
applies to what is one glance down a column rather than sixty cards.

Ctrl or Cmd K finds a skill, a decision, a file or a repository by name from
anywhere, asking the core for the code because a graph is too large to hold on
a screen.

The view also carried neither the purposes nor the kind through to the screen,
so both were dropped on the way.
The agent took a query for a drawing and dropped it on the way to the core, so
every filter was applied to whatever had already been sent. A search over a
repository of five thousand nodes cannot work that way, and now does not have
to: the core narrows, the screen draws what came back.
…ainly

Reviews is the only use anything acts on. A field for typing other purposes was
a field with nothing behind it, so the table asks the one question that has an
answer: does reviews use this skill, always, never, or left to the change. The
column is Skill uses, the one saying where a skill came from is Source, and the
kind it is read as is no longer a column of its own.

On the skill itself, two different things were both called "used for": the
purpose, and the repository it is kept for. What it is and how it is used are
now two groups, and the repository says it is kept for one.
The screen asked about reviews and nothing else, and folded "picked without
being asked" into the same control. Both are fixed: the five uses come from the
core, each on until turned off, and whether SourceAnt may pick a skill itself is
its own switch, shown as a manual mark on the list.

Labels are labels now: Skill uses, Source, Description, Files, Read as, Kept
for.
"Read as" was uses wearing another name: a review pass and an initialization
pass each name an activity, which is what uses already say. The field is gone
and a skill's kind is carried as written rather than offered.

Scope replaces "Kept for". Automatic selection is a checkbox called that, with
one line under it. Every hint on both screens is a fragment, not a sentence
about the product.
The detail screen was the edit form: a document opened as a row of text boxes,
one keystroke from a change nobody meant. Reading and editing are now two
routes. The read view shows the description, the uses, the files, how it is
selected and the body as prose, with Edit or Copy as the way in.

Deleting moved to the read view, where the thing being deleted is on screen.
…s first

Three screens offered "All repositories" and one did not, and choosing it was
undone by the next screen that can only draw one, because they shared the same
choice and overwrote it. The choice now survives, and a screen that needs one
repository falls back to one instead of writing over it.

Reviews leads the navigation. A review of a checkout with nothing in it also
said "read, not judged", which reads as a failure: it now says the branch
matches its base and there was nothing to read.
Adding one asked for seven answers before the first word, above the fold, with
the body sharing half its width with a preview nobody had anything to preview
yet. It now asks for a name, the line that says what it is about, and the skill
itself; the folder name follows what you type. Scope, uses, automatic selection
and file patterns sit behind one line that says what they are set to.

The button says Add skill.
Four numbers and a card per folder said nothing: a count is only useful beside
what it should be. It now leads with the one thing worth doing, whichever it is,
and then counts what there is beside the state of it: folders read or not,
knowledge waiting for somebody, skills read against the work.

Two panels carry what the product knows and nothing surfaced: the last few
reviews, and where recent change has landed on what the rest of the code leans
on. A table replaces the cards. The line claiming reviews are not here is gone.

Counting files no longer loads whole graphs to do it: the agent passes through
the count the index already answers with.
… rows

"Worth reading first" named nothing: it is the files that change most and are
depended on most, so it says Hotspots and one line saying what that means.

A card saying everything is fine, with the model's name in it, was neither the
most urgent thing nor a thing at all. Nothing urgent, no card.

Earlier reviews are rows with what somebody wants from a list: status, name,
repository, when, and how long it took, which tells a review that ran from one
that gave up at once. The id is not shown, being unreadable and unwanted.

Adding a folder says folder or repository.
"Hotspots" named nothing anybody could act on. The panel says what puts a file
in it: changed most, depended on most.

A setting holding a list of paths is edited as a list rather than as a line of
JSON somebody has to punctuate correctly.
The view had been built against a checkout linked in by hand while the lockfile
still named a published version that has neither of the pieces it now uses, so
a clean install would have built something else. Pinned by commit, as the
dashboard pins it, and installed that way here.
Reading one set the page to that review's repository, so going back showed a
listing of one, and it wrote over a choice every other screen shares. The result
already says which repository it read; the listing keeps whatever you were
looking at.
Also names the screens in the order they are in, and says what Ctrl or Cmd K
does.
@sourceant

sourceant Bot commented Sep 27, 2026

Copy link
Copy Markdown

This repository is not connected to any of your workspaces. Please connect it at https://app.sourceant.ai to get reviews on it.

The list answered for code review only, and only for skills whose files it could
not edit. It writes the one setting the core now reads, so any use can be
answered for on any skill.
@nfebe
nfebe force-pushed the feat/local-machine branch from 0847b90 to 1f1b84a Compare September 27, 2026 17:16
A review asked for without saying whether to use a model was read and not
judged, because nothing said meant no. Nothing said now means what the core
means by it, which is a judged review; asking for a read still asks for one.
@nfebe
nfebe merged commit a6c81f5 into main Sep 28, 2026
1 check passed
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