Repository navigation
Releases: kinlab-ai/kin
Release list
v0.8.1
A graph-native code repository for people and AI agents.
v0.8.1 lands 18 changes, listed below.
[0.8.1] - 2026-09-26
Added
- Language-server sweeps prove each call at its callee token. The definition
answer at a call site proves that call, and call hierarchy is judged per
call instead of per caller, so one unprovable call no longer discards its
caller's proven ones. A call through a value slot, such as an interface
member, a property or a parameter, proves nothing and retires nothing. A
name-only guess the server contradicts is retired, and an answer outside
the repository refutes the guess at that site. What counts as inside the
repository is decided by what the graph holds, so a symlinked workspace
package is inside andnode_modulesis not. Python decorator calls bind
through their receiver instead of by bare name. - A call that resolves outside the repository gets a proven edge to an
external symbol, named by package, version and symbol in the SCIP symbol
grammar, so the same symbol has the same id in every repository. Call rows
in MCP and the CLI show external targets,get_entity,find_references
andgraph_neighborhoodaccept external ids, andtrace_data_flowstops
at the symbol as a leaf. Every other tool answers an external id by what it
is, never as a missing entity, and reads no file for it. - Analysis environments, on by default. Kin fetches the dependencies a
repository's lockfile pins (Python wheels, npm, pnpm and yarn tarballs,
crates and Go modules), checks each against its hash before unpacking it,
and keeps them in a store shared across repositories under
KIN_HOME/cache, so language servers can resolve calls into them. For
Python it also fetches a standalone CPython build of the pinned version,
and for Rust therust-srccomponent when the pinned toolchain lacks it.
Kin never runs an installer, a build script, an install script or any
repository or dependency code. The user's own environment wins when it
matches the lockfile.KIN_ANALYSIS_ENVIRONMENTS=0turns fetching off,
and a repository without a matching environment of its own then reports
its environment missing. kin init --jsonreports the generation the store ended at in a new
authority_as_offield.
Changed
- Language servers load all of a repository's code: every workspace folder,
rust-analyzer's linked projects with all features, pyright's settings
throughworkspace/configuration, TypeScript workspace packages resolved
to their source even when build output exists, and gopls build tags and
go.work. Proc macros and build scripts stay off. A TypeScript server is
judged ready per document instead of after a fixed wait. - The store format steps to new versions: repository snapshots 21 to 26,
authority frames 6 to 8 and graph deltas 6 and 7. A store records a
completion mark for each file a language-server sweep finishes, resolution
records, calls proven into named symbols outside the repository, and one
call-site ledger per caller, with one state for each call site. Each version
is written only by a store that carries what it adds, so a store this
version has not enriched keeps its bytes. Existing stores are swept again
once on the first start, since nothing an earlier version finished recorded
these states. An older Kin refuses a store this version has written at its
header, naming the version it cannot read, instead of misreading it.
Fixed
- Call guesses a language server had already refuted and retired no longer
come back after a commit to an unrelated file. An edit now re-derives the
files that depend on the edited one only when something they bind against
moved: a declaration, a signature, an import or a structural relation. - A watcher round that finds only bytes Kin already holds no longer moves the
graph epoch, so the enrichment a pass finished in the meantime is kept
instead of being discarded and asked again. - Incremental enrichment after an edit proves calls the way the full sweep
does: each call at its callee token, guesses the answers contradict
retired, calls into symbols outside the repository named, and every caller
in the file given its call-site ledger, so the file keeps its completion
mark. - Answers carry the call-site state of the callers they read.
kin refs,
find_references,get_context_pack,graph_neighborhood,
kin_graph_statusandkin contextreport each caller's sites as proven,
unresolved, failed, outside any build or still owed a sweep, over the
focal's own body, the callers in the files that import the focal's file,
or the whole store. While a caller in that scope has sites a sweep has not
settled, the verdict is inconclusive undercall_sites_owedand the
terminal output prints anot settled:line. An owed caller whose whole
body never spells a name a call to the focal uses cannot call it by that
name and is not counted. A member is matched by each segment of its name,
such assendorSessionforSession.send, never by the qualified name
no call spells.kin refsgates its absence on the same
readings, so it never certifies an absencefind_referencesrefuses. A
caller no resolver can
prove on this host, because enrichment is switched off, no language server
serves its language or the one that does cannot start, reads
call_sites_unproven_no_resolverinstead, with the reason. A caller can
also reach the focal without importing its file, such as a method called
through another object, sokin refs,find_references,
get_context_packandimpact_analysisalso read the focal's language
outside that scope: while a caller there is still owed its sites, the
answer names those files, says it may be missing a caller, and its verdict
is inconclusive undercall_sites_oweduntilkin daemon sweepsettles
them.kin initwaits for the sweep by default. - A commit made after language-server enrichment no longer fails with
has unadmitted destination endpoint external_reference:.... The workspace
a commit moves now carries the external symbols and proof contexts its
edges name, as the change it publishes already did. - A guarded entity edit no longer comes back
source_base_conflictwhen
enrichment landed between the read and the write, a daemon restart that
flushed pending enrichment included. A source base now compares the
workspace's repository, head and tree, as a repository base does, and the
entity's own artifact, bytes, span and body; a workspace generation that
advanced with no source change is not a conflict. - An interrupted sweep resumes from per-file completion marks kept in the
store's authority instead of starting over. Sweep checkpoints no longer
grow with the store and are spaced to cost about 5% of a sweep. - A language server's deterministic refusal settles its call sites as
unprovable instead of leaving them owed on every sweep. A request Kin stops
waiting for is cancelled, and a TypeScript backend that exits is noticed. kin setupdefaults to installing a language server when the runtime it
needs is present, and asks only about the languages the repository
contains. When a sweep skips or cannot serve a language for want of a
server,kin initnameskin doctor --fix --install-language-servers,
and a skipped server's line prints that command rather than a version
string.kin doctor --fix --install-language-serversinstalls servers only for the
repository's languages. It keeps installer output for a failed install,
says so before it writes outside Kin's directory, and refuses an installer
it found only outsidePATH, printing the command to run instead. A server
missing for a language the repository does not use no longer fails the
command.- Setup no longer warns that the VFS shim is missing on an install that ships
no filesystem projection. It prints one line saying projection is not part
of the install. kin_graph_statusno longer reports saved work asrecordedfrom a reading
taken before the latest admission. While the graph is changing it now waits,
up to five seconds, for writers and the pending admission to finish, and a
reading it still has to replay reports durabilityunknowninstead of an
all-clear.
What's Changed
- Read the startup recovery proof through supported surfaces by @troyjr4103 in #1828
- File the 0.8.0 changes under their release in the changelog by @troyjr4103 in #1829
- Prepare Kin 0.8.1 by @troyjr4103 in #1831
- Fix the merge and boundary failures 0.8.1 main CI found by @troyjr4103 in #1833
- Fix the regressions 0.8.1's acceptance suites found by @troyjr4103 in #1834
Full Changelog: v0.8.0...v0.8.1
v0.8.0
A graph-native code repository for people and AI agents.
v0.8.0 lands 44 changes, listed below.
[0.8.0] - 2026-09-26
Added
lexical_lookupfinds exact literals, including punctuation, in stored
graph fields: names, signatures, summaries, body previews and file context.
It reports the matching field and verified source line when available.
Stable content-bound pagination retains hits withheld by response limits.
Each page scans the scoped graph; previews can be bounded, so a miss does
not prove repository absence. Literal hits are distinct from resolved calls
and references.
Changed
- Breaking for MCP clients: every whole-entity replacement now carries the
source_baseof the version it replaces. Akin_mutate,
kin_transaction_stageorkin_transaction_commitoperation that sends
updateormodifywith abodyand no payload, or an explicitEntity
payload with abody, is refused assource_base_requiredbefore anything
is begun or applied. The fix is one step: callget_entity_source, then
resend with the entity's UUID astargetand
payload.EntitySourceBaseset to thesource_baseit returned, unchanged,
or send an anchoredEntitySourcePatch. A current read of an entity whose
span has no recorded source digest answerssource_base_unavailable
instead. An older repository may needkin upgrade; the caller must reread
and obtain a source base before editing, or report the verification gap. kin agent runno longer carriesedit_fileorwrite_file. The agent
changes code only throughkin_mutate, naming the entity it changes, and
KIN_AGENT_PURE_KINset to a false value, which used to add the two file
tools back, now makes the run refuse to start. Exit code6
(changes_unpublished) is retired with them, along with thelocal_calls,
unpublished_changesandfiles_changedfields of the result record.
entities_changedstill names every entity a run changed.entity_historyanswers a bounded page:offsetfrom 0,limit20 by
default and 100 at most, withchange_count,latest_change_id,
returnedandnext_offsetbesideresult[]. Each row is the change's
projection onto that one entity, with its originalid,originand
parentsand exact counts for the sections it leaves out.max_chars
bounds the reply from 2,000 to 60,000 UTF-8 bytes. An out-of-range or
non-integeroffset,limitormax_charsis refused with a structured
error instead of clamped. The daemon's raw route returns the same paging
object, so a client of it readsresult[]rather than a bare array.- Advance hydration semantics so stored derived graphs are re-evaluated using
the corrected Rust import and call extraction rules.
Fixed
find_referencesandkin refsconfirm a caller's site only when an edge
they count recorded it. A caller's row summarized every edge behind it, so
one proven edge confirmed every site that caller's other edges recorded:
on the gh CLI,RepoOwner()calls on aghrepo.Interfacevalue, recorded
only by the parser's receiver fan-out, read astype_resolvedcalls of
Repository.RepoOwnerbecause the same callers also call it directly. The
sites only a held edge recorded now travel as that caller's row in
candidates, under the resolution those edges earned, and the counted row
readsreference_lines_partial_reason: unconfirmed_sites_in_candidates.
kin refsprints them under the candidate headings, marked as belonging to
a caller counted above.- A store enriched before a Go method's reference sites were proven no longer
confirms the sites that answer widened. Released builds recorded an
interface method's gopls answer as it came, so every direct call of a
concrete method read as a reference to the interface method it implements,
and no later sweep removed those records. They are now read as no evidence,
the proven sites are recorded under their own evidence rule, and a Go file
an earlier build enriched is swept again to record them, while every other
language's files stay enriched. - A Go method's confirmed references are the sites gopls resolves to that
method. gopls answers a method's references with those of every method
related to it through interface satisfaction, and a site from that answer
is now recorded only when gopls's definition there is the method asked
about. A call through an interface stays a caller of the interface method
and an interface-dispatch candidate of each concrete method behind it, and
a direct call of a concrete method is no longer a reference to the
interface method it implements. - The language-server sweep records a Go file as enriched once its queries
are answered. gopls answers a request that does not apply where it was asked,
such as a type definition at a keyword or a call hierarchy at a package
clause, with an error, and those were counted as failed queries, so every Go
file was held back and every daemon start queried the whole repository again.
Those answers are now recognized by method and message, never by error code
alone. A file whose queries got no answer is recorded as owed with the
reason and asked again after a backoff, or sooner when its bytes change or a
sweep is requested, and/lsp/sweep/statuslists every owed file. The
completion marker now carries a version, so a store enriched by an earlier
build is swept once more. - Accepted language-server evidence is recorded in full. The crash record of
evidence not yet published refused new entries past 16 MiB, which one cold
sweep of a mid-size Go repository crosses, so evidence accepted after that
point did not survive a crash before the sweep's publication. - The language-server sweep keeps a Python file's proven references when one
declaration in it cannot be asked about. A decorated method's name query ran
past the end of its decorator line, and a module surface's past the end of a
short first line, and either failure discarded the whole file's definitions
pass. A failed declaration query could therefore discard references proved
by other declarations in the file. Each declaration is now
asked at the token its declaration line spells its name with, a module
surface is not asked about its own name at all, and a query that fails still
keeps the file from being recorded as enriched without costing it the
relations other queries proved. That includes a member expression whose
candidate export cannot be located. - An imported value read as a receiver, such as
current_appin
current_app.config[...], is a reference to that value when the language
server resolves it to the value's own declaration. It was read as a module
and recorded as nothing. - A Python definition or type answer counts only on the line that declares
what it names. An answer inside a property setter's body made the
attribute's own line a reference to the setter, and an import of a module
was read as a reference to whatever class the module's first line declares. - A call to a function defined in the caller's own file no longer also links
every same-named function in other files as a callee. Without a language
server, that linked each copy of a helper defined in several files to the
callers of every copy, sokin refsand impact answers listed callers from
files that call their own copy. Only a C or C++ prototype, or a local
definition whose parameter count cannot take the call, still hands the call
to same-named definitions elsewhere, and those stayname_onlycandidates. impact_analysisno longer certifies a zero consumer count when a file that
can reach the entity holds call sites that became no edge. Each entity it
reports with no consumers now carries thecaller_arrivalreading
find_referencesuses, and when that reading is incomplete the verdict is
inconclusive and names the files.kin impactreads the same block for an
empty answer.- A tracked file edited or deleted while no daemon ran is now admitted when the
next daemon starts, the way a watched edit is. Before, the startup catch-up
left tracked paths alone, so after an idle daemon exited the graph kept
answering from the old bytes: a renamed function was found only under its old
name, the new name was certified absent, and a deleted file stayed a top hit.
The daemon now plans the catch-up before it publishes its endpoint, reading
only tracked files whose modification or change time falls after the last
admission, and every answer readsinconclusiveunder
tracked_changes_unadmitteduntil they land. A command that starts the
daemon waits up to 30 s for that catch-up.kin statuswith no daemon
running names those files on a newTracked changes since the last admissionline, andkin graph statuswithholds its all-clear while any are
owed. Divergence that predates the last admission is still projection drift
forkin doctor --driftand--heal. - CLI data-flow traces apply
max_response_charsto the final serialized
UTF-8 bytes, including required resolution, terminal and clipping disclosures.
Bodies and branches are trimmed before emission; a response whose required
identity and disclosures still cannot fit is explicitly refused instead of
returning an oversized or misleading empty answer. The refusal no longer
suggests reducing depth or fan-out after the smallest retained walk fails,
and only suggests a larger budget below the 60,000-byte maximum. - The MCP
trace_data_flowtool answers the same walk instead of refusing it.
Every MCP reply carries an envelope the walk's budget does not count, so a
refusal there shipped over the budget too, only without the chain. Below its
floor the tool now returns the smallest retained walk, cut and disclosed the
way a walk that fit would be, with aresponse_over_budgetde...
v0.7.21
A graph-native code repository for people and AI agents.
v0.7.21 lands 8 changes, listed below.
[0.7.21] - 2026-09-18
Added
find_referencesacceptsanswer_only. The reply is the reference rows with
the focal, the relation kinds searched, the headline count and the number of
unconfirmed candidates held out of it, the degradations, the budget's own
disclosure, and a_kinreduced to the verdict's state, whether absence is
safe to conclude, and the limiting factor. Nothing else is removed from the
tool; a caller who omits the parameter gets the whole reply. Measured over the
same 75 frozen queries, ananswer_onlyreply is 2,273 bytes mean on the wire
against 10,013 for the whole reply.
Changed
- A
querytofind_referencesthat names the owner is exact:
Receiver.methodin Go,Owner.memberin TypeScript. A bare name shared by
several declarations is ranked, prefers the most referenced one, and says so
infocal_resolution. The tool description now says this; the resolver has
not changed.
Fixed
- A TypeScript interface or class member now has its own entity, named
Owner.member, so references to it resolve instead of falling to a bare-name
guess. Two upstream grammar defects that left a fifth of the lines in eight
files unreadable are fixed in a vendored TypeScript grammar. Measured against
the compiler onhonojs/hono: pooled F1 0.6441 to 0.9365, and the sixteen
reference lines that never spell the declaration's name are found fourteen
times over, as before. find_referenceson a Go interface method now answers where the method is
implemented. Aninterface_implementationsblock names each concrete method
whose receiver type satisfies the interface, with the file and line of its
declaration and the files those declarations live in. Measured against the
compiler oncli/cli: implementation sites 0.0000 to 0.9469, implementation
files 0.0754 to 0.9390.- The reply budget cuts the answer last. The unproven candidate lists that
qualify afind_referencesanswer, including the interface-dispatch
candidates nested inside their own block, are cut before the reference rows,
and a list is trimmed again before the answer is made to pay for the record of
that cut. On the study's largest reply, all three reference rows now return
where two were elided before. - A daemon whose filesystem reconcile is switched off no longer reports a
working copy as compared when nothing compared it.host_bytesreads
unchecked, the verdict namesfile_bytes_uncheckedas the limiting factor,
and the answer is not certified. reconciliation_statussays when an idle reconcile loop stopped with work
still outstanding, and the reply nameskin admitas the command that takes
the working tree. Two messages that told a caller to runkin reconcilefor
that are corrected.- A file with no parse record reads
parsed: unrecordedinstead ofabsent,
which is the word for a file something parsed and found empty.
What's Changed
- Update kin source by @troyjr4103 in #1805
Full Changelog: v0.7.20...v0.7.21
v0.7.20
A graph-native code repository for people and AI agents.
v0.7.20 lands 27 changes, listed below.
[0.7.20] - 2026-09-16
Added
kin setupopens with a hardware check. It names the architecture, the
physical and logical core counts, the memory and the accelerator this machine
reports, then names the resource profile that follows from them and why. The
figures come from the samekin-inferdetection the embedding budgets and
kin resources inspectare derived from, so there is one answer to what this
machine is.kin setup --intent advancedcan adjust that profile, with a plain warning
that a profile budgeting past what the machine actually has can exceed safe
memory and GPU thresholds and crash it. An adjustment is recorded in
~/.kin/config/setup.toml, and bothkinandkin-daemonadopt it at their
next start. An exportedKIN_RESOURCE_PROFILEand a repository's
[resources]config both still outrank it, andkin resources inspect
reports which of the four chose the profile in effect.kin setup --resource-profile <proof|interactive|throughput|ci>records the
machine profile without the prompt.kin setupnow asks when the embedding model is fetched. The answer defaults
to later, nothing downloads during setup, andkin embedstarts the fetch
when it is wanted. Answering that this machine does not fetch it is recorded,
andkin doctor,kin graph statusandkin resources inspectthen report a
choice rather than a gap. An air-gapped host is unaffected either way.
--embedding-model <later|never>is the scripted answer.kin setupnow asks where vectors are computed, recommends local, and states
that a remote OpenAI-compatible provider sends entity text to the endpoint you
configure. Choosing remote prints the environment variables that provider
needs and collects no credential.--embedding-provider <local|remote>is the
scripted answer.- An npm or npx install is now asked before
~/.kin/binis added to the shell
profile, because that channel cannot make the edit itself and the cost of
skipping it is re-downloading the release archive on everynpxrun. The
edit is recorded in the same install ledger the curl installer's line reaches,
sokin setup uninstallremoves exactly it.--skip-pathdeclines. - An interactive run now asks before the MCP round trip that proves each
configured client can actually reach Kin, and recommends running it. A
scripted run keeps it on and, on a machine with no repository yet, reports the
skip with its reason as it already did. - A non-interactive
kin setupnow prints every decision it answered for you,
the value it took, and the command or flag that changes it later.
Changed
-
MCP
find_referencesanswers Go interface dispatch candidates, with truthful
counts that keep a candidate out of the proven total (#78) -
The agent belt's response ceiling is per tool:
trace_data_flowand
get_context_packare served the agent's own 24,576 byte per-result limit and
every other budgeted tool keeps 12,000 (#78) -
The seven session and transaction tools describe themselves as write plumbing,
and the MCP server instructions name the query tools one line each, so a client
that ranks tools by description can find the tools that answer a code question
(#77, in #83) -
Regenerate the KinLab Kin reference data from a current binary and gate it
against going stale again (#83) -
kin agent runputs the Kin-only belt on the model by default: noedit_file,
nowrite_file, and the one write tool iskin_mutate, which names the
entity it changes.KIN_AGENT_PURE_KIN=falseadds the two file tools back. -
Remove a
kin-vfsand shim pair left by an earlier release. The installer clears them
when the archive carries no projection runtime, andkin updatedoes the same on its
next run, so a 0.7.17 projection client cannot sit on PATH beside a newer daemon. -
KIN_RESOURCE_PROFILEgained a fourth provenance: the machine-wide profile
kin setuprecorded, reported bykin resources inspectand marked by
KIN_RESOURCE_PROFILE_HOST_CONFIGso a spawned daemon does not read it as an
operator override.
Fixed
-
The install ledger now follows every value Kin itself records in
~/.kin/config/setup.toml. The wizard's embedding model and provider answers
are written after the ledger has fingerprinted that file, so a second
kin setuprun that recorded either answer leftkin doctorand
kin setup statusreporting the ledger STALE with one artifact modified
since install on a machine nobody but Kin had touched.kin vfs onand
kin setup --resource-profilewrite the same file and are covered by the
same refresh -
Stop the repo daemon wedging on its own entity read lock.
graph_statsheld
the entity read guard acrossembedding_status, which reads that same lock
again, and one queued writer parked the whole process at zero CPU with its
listening socket still open (#79) -
kin daemon stopcan now end a daemon that cannot answer HTTP, escalating to
SIGTERM and then SIGKILL only after proving the recorded incarnation is still
live and is running a Kin image (#79) -
kin daemon statusreports a held-but-not-accepting socket as wedged rather
than as a closed port, and a daemon that never said it was warming and answers
nothing is reported in twenty seconds rather than after the full readiness
budget (#79) -
Count an embedding coverage gap and an embedding backlog apart, so
indexed + pending == totalholds on every answer and a re-embed of an
already indexed key is reported as queued work (#80) -
The envelope's embedding class distinguishes a partly built vector index from
an absent one, so a 99.99 percent complete index is no longer published as
having no vector index at all (#77, in #83) -
Record the syntax position on the call edges of the nine language adapters
that carried none, so everyCallsedge in the fleet can report its call site
(#75 in #81, #81) -
Extract the calls the Ruby and Swift adapters dropped entirely, and record the
macro-use and C++ type alias sites beside them (#84) -
A byte-match refusal on an entity source edit now explains why the text did
not match, quotes the file's exact bytes, and names the entity-level route, and
a target refused twice is not attempted a third time (#86) -
Pin the anchor flag in the
kin locatetests that read anchors, so a
neighbouring test's environment cannot empty their anchor set (#87) -
Stop requiring the retired
kin-vfsprojection runtime and its shim when judging a
release archive. 0.7.18 removed both from the archive, and every updater built before
this change still demands them, sokin updaterefuses the release withrelease archive is incomplete: required component 'kin-vfs' is missing. An install on 0.7.19
or earlier cannot repair itself and must re-run the installer
(curl -fsSL https://get.kinlab.dev/install | sh, or
irm https://get.kinlab.dev/install.ps1 | iexon Windows). The installer reads the
archive it downloads rather than a list fixed when it was built, so it always reaches
the current release. -
Name the installer in the refusal, so the next time a release changes the archive's
shape the error carries the one command that recovers the install.
What's Changed
- Update kin source by @troyjr4103 in #1792
- Update kin source by @troyjr4103 in #1794
- Update kin source by @troyjr4103 in #1796
- Update kin source by @kin-public-export[bot] in #1797
New Contributors
- @kin-public-export[bot] made their first contribution in #1797
Full Changelog: v0.7.19...v0.7.20
v0.7.19
A graph-native code repository for people and AI agents.
v0.7.19 lands 1 change, listed below.
[0.7.19] - 2026-09-13
Changed
- Complete the v0.7.18 lockstep notes and npm versions (#1788)
What's Changed
- Complete the v0.7.18 lockstep notes and npm versions by @troyjr4103 in #1788
- Release Kin v0.7.19 by @troyjr4103 in #1789
Full Changelog: v0.7.18...v0.7.19
v0.7.18
A graph-native code repository for people and AI agents.
The changes in this release are listed below.
What's Changed
- Guard native agent writes and simplify release archives by @troyjr4103 in #1781
- fix(cli): skip profile for top-level display flags by @kocaemre in #1778
- docs: explain C# and Ruby test detection gap by @vikas-kushwaha-dev in #1780
- Update kin source by @troyjr4103 in #1785
- chore: bump version to 0.7.18 by @troyjr4103 in #1787
Full Changelog: v0.7.17...v0.7.18
v0.7.17
A graph-native code repository for people and AI agents.
v0.7.17 lands 5 changes, listed below.
[0.7.17] - 2026-09-12
Changed
- Compact MCP response envelopes and preserve diagnostic causes (#1773)
- docs(claude): add plugin requirements (#1774)
- fix(cli): show continue alias in resolve help (#1776)
- Package release-matched desktop MCP binaries and maintainer metadata (#1777)
Changed
- Show the
--continuealias inkin resolve --help.
What's Changed
- Compact MCP response envelopes and preserve diagnostic causes by @troyjr4103 in #1773
- docs(claude): add plugin requirements by @kocaemre in #1774
- fix(cli): show continue alias in resolve help by @vikas-kushwaha-dev in #1776
- Package release-matched desktop MCP binaries and maintainer metadata by @troyjr4103 in #1777
- Release Kin v0.7.17 by @kin-release-bot[bot] in #1775
New Contributors
- @kocaemre made their first contribution in #1774
- @vikas-kushwaha-dev made their first contribution in #1776
Full Changelog: v0.7.16...v0.7.17
v0.7.16
A graph-native code repository for people and AI agents.
v0.7.16 lands 20 changes, listed below.
[0.7.16] - 2026-09-12
Changed
- Record kin-vfs as parked in the ecosystem manifest and kin's own docs (#1748)
- Refuse a scope spelled in none of the documented forms instead of reading it as a path (#1749)
- Key the footprint publish cadence by store root (#1751)
- Mark the four file-path tool parameters deprecated and say so in the answer (#1752)
- Take the loopback fixture's accepted socket out of non-blocking mode (#1753)
- Bring kin-blobs, kin-model, kin-search and kin-vector into the workspace with their history (#1747)
- Lock the Kin agent belt to Kin tools and let a mutation name its own change (#1738)
- Anchor a review note on the entity that holds the line it names (#1759)
- Count a staged release hold as work in flight while the cut is switched on (#1757)
- Read the query and command authority wrappers through the daemon's held open (#1761)
- Bring kin-infer, kin-lsp and kin-vfs-core into the workspace with their history (#1758)
- Compare the kin-vfs-core the release builds with, wherever it comes from (#1763)
- Stop the witness search spending its budget on a class no build can mint (FIR-3541) (#1764)
- Raise release alarms on kin-infra through an issues-only App token (#1762)
- Lead a release with what it is, not with what has not been measured (#1760)
- Name the namespace an entity lives in, one rule per language (#1767)
- Consolidate kin-db into the workspace (Tranche 3) (#1768)
- Give a Rust entity's span its doc comment and attributes, and keep its id on the declaration (#1766)
- Lead a release with what it is, and stop publishing a pending-proof sentence (#1769)
- Let the release-intent gate accept independently versioned crates (#1765)
What's Changed
- Record kin-vfs as parked in the ecosystem manifest and kin's own docs by @troyjr4103 in #1748
- Refuse a scope spelled in none of the documented forms instead of reading it as a path by @troyjr4103 in #1749
- Key the footprint publish cadence by store root by @troyjr4103 in #1751
- Mark the four file-path tool parameters deprecated and say so in the answer by @troyjr4103 in #1752
- Take the loopback fixture's accepted socket out of non-blocking mode by @troyjr4103 in #1753
- Bring kin-blobs, kin-model, kin-search and kin-vector into the workspace with their history by @troyjr4103 in #1747
- Lock the Kin agent belt to Kin tools and let a mutation name its own change by @troyjr4103 in #1738
- Anchor a review note on the entity that holds the line it names by @troyjr4103 in #1759
- Count a staged release hold as work in flight while the cut is switched on by @troyjr4103 in #1757
- Read the query and command authority wrappers through the daemon's held open by @troyjr4103 in #1761
- Bring kin-infer, kin-lsp and kin-vfs-core into the workspace with their history by @troyjr4103 in #1758
- Compare the kin-vfs-core the release builds with, wherever it comes from by @troyjr4103 in #1763
- Stop the witness search spending its budget on a class no build can mint (FIR-3541) by @troyjr4103 in #1764
- Raise release alarms on kin-infra through an issues-only App token by @troyjr4103 in #1762
- Lead a release with what it is, not with what has not been measured by @troyjr4103 in #1760
- Name the namespace an entity lives in, one rule per language by @troyjr4103 in #1767
- Consolidate kin-db into the workspace (Tranche 3) by @troyjr4103 in #1768
- Give a Rust entity's span its doc comment and attributes, and keep its id on the declaration by @troyjr4103 in #1766
- Lead a release with what it is, and stop publishing a pending-proof sentence by @troyjr4103 in #1769
- Let the release-intent gate accept independently versioned crates by @troyjr4103 in #1765
- Release Kin v0.7.16 by @kin-release-bot[bot] in #1770
- Simplify contributor workflow around native tasks by @troyjr4103 in #1771
- Fix database feature gating and concurrent model tests by @troyjr4103 in #1772
Full Changelog: v0.7.15...v0.7.16
v0.7.15
First-contact proof pending. This release cleared the machine preflight on its
own bytes. It has NOT been through the stranger arms (green, brown, vcs) that
measure what a first-time user actually meets. It ships and is promoted anyway,
so this notice is how you tell it apart from a release that was measured.
[0.7.15] - 2026-09-11
Changed
- Bound agent tool results, context and endpoint waits (FIR-3545) (#1694)
- Level the live graph with repository authority instead of refusing every later admission (FIR-3546) (#1696)
- Report an empty graph and a missing repository as graph gaps (FIR-3543) (#1695)
- Publish agent writes through authority and accept a working copy at the staged bytes (FIR-3550) (#1697)
- Run one exact MCP commit per transaction and let a re-sent request join it (FIR-3550) (#1704)
- Grade an agent's write end to end in product acceptance (FIR-3550) (#1703)
- Answer find_references from the last certified graph when a writer holds every settle attempt (FIR-3540) (#1705)
- Resolve a name one way in refs, impact and graph source, and mark stale pointers (#1702)
- Configure LM Studio and the Grok CLI in kin setup, and read an artifact by its label (FIR-3544) (#1706)
- Write nothing when an agent edit cannot open a transaction, and re-open a gone session (FIR-3550) (#1708)
- Read a standalone daemon in kin status and name any open beside a live one (FIR-3542) (#1710)
- Run the admission off the runtime worker and answer /health without an authority load (FIR-3542) (#1711)
- Keep the agent's Kin session alive through a long model turn (#1709)
- Return a UTF-8 artifact as text alone, and its bytes only on request (#1714)
- Grade an agent edit made after its daemon restarts (FIR-3550) (#1715)
- Start the same language server from every daemon and name what a daemon cannot serve (FIR-3551) (#1717)
- Serve blame and history from the daemon's held authority (FIR-3547) (#1713)
- Record a watchdog force exit as the daemon ending itself, and date and name a daemon's ending (FIR-3549) (#1716)
- Serve repo-scoped review reads and semantic diff on the multi-repo daemon surface (#1718)
- Say why an entity has no history in blame and history (FIR-3547) (#1719)
- Commit review state to repository authority so reviews survive a restart (#1720)
- Mark the files a sweep finished even when another file's query failed (#1721)
- End a stop at once when its in-flight flush cannot finish inside the grace (FIR-3549) (#1723)
- Name the cross-file edges a graph still holds when no language server can run (#1722)
- Keep the owner a qualified call wrote when linking by leaf (#1724)
- Hold one repository authority per publication for the daemon's own readers (#1725)
- Carry review records through kin push and kin pull (#1727)
- Answer a hosted context pack on the most-called entity instead of a retryable 503 (#1728)
- Read and commit an exact MCP commit through the daemon's held authority (#1729)
- Add the agent-write suite to the acceptance inventory and run the visibility rule on pull requests (#1730)
- docs: first-screen agent onboarding, allow fork PRs to pass secret scan (#1731)
- Bound an answer only by the degraded flags that describe what it reads (FIR-3541) (#1726)
- Rank, page and describe the hosted entity list (#1739)
- Record a reviewer's removal so it survives a push and a pull (#1742)
- Give the Linux release build legs swap for the fat-LTO peak (#1741)
- Read a daemon's death off the record rather than off the sentence it rendered (#1743)
- Answer the file enumeration's pagination honestly on its last page and its cut ones (#1740)
- Record v0.7.14 as an abandoned release tag (#1744)
- Decide a flush publication from the live graph before materializing authority (#1745)
Carried forward from v0.7.14
The following tag was superseded before its release completed, so the notes recorded for it are collected here.
[0.7.14] - 2026-09-11
Changed
- Grade the flake quarantine's clock on the UTC date (FIR-3531) (#1691)
- Move to kin-db 0.7.112 and keep a tracked nested control directory through projection (FIR-3527) (#1692)
What's Changed
- Bound agent tool results, context and endpoint waits (FIR-3545) by @troyjr4103 in #1694
- Level the live graph with repository authority instead of refusing every later admission (FIR-3546) by @troyjr4103 in #1696
- Report an empty graph and a missing repository as graph gaps (FIR-3543) by @troyjr4103 in #1695
- Publish agent writes through authority and accept a working copy at the staged bytes (FIR-3550) by @troyjr4103 in #1697
- Run one exact MCP commit per transaction and let a re-sent request join it (FIR-3550) by @troyjr4103 in #1704
- Grade an agent's write end to end in product acceptance (FIR-3550) by @troyjr4103 in #1703
- Answer find_references from the last certified graph when a writer holds every settle attempt (FIR-3540) by @troyjr4103 in #1705
- Resolve a name one way in refs, impact and graph source, and mark stale pointers by @troyjr4103 in #1702
- Configure LM Studio and the Grok CLI in kin setup, and read an artifact by its label (FIR-3544) by @troyjr4103 in #1706
- Write nothing when an agent edit cannot open a transaction, and re-open a gone session (FIR-3550) by @troyjr4103 in #1708
- Read a standalone daemon in kin status and name any open beside a live one (FIR-3542) by @troyjr4103 in #1710
- Run the admission off the runtime worker and answer /health without an authority load (FIR-3542) by @troyjr4103 in #1711
- Keep the agent's Kin session alive through a long model turn by @troyjr4103 in #1709
- Return a UTF-8 artifact as text alone, and its bytes only on request by @troyjr4103 in #1714
- Grade an agent edit made after its daemon restarts (FIR-3550) by @troyjr4103 in #1715
- Start the same language server from every daemon and name what a daemon cannot serve (FIR-3551) by @troyjr4103 in #1717
- Serve blame and history from the daemon's held authority (FIR-3547) by @troyjr4103 in #1713
- Record a watchdog force exit as the daemon ending itself, and date and name a daemon's ending (FIR-3549) by @troyjr4103 in #1716
- Serve repo-scoped review reads and semantic diff on the multi-repo daemon surface by @troyjr4103 in #1718
- Say why an entity has no history in blame and history (FIR-3547) by @troyjr4103 in #1719
- Commit review state to repository authority so reviews survive a restart by @troyjr4103 in #1720
- Mark the files a sweep finished even when another file's query failed by @troyjr4103 in #1721
- End a stop at once when its in-flight flush cannot finish inside the grace (FIR-3549) by @troyjr4103 in #1723
- Name the cross-file edges a graph still holds when no language server can run by @troyjr4103 in #1722
- Keep the owner a qualified call wrote when linking by leaf by @troyjr4103 in #1724
- Hold one repository authority per publication for the daemon's own readers by @troyjr4103 in #1725
- Carry review records through kin push and kin pull by @troyjr4103 in #1727
- Answer a hosted context pack on the most-called entity instead of a retryable 503 by @troyjr4103 in #1728
- Read and commit an exact MCP commit through the daemon's held authority by @troyjr4103 in #1729
- Add the agent-write suite to the acceptance inventory and run the visibility rule on pull requests by @troyjr4103 in #1730
- docs: first-screen agent onboarding, allow fork PRs to pass secret scan by @troyjr4103 in #1731
- Bound an answer only by the degraded flags that describe what it reads (FIR-3541) by @troyjr4103 in #1726
- Rank, page and describe the hosted entity list by @troyjr4103 in #1739
- Record a reviewer's removal so it survives a push and a pull by @troyjr4103 in #1742
- Give the Linux release build legs swap for the fat-LTO peak by @troyjr4103 in #1741
- Read a daemon's death off the record rather than off the sentence it rendered by @troyjr4103 in #1743
- Answer the file enumeration's pagination honestly on its last page and its cut ones by @troyjr4103 in #1740
- Record v0.7.14 as an abandoned release tag by @troyjr4103 in #1744
- Decide a flush publication from the live graph before materializing authority by @troyjr4103 in #1745
- Release Kin v0.7.15 by @kin-release-bot[bot] in #1746
Full Changelog: v0.7.14...v0.7.15
v0.7.13
First-contact proof pending. This release cleared the machine preflight on its
own bytes. It has NOT been through the stranger arms (green, brown, vcs) that
measure what a first-time user actually meets. It ships and is promoted anyway,
so this notice is how you tell it apart from a release that was measured.
[0.7.13] - 2026-09-11
Changed
- Replace the superseded category line in the Homebrew gate fixture (#1684)
- Resolve the CLI's local graph open through the daemon's own namespace rule (FIR-3498) (#1685)
- Retire the FIR-2809 quarantine row after 15 days without a retry (#1687)
- Hold the reconcile loop's own admission after a run of failures (FIR-3504, FIR-3506) (#1686)
- Isolate the stand-down footprint publish from the suite clock (#1689)
What's Changed
- Replace the superseded category line in the Homebrew gate fixture by @troyjr4103 in #1684
- Resolve the CLI's local graph open through the daemon's own namespace rule (FIR-3498) by @troyjr4103 in #1685
- Retire the FIR-2809 quarantine row after 15 days without a retry by @troyjr4103 in #1687
- Hold the reconcile loop's own admission after a run of failures (FIR-3504, FIR-3506) by @troyjr4103 in #1686
- Isolate the stand-down footprint publish from the suite clock by @troyjr4103 in #1689
- Release Kin v0.7.13 by @kin-release-bot[bot] in #1690
Full Changelog: v0.7.12...v0.7.13