Repository navigation
Conversation
A malformed .duolog/routing.learned.yaml no longer fails Load while learning is off. Tests pin that, the skipping of an unparsable learned-order key, and the rejection of an unknown judge model. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Rules match the lead's feature answers, or the role, in order. A choice walks the learned order, then the configured ladder, and skips agents that are unavailable. The router can take the chosen target and run it as a worker even when it equals the lead. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The journal keeps NDJSON records under .duolog/journal/ and the open task of each lead. Trees are captured through a temporary Git index, so the real index stays untouched and untracked files count. duolog task start records the base commit of a task. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Append cuts a partial last line before writing, NumStat reads NUL-separated paths without rename detection, and task start tells a repository without commits from a directory outside Git. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Append now keeps a final line that already parses and only cuts a fragment that does not, reading just the tail of the file. InGit is exported directly. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
delegate takes --features or --class, picks the class's ladder entry instead of the role's target and runs it as a worker even when it equals the lead. Each delegation gets a journal record with cost, time, gate denials and changed paths, and a local copy of its task, answer and patches for profiling. The result line names the delegation. Tree capture no longer names .duolog in its git add pathspec: git refuses a pathspec for an ignored path, and projects ignore .duolog. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…empt A capture kept duolog's own state out by dropping all of .duolog, which also dropped a committed .duolog/config.yaml, so before.patch deleted it. It now drops only the .duolog paths the project does not track. A wait for the lead decided before any worker starts is journalled with the outcome lead. The record describes the final attempt, so a run here after a quota fallback is recorded as such, and a failed tree capture records no run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
TestHookCatalogHasDeadlineAndRecovers took 4.2 s on windows-latest against a 3 s bound; the fake sleeps 60 s, so 10 s still proves the deadline. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
TestLogin/done timed out on windows-11-arm: starting the fake agent took more than the 500 ms that every case had. Only the timeout case keeps the short wait and the bound check now. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
.duolog/sync.lock.json stays a local file: sync keeps working in this checkout, and Git ignores it in both ignore files. CI now regenerates the skill copies and compares them with Git instead of `sync --check`, which needs the lock. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
--escalate-from names the delegation the lead leaves and --reason one of the signals the skill lists. The journal counts it as a failure of the entry it left. A run that hit a provider limit, went back to the lead, ran on the role's own target or was the person's choice is not escalated from. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
learn reads the journal: confirmed verdicts at full weight, the person's task outcome and failures at half weight, and priors as pseudo-runs. Quality-first classes take the best entry, or a cheaper one close to it; cost-first classes take the cheapest entry that clears the threshold. It prints the change as a diff with its evidence, and --apply writes .duolog/routing.learned.yaml. A provider limit or a wait for the lead counts for nothing, and learning.prior_runs must be above zero. Co-Authored-By: OpenAI Codex gpt-6.1-sol <noreply@openai.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The repository's Claude and Codex hooks call scripts/dev/bin/duolog, which builds .cache/dev/duolog when a source file is newer and runs it; a PowerShell copy serves Codex on Windows. On SessionStart it copies the skills from plugin/ and puts itself on the Claude session's PATH. The duolog plugin is off in this repository so that no gate runs twice. .duolog/config.yaml passes the Go settings to workers, .duolog/learned.yaml lets them run the repository's checks, and .codex/rules and .claude/settings.json let the lead run them. AGENTS.md also asks agents to use codegraph when it is available. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
duolog task finish prints what ran on what and what it cost, at most two offers with a cost estimate from the journal, and the outcome question; duolog task outcome records the answer. duolog stats --classes reads the journal. An offer whose cost cannot be estimated is not made. Co-Authored-By: OpenAI Codex gpt-6.1-sol <noreply@openai.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
AGENTS.md asks for a Co-Authored-By line for Codex, with its model, whenever Codex wrote or changed code in a commit, and CLAUDE.md points Claude sessions at the rule. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SessionStart says when learning mode is on, and duolog task start prints the features, the classes, the skeleton steps, the escalation signals and how to finish. The skills gain one line and stay under 400 words. docs/learning.md explains the mode. Co-Authored-By: OpenAI Codex gpt-6.1-sol <noreply@openai.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A lead's session start now removes the delegation folders under tasks/ and the artifacts that nothing changed for 7 days, and the sync records of linked worktrees that Git no longer lists. The binary does it in the hook, so no one runs a command. A worker never removes state, a folder that holds other files stays, and a held sync lock defers the cleanup. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
duolog profile rebuilds the tree a worker started from in a fixed linked worktree, at the task's base commit plus the recorded patch, runs the same task on the target named with --entry, and runs the class's checks. A failed or interrupted run removes the worktree, the next run cleans a stale one, and a delegation recorded outside Git is refused with the reason. Co-Authored-By: OpenAI Codex gpt-6.1-sol <noreply@openai.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
duolog records which agent and model changed files in a delegation or a peer session, and duolog coauthors prints a Co-Authored-By line for each, for work newer than HEAD. --hook appends the missing lines to a commit message from a prepare-commit-msg hook and never blocks a commit. The repository's rule is set once in config: coauthors.enabled, with a template per agent. SessionStart reminds the lead while it is on. Co-Authored-By: OpenAI Codex gpt-6.1-sol <noreply@openai.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
duolog profile ends with a judge that sees both results under neutral labels in random order and scores the class rubric, on a target of the opposite vendor where it can. duolog verdict records the person's confirm or correction; a correction replaces only the criteria it names. Co-Authored-By: OpenAI Codex gpt-6.1-sol <noreply@openai.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Peers: duolog answers a prompt that a rex.auto_answers rule matches (by default Codex's hook review, without granting trust) and decides a peer's request to run a command with the gate, so only an ask reaches the lead. Workers are asked for one sentence when all went well, and a peer for "done". peer wait no longer reports a working Codex pane as finished, a closed peer leaves the registry, peers are keyed by role and work root, a new peer opens in its own tab, queued questions are reported, and duolog peer list shows a lead's peers. Tests clear inherited DUOLOG_* variables. The skills and AGENTS.md ask to batch small changes into one pull request. The dev build is pinned: scripts/dev/rebuild checks, rebuilds and restarts idle peers on request. Co-Authored-By: OpenAI Codex gpt-6.1-sol <noreply@openai.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
duolog learn proposes a class when many delegations fall through to the role's target with the same features, or when the stated and rule classes keep disagreeing, as a diff of the project config with features, priority, rubric and starting ladder. --apply-class writes it and --decline-class records the refusal in the journal; task finish says when a proposal is ready. One proposal is offered per name, the largest group first. Co-Authored-By: OpenAI Codex gpt-6.1-sol <noreply@openai.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A check of both skills on Claude haiku, sonnet and opus at low and high effort and on Codex luna, terra and sol at low to high effort showed every model answering a peer's question with duolog allow: the skills never named duolog peer answer. They do now, and say to wait for each peer alone in the background. Shortened sentences keep every rule; both skills stay under 400 words. The second check passed 95 of 96 answers. Co-Authored-By: OpenAI Codex gpt-6.1-sol <noreply@openai.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
learning: holds ten default classes with their roles, ladders, priors and judge rubrics, ordered classification rules, and the selection parameters. It is off by default. .duolog/routing.learned.yaml, when present, puts an approved order first in a ladder; deleting it returns to the configured order. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The learning-mode entries under Development name each command once within the changelog limits, and the README says what the mode does and links to docs/learning.md. Co-Authored-By: OpenAI Codex gpt-6.1-sol <noreply@openai.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A check of the merged skills on twelve model and effort pairs passed 117 of 120 answers; one Codex model ran both waits on one line. The sentence now names a separate background command. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Run-here, interrupted and needs delegations no longer count as failures of their ladder entry, get no profiling offer and are not replayed. The judge is told that 3 is best and that fewer is better for counted criteria. A --use or --entry target whose agent is unavailable is refused instead of re-routed. Replay patches ignore the user's diff settings. The profiling worktree is re-created instead of reset and cleaned, and the default policy denies writes to .git files. --chain rebuilds both sides from the recorded trees, and an entry that the lead's effort ceiling would run the same as the one being left is skipped. The debug class lists the debug role, and the implicit-task hint names task finish. Co-Authored-By: OpenAI Codex gpt-6.1-sol <noreply@openai.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The journal truncates a torn tail through a handle opened without O_APPEND, which Windows allows. duolog's own Git calls for tree capture, diffs and replays turn off line-ending conversion, so patches apply byte for byte on runners with core.autocrlf. The file-mode check of the replay copies runs only where the OS keeps those bits, and CI gives a package four minutes: delegate takes about two on Windows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
duolog skill test runs a plan of situations against a SKILL.md on several agents, models and efforts and prints one table with the cost. The duolog-skill-check skill tells the lead when and how to use it: the person's own skill guidelines first, another skill-writing skill for the writing, one question with the plan and cost, and the answer remembered as skill_tests. This repository tests its duolog skills always; word limits apply only to duolog's own skills. Peers open in their own Rex session, named after the project, each in a tab named "duolog | <name>", and never take focus or notify; duolog notifies once when a peer's question waits longer than rex.stuck_notify_minutes. codegraph's read-only tools are allowed by default, the docs describe how to start sync in a fresh clone, and the skills and AGENTS.md describe parallel work. Co-Authored-By: OpenAI Codex gpt-6.1-sol <noreply@openai.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… test The default models of duolog skill test skip limits.manual_only_models, so a first run no longer picks fable or astra; naming one with --models needs --allow-manual-model, as for delegate. A failed run's output is kept next to its raw answer, and the error points there instead of a deleted folder. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Release 1.3.0 from develop:
learning.enabled): task classes, a delegation journal, escalation, profiling with a blind judge, and a learned model order the person approves.duolog skill testand theduolog-skill-checkskill: test a changed skill across models and efforts.duolog coauthors: credit workers as commit co-authors..duologcleanup of old task folders, snapshots and removed worktrees; codegraph's read tools allowed by default.See CHANGES.md, section 1.3.0. Codex (gpt-6.1-sol) wrote much of this code in duolog peer sessions; Claude planned, reviewed and verified it.
🤖 Generated with Claude Code