Recipes · Engineering

A reviewer that earns a `review_pr` tool after five reviews.

Turn skills on, run the reviewer five times, approve the candidate the synthesiser proposes — from the next run the agent calls `review_pr` as one tool instead of orchestrating three.

Chihab · · Intermediate · 8 min read

v0.26 added `@tuttiai/skills`. The runtime observes every successful trajectory, the proposer drafts a candidate when the same shape repeats `auto_propose_threshold` times, and an operator decides with `tutti-ai skills review`. Permissions on the synthesised skill are the union of the constituents — checked at run start. Nothing reaches the agent until you approve.

Score file
import { defineScore, AnthropicProvider } from '@tuttiai/core'
import { InMemorySkillStore } from '@tuttiai/skills'
import { GitHubVoice } from '@tuttiai/github'
import { FilesystemVoice } from '@tuttiai/filesystem'

export default defineScore({
  provider: new AnthropicProvider(),
  default_model: 'claude-sonnet-4-6',
  entry: 'code-reviewer',
  agents: {
    'code-reviewer': {
      name: 'Code Reviewer',
      permissions: ['network', 'filesystem'],
      voices: [new GitHubVoice(), new FilesystemVoice()],
      system_prompt:
        'Review the user\'s PR. Read each changed file, post a consolidated review comment.',
    },
  },
  skills: { enabled: true, auto_propose_threshold: 5 },
})

export const skillStore = new InMemorySkillStore()
How to run it
  1. 01 Scaffold a project: npx tutti-ai init my-self-improving-reviewer
  2. 02 Install voices: npm i @tuttiai/github @tuttiai/filesystem
  3. 03 Drop the score above into tutti.score.ts, set the env vars in .env, and run tutti-ai run.
Why this is safe
  • Operator approval gates every candidate
  • skills.enabled: true + a SkillStore
Related

More like this.

Start conducting.

One install. Your first agent running in 60 seconds. No signup. No telemetry.