Skip to content

Rebrand as Auto Research and add Codex plugin support#3

Merged
Maleick merged 2 commits intomainfrom
codex/auto-research-rewrite
Apr 14, 2026
Merged

Rebrand as Auto Research and add Codex plugin support#3
Maleick merged 2 commits intomainfrom
codex/auto-research-rewrite

Conversation

@Maleick
Copy link
Copy Markdown
Owner

@Maleick Maleick commented Apr 14, 2026

Summary

  • rebrand the project as Auto Research and rewrite the public docs/site/metadata around a cross-platform Claude + Codex positioning
  • add a root-centered Codex source bundle plus a mirrored plugins/codex-autoresearch distribution while keeping the stable Claude /autoresearch* compatibility surface
  • add distribution validation, version/link checks, and dual results-log compatibility so the Claude and Codex packages stay aligned

Test Plan

  • python3 scripts/sync_plugin_payload.py --repo . --check
  • python3 scripts/check_plugin_distribution.py --repo .
  • pytest -q tests/test_plugin_distribution.py tests/test_results_compatibility.py
  • verify

Copilot AI review requested due to automatic review settings April 14, 2026 19:41
@Maleick Maleick merged commit 89fd902 into main Apr 14, 2026
3 checks passed
@Maleick Maleick deleted the codex/auto-research-rewrite branch April 14, 2026 19:43
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR rebrands the project as Auto Research, introduces a root-centered Codex skill bundle with a mirrored plugins/codex-autoresearch distribution, and adds sync/validation tooling + tests to keep Claude and Codex packaging aligned.

Changes:

  • Rebrand docs/metadata (wiki, SECURITY/CONTRIBUTING/CHANGELOG, architecture) to “Auto Research” and Maleick/AutoResearch.
  • Add Codex plugin distribution: root bundle (SKILL.md, agents/, references/, scripts/) mirrored into plugins/codex-autoresearch/skills/codex-autoresearch/.
  • Add packaging validation scripts and pytest coverage for distribution parity + dual results-log compatibility.

Reviewed changes

Copilot reviewed 95 out of 97 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
wiki/Safety.md Rewrite safety page to point at root Codex contract and Claude compatibility surface.
wiki/Installation.md Update installation instructions for Claude and add Codex local marketplace flow.
wiki/Home.md Rebrand wiki home and update navigation/positioning.
wiki/Contributing.md Update contributing workflow around root bundle + packaging checks.
wiki/Configuration.md Update configuration docs and document dual results-log compatibility.
wiki/Commands.md Document Claude /autoresearch* compatibility surface + Codex entrypoints.
tests/test_results_compatibility.py Add test asserting research-results.tsv and autoresearch-results.tsv stay in sync.
tests/test_plugin_distribution.py Add tests for sync mirroring and distribution validator against a minimal repo.
scripts/sync_plugin_payload.py New sync tool to mirror root bundle into packaged Codex plugin payload.
scripts/run_contributor_gate.py New contributor gate runner (sync check, distribution validation, tests, optional smoke).
scripts/hook_stop.py New stop-hook logic for managed runs (continuation + archive readiness guard).
scripts/hook_start.py New session-start hook emitting a managed-run checklist.
scripts/hook_context.py New hook runtime pointer persistence with atomic writes and repo-relative paths.
scripts/check_plugin_distribution.py New validator ensuring plugin manifest/marketplace metadata + mirrored file parity.
scripts/bootstrap_local_plugin.py New installer for machine-local marketplace entry + installed bundle copy.
scripts/autoresearch_wizard.py New CLI wrapper to generate setup summary/questions via helpers.
scripts/autoresearch_supervisor_status.py New CLI wrapper for supervisor snapshot computation.
scripts/autoresearch_subagent_plan.py New tool emitting a stable JSON plan for a standing subagent pool.
scripts/autoresearch_runtime_ctl.py New CLI for background run artifacts (launch/status/stop/resume/complete).
scripts/autoresearch_record_iteration.py New CLI to append an iteration result to the TSV log(s).
scripts/autoresearch_init_run.py New CLI to initialize state/results artifacts and update hook context pointer.
scripts/autoresearch_complete_run.py New CLI to complete a foreground run and write post-run artifacts.
scripts/init.py Mark scripts as a package to support test imports.
references/subagent-orchestration.md New root reference for standing subagent orchestration model.
references/structured-output-spec.md New root reference defining setup/iteration/completion output phases.
references/state-management.md New root reference specifying autoresearch-state.json semantics.
references/ship-workflow.md New root workflow reference for shipping/readiness.
references/security-workflow.md New root workflow reference for security pass.
references/scenario-workflow.md New root workflow reference for scenario expansion.
references/runtime-hard-invariants.md New root reference for re-anchoring invariants.
references/results-logging.md New root reference defining TSV schema + dual-log rule.
references/predict-workflow.md New root workflow reference for pre-mortem/design critique.
references/plan-workflow.md New root workflow reference for wizard/setup flow.
references/loop-workflow.md New root workflow reference for setup/iterate/decide loop.
references/learn-workflow.md New root workflow reference for documentation loop.
references/interaction-wizard.md New root contract for interactive launch approval + minimal questions.
references/fix-workflow.md New root workflow reference for fix loop.
references/debug-workflow.md New root workflow reference for debug loop.
references/core-principles.md New root principles + artifact discipline reference.
plugins/codex-autoresearch/skills/codex-autoresearch/scripts/sync_plugin_payload.py Mirrored sync tool inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/scripts/run_contributor_gate.py Mirrored contributor gate runner inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/scripts/hook_stop.py Mirrored stop hook inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/scripts/hook_start.py Mirrored start hook inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/scripts/hook_context.py Mirrored hook context pointer logic inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/scripts/check_plugin_distribution.py Mirrored distribution validator inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/scripts/bootstrap_local_plugin.py Mirrored local installer inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/scripts/autoresearch_wizard.py Mirrored wizard CLI inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/scripts/autoresearch_supervisor_status.py Mirrored supervisor CLI inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/scripts/autoresearch_subagent_plan.py Mirrored subagent plan tool inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/scripts/autoresearch_runtime_ctl.py Mirrored runtime ctl inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/scripts/autoresearch_record_iteration.py Mirrored record-iteration CLI inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/scripts/autoresearch_init_run.py Mirrored init-run CLI inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/scripts/autoresearch_complete_run.py Mirrored complete-run CLI inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/scripts/init.py Mirrored package marker inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/references/subagent-orchestration.md Mirrored reference inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/references/structured-output-spec.md Mirrored reference inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/references/state-management.md Mirrored reference inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/references/ship-workflow.md Mirrored reference inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/references/security-workflow.md Mirrored reference inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/references/scenario-workflow.md Mirrored reference inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/references/runtime-hard-invariants.md Mirrored reference inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/references/results-logging.md Mirrored reference inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/references/predict-workflow.md Mirrored reference inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/references/plan-workflow.md Mirrored reference inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/references/loop-workflow.md Mirrored reference inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/references/learn-workflow.md Mirrored reference inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/references/interaction-wizard.md Mirrored reference inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/references/fix-workflow.md Mirrored reference inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/references/debug-workflow.md Mirrored reference inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/references/core-principles.md Mirrored reference inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/agents/openai.yaml Mirrored agent interface metadata inside packaged Codex payload.
plugins/codex-autoresearch/skills/codex-autoresearch/SKILL.md Packaged Codex SKILL entrypoint describing activation contract + distribution rules.
plugins/codex-autoresearch/.codex-plugin/plugin.json Add Codex plugin manifest for codex-autoresearch v3.0.0.
plugins/autoresearch/skills/autoresearch/SKILL.md Reframe Claude skill as compatibility wrapper (“Auto Research Claude Wrapper”).
plugins/autoresearch/.claude-plugin/plugin.json Bump Claude plugin version to 3.0.0 and update repo/description.
feature-list.json Add feature tracking for rebrand + cross-platform rewrite acceptance tests.
docs/autoresearch-loop.svg Update hero copy to “Cross-platform autonomous iteration engine”.
docs/ARCHITECTURE.md Rewrite architecture doc for root bundle + dual distribution surfaces + validation model.
agents/openai.yaml Add root agent interface metadata for Codex positioning.
VERSION Bump version to 3.0.0.
SKILL.md Add root Codex-facing SKILL entrypoint.
SECURITY.md Update security/safety documentation for cross-platform model and new repo URL.
CONTRIBUTING.md Rewrite contributor docs around root bundle + distribution validation workflow.
CHANGELOG.md Add 3.0.0 release notes and keep prior 2.x history.
.gitignore Add new runtime artifacts and Python cache ignores.
.github/workflows/validate.yml Update CI validation: Python setup, sync/validation scripts, new tests, doc hygiene checks.
.github/workflows/release.yml Rename release title to “Auto Research …”.
.claude-plugin/marketplace.json Rebrand marketplace metadata and bump version to 3.0.0.
.agents/plugins/marketplace.json Add repo-local Codex marketplace manifest referencing local plugin path.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +58 to +68
- name: Check for absolute local paths in docs
run: |
ERRORS=0
# autoresearch.md (root command) takes free-form input — no argument-hint required.
# Sub-commands in commands/autoresearch/*.md do require argument-hint.
for f in plugins/autoresearch/commands/autoresearch/*.md plugins/autoresearch/commands/autoresearch.md; do
[ -f "$f" ] || continue
if ! grep -qP '^name:' "$f"; then
echo "ERROR: $f missing 'name:'"
ERRORS=$((ERRORS+1))
fi
if ! grep -qP '^description:' "$f"; then
echo "ERROR: $f missing 'description:'"
ERRORS=$((ERRORS+1))
fi
done
for f in plugins/autoresearch/commands/autoresearch/*.md; do
[ -f "$f" ] || continue
if ! grep -qP '^argument-hint:' "$f"; then
echo "ERROR: $f missing 'argument-hint:'"
ERRORS=$((ERRORS+1))
fi
done
if [ "$ERRORS" -gt 0 ]; then
echo "$ERRORS frontmatter error(s) found"
exit 1
fi
echo "Frontmatter OK"
! rg -n "/Users/|/home/" README.md CHANGELOG.md CONTRIBUTING.md SECURITY.md wiki docs .claude-plugin plugins

- name: Check workflow cross-references
id: crossrefs
continue-on-error: true
- name: Check for stale public positioning
run: |
ERRORS=0
for f in plugins/autoresearch/commands/autoresearch/*.md; do
[ -f "$f" ] || continue
CMD=$(basename "$f" .md)
REF="plugins/autoresearch/skills/autoresearch/references/${CMD}-workflow.md"
if [ ! -f "$REF" ]; then
echo "ERROR: command $CMD has no matching $REF"
ERRORS=$((ERRORS+1))
fi
done
if [ "$ERRORS" -gt 0 ]; then
echo "$ERRORS cross-reference error(s) found"
exit 1
fi
echo "Cross-references OK"
! rg -n "Claude Code only|Claude-only" README.md CHANGELOG.md CONTRIBUTING.md SECURITY.md wiki docs .claude-plugin plugins

- name: Fail if any check failed
if: steps.version.outcome == 'failure' || steps.frontmatter.outcome == 'failure' || steps.crossrefs.outcome == 'failure'
- name: Check shared content for Claude-local paths
run: |
echo "One or more validation checks failed — see step details above"
exit 1
! rg -n "\.claude/" SKILL.md agents references scripts tests .agents plugins/codex-autoresearch
Copy link

Copilot AI Apr 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These steps use ! rg ... to assert “no matches”. If rg is missing (exit code 127), the leading ! will invert it to success, silently skipping the intended check. Add an explicit command -v rg (or install ripgrep) and/or set -e so command-not-found fails the job.

Copilot uses AI. Check for mistakes.
Comment on lines +18 to +25
def load_json(path: Path) -> dict[str, Any]:
try:
payload = json.loads(path.read_text(encoding="utf-8"))
except json.JSONDecodeError as exc:
raise DistributionError(f"Invalid JSON file: {path}") from exc
if not isinstance(payload, dict):
raise DistributionError(f"Expected a JSON object in {path}")
return payload
Copy link

Copilot AI Apr 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

load_json() only catches json.JSONDecodeError; if a required manifest file is missing (e.g. .codex-plugin/plugin.json or the repo marketplace), this will raise an unhandled FileNotFoundError and bypass the script’s normal DistributionError messaging. Catch OSError/FileNotFoundError here and re-raise as DistributionError so validation failures are reported consistently and without a stack trace.

Copilot uses AI. Check for mistakes.
Comment on lines +55 to +62
def resolve_plugin_relative_path(plugin_root: Path, value: str) -> Path:
rel_path = Path(value)
if rel_path.is_absolute():
raise DistributionError(f"Plugin manifest path must be relative: {value}")
if value.startswith("./"):
rel_path = Path(value[2:])
return (plugin_root / rel_path).resolve()

Copy link

Copilot AI Apr 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

resolve_plugin_relative_path() resolves paths from the plugin manifest but does not prevent .. traversal (e.g. "../../etc/passwd" would resolve outside plugin_root). This can cause the distribution validator to read/accept files outside the plugin bundle. Enforce that resolved paths stay within plugin_root (e.g., by checking resolved.relative_to(plugin_root)), and raise DistributionError if they escape.

Copilot uses AI. Check for mistakes.
Comment on lines +32 to +42
def relative_files(root: Path, pattern: str) -> list[Path]:
return sorted(path.relative_to(root) for path in root.glob(pattern) if path.is_file())


def ensure_matching_files(source_root: Path, bundled_root: Path, pattern: str) -> list[str]:
source_files = relative_files(source_root, pattern)
bundled_files = relative_files(bundled_root, pattern)
if source_files != bundled_files:
raise DistributionError(
f"File mismatch for pattern {pattern!r}: source={source_files}, bundled={bundled_files}"
)
Copy link

Copilot AI Apr 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

relative_files() will return an empty list when root doesn’t exist, which means ensure_matching_files() can pass even if required source directories (like agents/, scripts/, references/) are missing. Since these are part of the declared root bundle contract, consider failing fast when source_root (and likely bundled_root) does not exist/is not a directory.

Copilot uses AI. Check for mistakes.
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.

2 participants