Skip to main content

A WRITTEN EXAMPLE

Change one part. What else uses it?

React is software used to build website interfaces. In this example, Kin found other parts of React that use the same small piece of code. Those connections give a developer places to inspect before making a change. This written example includes saved output from an earlier Kin version. Back to the homepage

Text fields, dropdowns and text areas in React share a small piece of code. Kin's saved answer points to the places that use it, so a developer can check those connections against the source.

A caller is another piece of code that uses the part being inspected. The saved answer names those callers and points to their source.

View the command, saved output and source

SAVED 2026-09-07 v0.7.3

kin refs getToStringValue --kind callsReferences to 'getToStringValue' -> getToStringValue (Function) @ packages/react-dom-bindings/src/client/ToStringValue.js
referenced by 8 entities:
  hydrateInput @ packages/react-dom-bindings/src/client/ReactDOMInput.js:363 [Calls] (type_resolved) sites 373,375
  initInput @ packages/react-dom-bindings/src/client/ReactDOMInput.js:222 [Calls] (type_resolved) sites 258,260,277,278
  updateInput @ packages/react-dom-bindings/src/client/ReactDOMInput.js:88 [Calls] (type_resolved) sites 133,135,136,149,170,172,175,216
  hydrateSelect @ packages/react-dom-bindings/src/client/ReactDOMSelect.js:161 [Calls] (type_resolved) sites 194
  updateOptions @ packages/react-dom-bindings/src/client/ReactDOMSelect.js:63 [Calls] (type_resolved) sites 90
  hydrateTextarea @ packages/react-dom-bindings/src/client/ReactDOMTextarea.js:152 [Calls] (type_resolved) sites 168
  initTextarea @ packages/react-dom-bindings/src/client/ReactDOMTextarea.js:93 [Calls] (type_resolved) sites 130
  updateTextarea @ packages/react-dom-bindings/src/client/ReactDOMTextarea.js:64 [Calls] (type_resolved) sites 73,87

Every row names the calling function, its file, and the line the call sits on. Open getToStringValue on GitHub at the same revision and check them.

Kin release
v0.7.3 / macOS arm64
Kin commit
72f1cfba717b5fde8a7d6de261526a6c99a422e9
Repository revision
9b7a0d4029ee31f84446383b6530075f423e9904

A SAVED SESSION

Inspect, change, record, return.

A saved session on Kin 0.7.19. The same code was inspected, changed, recorded in Kin and asked about again from a new shell. It shows continuity, which the React snapshot above cannot.

The same small project, asked the same question before and after a recorded change. The callers come back the same from a new shell, and the same request a coding agent's MCP client sends returns the same callers too.

View the commands and saved output

SAVED 2026-09-16 v0.7.19

1. Inspect

kin refs applyDiscount --kind callsReferences to 'applyDiscount' -> applyDiscount (Function) @ discount.ts:1
referenced by 3 entities:
  cartTotal @ cart.ts:3 [Calls] (type_resolved) sites 4
  checkoutAmount @ checkout.ts:3 [Calls] (type_resolved) sites 4
  receiptLine @ receipt.ts:3 [Calls] (type_resolved) sites 4

2. Change, shown as the hunk at the end of the diff

kin diff   @@ -1,3 +1,4 @@
    export function applyDiscount(price: number, percent: number): number {
   -  return price - (price * percent) / 100;
   +  const discount = Math.min((price * percent) / 100, price / 2);
   +  return price - discount;
    }

3. Record. Kin printed a second line saying the change is recorded in Kin's own history rather than Git's; it is stated here instead of shown.

kin commit -m "Cap the discount at half the price"Created semantic change 5d094ad61bdfbfbcdda0819887dfd78dffacfb5253907834af93317d549b66e6 on branch 'refs/heads/main' (2 entities, 25 relations, 1 artifacts)

4. Return, from a new shell

kin logchange 5d094ad61bdfbfbcdda0819887dfd78dffacfb5253907834af93317d549b66e6
Author: Kin Example <example@localhost>
Date:   2026-09-16T13:42:25.091897+00:00
Origin: native
Parents: 97a2beb82566c47e1a7e2c0a1a64330776e8db0e74c38936f7d0ff53f10232d9
Deltas: entities=2 relations=25 tree=1 policy=false
    Cap the discount at half the price

change 97a2beb82566c47e1a7e2c0a1a64330776e8db0e74c38936f7d0ff53f10232d9
Author: Kin Example <example@localhost> 1789566019 -0400
Date:   2026-09-16T13:40:19+00:00
Origin: git commit 871cca9359680e0448be12a464a0f3661e6c821b
Deltas: entities=8 relations=13 tree=6 policy=true
    Initial commit
    
    Signed-off-by: Kin Example <example@localhost>
    
Workspace tip: projected at refs/heads/main (5d094ad61bdfbfbcdda0819887dfd78dffacfb5253907834af93317d549b66e6)
Answered by: this repository's daemon, from the authority it already holds open for the current publication
kin refs applyDiscount --kind callsReferences to 'applyDiscount' -> applyDiscount (Function) @ discount.ts:1
referenced by 3 entities:
  cartTotal @ cart.ts:3 [Calls] (type_resolved) sites 4
  checkoutAmount @ checkout.ts:3 [Calls] (type_resolved) sites 4
  receiptLine @ receipt.ts:3 [Calls] (type_resolved) sites 4

The MCP tools/call request, sent by a script as an agent's MCP client would, and the reference rows that came back

find_references {"query":"applyDiscount"}[
  {
    "name": "cart",
    "kind": "Module",
    "relation_kinds": [
      "imports",
      "references"
    ]
  },
  {
    "name": "cartTotal",
    "kind": "Function",
    "relation_kinds": [
      "calls",
      "references"
    ]
  },
  {
    "name": "checkout",
    "kind": "Module",
    "relation_kinds": [
      "imports",
      "references"
    ]
  },
  {
    "name": "checkoutAmount",
    "kind": "Function",
    "relation_kinds": [
      "calls",
      "references"
    ]
  },
  {
    "name": "receipt",
    "kind": "Module",
    "relation_kinds": [
      "imports",
      "references"
    ]
  },
  {
    "name": "receiptLine",
    "kind": "Function",
    "relation_kinds": [
      "calls",
      "references"
    ]
  }
]

AN EARLIER WRITTEN EXAMPLE

Keeping a history of a change.

These older saved results show Kin keeping a change in its own history, in a small project that was not using Git. They illustrate a different task from the React example above.

An earlier saved session on a small Python project with no Git. Kin refused the first commit because no author was set, then recorded the change once one was.

View the change commands and saved output

HISTORICAL TERMINAL EXCERPT / v0.6.7

kin commit -m "Record the invoice calculation"Created semantic change 324ea310ae3c236dbe5384e573536f3e325d056d6df51e754baad00e3b26a8ea on branch 'refs/heads/main' (3 entities, 1 relations, 1 artifacts)
kin trace total_with_tax --file billing.py --compacttotal_with_tax (Function) @ billing.py
// total_with_tax ("billing.py", python)
def total_with_tax(subtotal, rate):
     return round(subtotal * (1 + rate), 2)

--- Deps ---
Read the first attempt and recorded history

The first attempt came before an author was set. Kin refused it.

kin commit -m "Record the invoice calculation"Error: config error: kin has no author identity to record for this change.

Authorship is provenance. A change attributed to nobody cannot support review attribution, blame, or audit, and it cannot be corrected later without rewriting history, so kin refuses to invent one.

Set your Git identity:
  git config --global user.name "Your Name"
  git config --global user.email "you@example.com"
Or set a Kin-specific author in .kin/config.toml:
  default_author = "Your Name <you@example.com>"

After setting a local author, the same commit command succeeded. The recorded history follows.

kin logchange 324ea310ae3c236dbe5384e573536f3e325d056d6df51e754baad00e3b26a8ea
Author: Kin Example <example@localhost>
Date:   2026-09-05T00:08:25.061847+00:00
Origin: native
Deltas: entities=3 relations=1 tree=1 policy=true
    Record the invoice calculation