PeopleSoft Studio
PeopleSoft development in VS Code. Open, edit and save PeopleCode, records,
pages, components, App Engine programs and the rest of Application Designer's
definitions, and let AI agents work on them through a built-in MCP server.
PeopleSoft Studio connects to a PeopleSoft database (Oracle; SQL Server and DB2
experimental) or opens an Application Designer project export. Every connection
is read-only until you make it writable; then definitions are saved natively,
writing the same rows Application Designer writes.
Development status: version 1.0 is the focused core qualified for
Oracle / PeopleTools 8.62.09 on Linux and Windows x64. Preview features retain
their documented limits; see the support contract
and Disclaimer. 1.0 is not full Application Designer parity.
Current release: 1.0.0 — November 2, 2026. The qualified core is now
version 1.0. This release also adds Fluid pages and components through the
MCP, and ten new PeopleCode rules that refuse, before the save, programs App
Designer or PIA would refuse. The 1.5 workflows from 0.9.9 remain, with their
limits: structural Change Review, promotion between Oracle environments, Query
on 8.61.15, Run and Monitor and the Windows AI handoff. See the
release notes, changelog and
download the VSIX.
Track completion gates in 1.0 readiness.
Why PeopleSoft Studio
- Your definitions, in the editor you already use. PeopleCode with
completion, hover and outline. App Designer's record, field, page, component,
menu, Component Interface, App Engine and message channel windows, rebuilt as
VS Code editors. SQL, HTML and style sheets as plain text.
- Saves Application Designer recognizes. Writers use captured native
saves on PeopleTools 8.62.09 and 8.61.15, with tests that replay the captured
behavior. Supported writes are checked by native reopen and readback;
unsupported changes are refused.
- A PeopleCode compiler checked at scale. Recorded corpus comparisons
reproduced stored bytecode for 30,205 of 30,209 HCDEV programs, and matched
PeopleTools 8.62.09's binary and name rows for all 30,067 programs compared
on HRDMO. These results cover captured programs, not arbitrary new code;
see compiler evidence.
- Built for AI agents. A local MCP server gives Claude Code, Codex or any
MCP client supported reads and writes through the editors' providers and
writers, each write approved by
you in VS Code by default.
- Safe by default. Read-only connections, separate delivered-object
policies for user and agent writes, an audit log, and a
PeopleCode save reports of the rows replaced.
- Knows what is yours. Every definition is classified Delivered, Delivered
modified, Partner, Custom or Unknown, with its evidence. Verified Studio
creations retain ownership receipts. Event Mapping, Drop Zones and Page
and Field Configurator are discovered and configured through the
Customization Strategy view.
Page Designer:

App Engine Designer:

Customization Orchestration:

AI agents
PeopleSoft Studio runs its own local MCP server. Claude Code, Codex and other
Streamable HTTP MCP clients use the same tools, which read and write through
Studio's database providers. Integration with Oracle's delivered PeopleTools
8.63 MCP is planned; this release uses Studio's implementation.
AI client -> local PeopleSoft Studio MCP -> database provider -> PeopleTools tables
Disclaimer
PeopleSoft Studio is provided "as is", without warranty of any kind, express
or implied (see LICENSE). There is no guarantee that what it reads,
decodes, compiles or writes is correct, complete or fit for any purpose. You use
it at your own risk; the authors are not liable for data loss, corrupted
definitions, outages or any other damage.
- Not an Oracle product. PeopleSoft Studio is independent: it is not
affiliated with, endorsed or supported by Oracle. PeopleSoft and PeopleTools
are trademarks of Oracle.
- Saving is experimental. PeopleSoft Studio writes directly to PeopleTools
tables -- for PeopleCode
PSPCMTXT, PSPCMPROG, PSPCMNAME; for records,
fields, pages, components and the other definitions their own tables; and
PSVERSION / PSLOCK -- using an independently developed compiler and save
routines, not Oracle's. Save protocols are calibrated from native saves on
PeopleTools 8.62.09 and 8.61.15 within each writer's supported scope. Other
releases, patches and configurations may behave differently.
- Compiling with Application Designer is still recommended. After saving
PeopleCode from VS Code, open the program in Application Designer and save
(compile) it there, so PeopleTools' own compiler validates it. Do this
especially before migrating it to another environment.
- Make a connection writable only where you can recover. Connections are
read-only by default. Allow writes only on development or lab databases you
have backups of, and follow your organization's change-control process. Each
save keeps a report of the rows it replaced, but that is not a backup.
Get Started
Install PeopleSoft Studio.
Reload VS Code. Open the VS Code Command Palette ( CTRL + SHIFT + P ):
Developer: Reload Window
Add and connect to a PeopleSoft environment from the PeopleSoft Studio sidebar.
Verify that the MCP server is running: in the PeopleSoft Studio
sidebar, the Settings panel shows MCP server below the compiler
profile, green while it is running.
Connect an AI client using PeopleSoft → Settings → Configure AI Client….
Choose your client:
The URL uses the port in the peoplesoft.mcp.port setting (7337 by
default). Restart or reload the client if it was already running.
1.0 support qualification
The primary qualification profile is Oracle / PeopleTools 8.62.09, with
Linux x64 and Windows x64 core clients. The bounded core is ready for 1.0;
the support contract separates core scope from
completed native/installed evidence, preview features and planned workflows.
Settings and the MCP capability catalog expose the same release-support model.
Run and Monitor remains preview with Low-priority native acceptance deferred.
What works now
Goal long-term: replace Application Designer. Today it reads many common definition types and edits the supported kinds below -- PeopleCode, records, fields, pages, components, App Engine, menus, Component Interfaces, message channels, SQL, HTML, style sheets, translates, projects and a bounded PS Query workflow. The support contract distinguishes the qualified core from preview workflows. The tables distinguish working editors from read-only viewers and features still planned.
In 0.9.2, File Layouts open in a File Layout Designer and save as App
Designer saves them; Build Requests turn attached documents into a reviewed
spec and a build; projects carry the related definitions their members need
(sections, SQL, PeopleCode, translate values, Message Catalog entries, content
references and their folders); and PeopleCode, SQL and App Engine saves are
checked against run-time failures App Designer does not catch (see
docs/PEOPLECODE_RULES.md).
In 0.9.0, Configuration Tools includes working Process Definition,
Page and Field Configurator, Drop Zone and bounded OAuth editors. The MCP adds
a structured capability catalog, Process Definition editing, and bounded PS
Query authoring/execution. Query and Process Definition ownership uses the native
keys and preserves delivered-object policy checks. Eleven live HRDMO MCP checks
verified previews, guarded Query saves and readback. See
MCP workflows and validation,
Process Definitions,
Customization and Security.
Integration Broker, administration and Portal Registry authoring remain
available. Current development migration packages cover fields (every stored
property and translate values), records with SubRecords and SQL Table user
indexes, standalone SQL, HTML, freeform style sheets, stored PeopleCode, bounded
PS Query, scoped menus, App Engine (with its step SQL), Application Packages with
classes, pages, components, message channels, process definitions and File
Layouts. Target preview stages changes and project membership into durable
Change Review for developer approval and verified application, and migrated
types can be undone and redone from history (except the creation of a process
definition). Promote Project to Another Environment… and
psft_project_promote stage the same import on a different Oracle environment.
MCP exposes export, preview and promotion; the UI opens the persistent review. See
Project migration for scope and limits.
Definition types (App Designer's Open Definition)
Every type in App Designer's Open Definition list, and where it stands.
Yes = read and create/save; Experimental = edited and saved,
reproducing App Designer's saves; Read-only = viewer, from the database;
Not yet = no viewer or editor.
| Definition type |
Status |
Notes |
| Application Package |
Yes |
Package tree workspace: open/create roots, insert empty subpackages and classes, open and save class PeopleCode; package properties read-only |
| Field |
Yes |
Editor: length, labels and description; create. MCP additionally sets Character format to Uppercase or Mixed Case |
| HTML |
Yes |
Read, create and save — see docs/HTML_SAVE.md |
| Project |
Yes |
Browse, open XML exports, create and add supported members, including AE sections and AE PeopleCode. Studio migration packages support fields (every stored property and translate values), records with SubRecords and SQL Table user indexes, standalone SQL, HTML, freeform style sheets, stored PeopleCode, bounded PS Query, scoped menus, App Engine, Application Packages with classes, pages, components, message channels, process definitions and File Layouts; promotion to another Oracle environment; target comparison, stale-target guards, verified readback and reviewed undo/redo apply |
| Record |
Yes |
Editor (Field / Use / Edits); editable; create; translate values; delete — see docs/RECORD_SAVE.md |
| SQL |
Yes |
Read, create and save |
| Style Sheet |
Yes |
Freeform: read as CSS, create and save — see docs/STYLESHEET_SAVE.md. Classic / sub: a read-only class list |
| App Engine Program |
Experimental |
App Engine Designer: create, edit, save, copy, rename, delete, as App Designer does — see docs/APP_ENGINE.md |
| Component |
Experimental |
Structure, properties, page rows and Component PeopleCode, saved as App Designer saves — see docs/COMPONENTS.md |
| Component Interface |
Experimental |
CI Designer: create on a component (properties defaulted or not, as App Designer asks), edit, save, Save As, rename, delete as App Designer does — keys, properties and collections dragged from the component's buffer, Edit Property, Read Only, standard methods, synchronization, Methods PeopleCode; see docs/COMPONENT_INTERFACES.md |
| File Layout |
Experimental |
File Layout Designer — see docs/FILE_LAYOUTS.md |
| Menu |
Experimental |
Menu Designer: create (Standard or Popup), edit, save, Save As, rename, delete as App Designer does — bars, items (component, PeopleCode with ItemSelected, separator, transfer), Menu Properties; see docs/MENUS.md |
| Message |
Experimental |
Integration Broker inspection and bounded nonrowset message creation/editing — see docs/INTEGRATION_BROKER.md |
| Message Channel |
Experimental |
Message Channel window: create, edit, save, Save As, rename, delete as App Designer does — Message Channel Properties, the messages on the channel, partition fields as App Designer lists them; see docs/MESSAGE_CHANNELS.md |
| Page |
Experimental |
Visual Layout editor with a property panel for every control type, saved as App Designer saves — see docs/PAGE_SAVE.md |
| Page (Fluid) |
Experimental |
The same editor; New Page Fluid creates one from a Layout Page |
| Image |
Read-only |
Shown in a panel (GIF, PNG, JPEG, SVG, BMP) |
| Activity |
Not yet |
Identified in project exports; no viewer yet |
| Analytic Model |
Not yet |
Identified in project exports; no viewer yet |
| Analytic Type |
Not yet |
— |
| Approval Rule Set |
Not yet |
— |
| Business Interlink |
Not yet |
— |
| Business Process |
Not yet |
Identified in project exports; no viewer yet |
| File Reference |
Not yet |
— |
| Optimization Model |
Not yet |
Identified in project exports; no viewer yet |
Capabilities
| Capability |
Status |
Notes |
| Connect to Oracle (PeopleTools tables) |
Yes |
Schema per connection: set it, or detected from PS.PSDBOWNER (else SYSADM) |
| Field editor (App Designer's Field dialog) |
Yes |
Read-only; length, labels and description editable on Writable connections |
| HTML definitions as text |
Yes |
Create and save on Writable connections — see docs/HTML_SAVE.md |
| Insert a definition into a project |
Yes |
Writable connections, through the UI or MCP psft_add_to_project. Adds what the members need with them (App Engine sections, SQL and PeopleCode; component and page PeopleCode; translate values; custom SQL objects; Message Catalog entries; content references and their custom folders); psft_project_related lists what a project still lacks — see docs/MCP_0_8_8.md and docs/PROJECT_INSERT.md |
| MCP server (AI clients) |
Yes |
Search/read supported definitions and bounded PeopleCode text search; psft_list_definition_types gives type codes and key parts. Experimental authoring tools cover PeopleCode, SQL, HTML, style sheets, pages, records, fields, translates, projects, packages, App Engine, menus, Component Interfaces, message channels, Portal Registry folders/content references, Message Catalog, HCM Text Catalog and URL definitions. 0.9.0 adds product orientation and a structured capability catalog, Process Definition editing, and bounded PS Query search/read/prepare/run/create/edit/copy. Integration Broker authoring and project migration review/export/preview remain available; imports apply through the UI. Structured designers and tools share their models and writers, with validation and concurrency checks. Customization tools cover ownership, Event Mapping, Drop Zones and Page and Field Configurator; discovery tools read and record evidence. Version 0.9.1 stages supported Oracle writes in Change Review for exact-revision approval and verified application. Other paths retain their existing modal/policy gates; adapter coverage is bounded. See docs/MCP_WRITES.md and 0.8.8 fixes |
| New Definition... (Projects / Definition Browser) |
Yes |
Records (SQL Table, Derived/Work), fields, components, projects, Application Packages and classes, SQL, HTML, freeform style sheets, on Writable connections — see docs/CREATE_DEFINITIONS.md |
| Open App Designer XML project export |
Yes |
|
| Open Definition search |
Yes |
|
PeopleCode as text (psft://…) |
Yes |
On Writable connections, supported Record Field, Component, Page, Menu, App Engine, Component Interface and Application Class programs open as stored source (PSPCMTXT) and can be saved. Unsupported programs and Read-only connections open read-only, decoded from PSPCMPROG; exports use their stored source |
| PeopleCode IntelliSense-lite |
Yes |
Completion, hover, outline, snippets |
| PeopleCode syntax highlighting |
Yes |
|
| Project tree & definition browser |
Yes |
|
| Record editor (App Designer's Field / Use / Edits displays, Record Type) |
Yes |
Read-only, editable on Writable connections — see docs/RECORD_SAVE.md |
| Record → field → PeopleCode event navigation |
Yes |
|
| Settings panel |
Yes |
PeopleSoft: Open Settings — connections, compiler profile, PeopleCode Editor (Language Server, validate as you type, environment checks), MCP server, Build Settings (Build and Alter tabs) |
| SQL definitions as text |
Yes |
Create and save on Writable connections, as App Designer saves them. Run SQL runs a query (the selection, or the whole editor) read only and rolled back, and shows the rows beside it: one SELECT, no INTO or FOR UPDATE, %Table(record) expanded, other meta-SQL and binds refused, at most peoplesoft.sql.maxRows rows |
| Style sheets |
Yes |
Freeform: read as CSS, create and save on Writable connections — see docs/STYLESHEET_SAVE.md. Classic / sub: a read-only class list |
| Translate values; Delete Record |
Yes |
Writable connections — see docs/RECORD_SAVE.md |
| App Engine programs (App Engine Designer) |
Experimental |
App Designer's App Engine window: the Definition view (sections and their market / platform / effective-date variants, steps, actions) and Program Flow, with a property panel for the program (General, State Records, Temp Tables, Advanced), each section, step and action. On Writable connections: Insert Section / Step/Action / Action, change an action's type, rename, move, Cut / Copy / Paste, delete, every property App Designer stores, SQL, XSLT and PeopleCode in VS Code editors, undo / redo, validation (App Designer's Edit Validation plus references and PeopleCode compiled), Preview Save, and New Definition > App Engine Program — saved as App Designer saves it (85 of 88 captured App Designer saves replay row for row; the rest differ only where App Designer leaves a hash row stale). See docs/APP_ENGINE.md and docs/APP_ENGINE_SEMANTICS.md |
| Build... (SQL Tables and Views) |
Experimental |
Create Tables, Create Indexes, Alter Tables (by table rename or in place) and Create Views, as a script or built and executed on Writable connections; on Oracle each is App Designer's own script, byte for byte where captured. Views resolve the meta-SQL App Designer was seen to resolve (97% of HRDMO's views). What was not captured (other platforms, column type changes, rare meta-SQL ...) is refused with the reason. Build Project: the same options as one script for a project's records (script only) -- see docs/RECORD_SAVE.md |
| Component Interfaces |
Experimental |
CI Designer and MCP tools: create, edit, save, copy, rename and delete; keys, properties, collections, standard methods, synchronization and Methods PeopleCode — see docs/COMPONENT_INTERFACES.md |
| Components |
Experimental |
App Designer's component window: the Definition grid (View Definition on a page row), the Structure tab (the component buffer: search record, scroll levels and their records) and Component Properties (General, Use, Internet, Fluid, Style). On Writable connections all of it is edited and saved as App Designer saves it: page rows (labels, Hidden, order, Cut/Copy/Paste/Delete, Insert Page), every General, Use, Internet, Fluid and Style setting App Designer stores, never without a search record; New Definition > Component creates one. Component PeopleCode editor: View PeopleCode opens the component's (or a record's) first event, with App Designer's Object and Event pickers; an event with no program opens empty and saving creates it — see docs/COMPONENTS.md |
| Connect to Microsoft SQL Server or DB2 (LUW, z/OS) |
Experimental |
Everything above and below that reads, as on Oracle; writes are the same rows Oracle's App Designer captures proved, not yet captured on these platforms. DB2 needs PeopleSoft: Install DB2 Driver. Two-tier (App Designer 2 Tier) sign-on too. See docs/DATABASES.md |
| Customization Strategy view and Customization Plan editor |
Experimental / Preview |
The Strategy view follows the open definition and discovers Event Mapping, Drop Zones and Page and Field Configurator. Its configuration actions write the supported settings, including custom subpages and Standard/Masking field configurations. Other frameworks remain Unknown. The Plan editor previews Requirement, Discover, Strategy, Validate and Approval with its actions disabled — see docs/CUSTOMIZATION.md |
| Customization: ownership and the delivered-object policy |
Experimental |
Delivered / Delivered modified / Partner / Custom / Unknown, with evidence from save stamps, projects, naming prefixes, delivered baselines and verified Studio creation receipts. Policies (block / requireApproval / allowWithAudit) apply to guarded definition saves, renames and deletes. User default: allow with audit; agent default: require approval for delivered, partner or Unknown definitions. New verified custom definitions retain their receipts across supported edits. MCP approval waits expire after 60 seconds or cancellation — see docs/CUSTOMIZATION.md |
| Event Mapping editor |
Experimental |
Configuration Tools > Customization > Event Mapping, or a component's content reference in the Customization Strategy view: the Configure Event Mapping page's configurations -- component, page, record and field level rows, their services, sequence and enabled flag -- and a new related content service with its application class, saved as PeopleTools' own page saves them, on Writable connections — see docs/CUSTOMIZATION.md |
| File Layouts |
Experimental |
File Layout Designer: create, edit, save, Save As, rename and delete; segments, fields, record insert and properties, saved as App Designer saves them — see docs/FILE_LAYOUTS.md |
| Integration Broker |
Experimental |
Messages, Document Builder, services, service operations, nodes and routings: search, inspect, validate, create, preview and save through editors or MCP on PeopleTools 8.62.09 (on 8.61.15: nonrowset messages, standard/REST services and operations, external nodes, manual routings and flat string documents); supported OnRequest handler creation is calibrated on both releases; unsupported structures require PIA — see docs/INTEGRATION_BROKER.md |
| Menus |
Experimental |
The Menu Designer — see docs/MENUS.md |
| Message Catalog, HCM Text Catalog, URL Definitions |
Experimental |
Search, create and edit through Configuration Tools > Administration or MCP; typed schemas, catalog reference, Text Catalog configuration/language choices, concurrency and write gates — see docs/ADMINISTRATION.md |
| Message Channels |
Experimental |
App Designer's Message Channel window — see docs/MESSAGE_CHANNELS.md |
| Pages (Page designer) |
Experimental |
App Designer's visual Layout view and Order grid. Every control type has its own App Designer property panel (Record / Label / Use / General / Fluid / Image / Options tabs as they apply). On Writable connections: move, resize, delete, relabel, select/group, Copy / Paste, set tab Order, insert controls (Frame, Group Box, Horizontal Rule, Static Text, Static Image, Check Box, Drop Down, Edit Box, Long Edit Box, Radio Button, HTML Area, Push Button), edit each control's captured properties (label, style, use bits, on/off values, record rebind, Allow Deferred Processing, grid/scroll Occurs Count and grid display flags, Page Field Name, anchor, Fluid), Page Properties (General / Use / Fluid), Custom page size, New Page / New Page Fluid, and Page PeopleCode — all saved as App Designer saves it. See docs/PAGES_COMPONENTS_MENUS.md and docs/PAGE_SAVE.md |
| Portal Registry |
Experimental |
Select a portal, browse its Structure & Content tree, create folders and component/external content references, and edit properties, parent, sequence and security through the UI or MCP — see docs/PORTAL_REGISTRY.md |
| Process Definitions |
View / Edit (Oracle) |
Tabbed editor and MCP read/edit/rollback preview for scheduling defaults, overrides, output, recovery, components and process groups; App Engine Run and Monitor submits, monitors and downloads output on Oracle 8.62.09 (native acceptance RT-L1 to RT-L4 passed; outside the 1.0 core) — see runtime scope and definition editing |
| Queries (Windows PS Query workflow) |
Experimental |
Open PS Query / New PS Query, also Configuration Tools > PS Query. Oracle / PeopleTools 8.62.09: create, edit, save and Save As with joins (standard, left outer, related record), every criteria operator with prompts, number and date fields, IN/EXISTS subqueries, unions, aggregates with HAVING and DISTINCT, expression columns, translates and effective dating, matching Windows Query's saved rows and SQL; also row security, nested subqueries, HAVING OR and every effective-date operator. PeopleTools 8.61.15: the same, calibrated against Windows Query there. Headings, ordering, SQL and bounded read-only results with Query access checks. MCP exposes the same operations plus review-only delete and rename. Unsupported shapes remain readable, with a reason saving/running is refused — see docs/PS_QUERY_WINDOWS.md |
| Saving PeopleCode |
Experimental |
Writable connections: compile and save, create an event or class that has no program yet, clear a program to delete it — see Saving PeopleCode |
| Configuration Tools and Data Migration Tools panes |
Partial |
PS Query, Process Definitions, Page and Field Configurator, Event Mapping and Drop Zones open working editors. Customization Strategy also exposes configuration actions. Administration opens Message Catalog, Text Catalog and URL editors; Portal Registry opens a portal picker and editable Structure & Content tree. Integration Broker opens six searchable editors with New, Preview and Save. Security opens OAuth configuration and legacy inbound SAML inspection. Data Mover Scripts creates script templates, and Import Migration Package opens the existing guarded UI workflow; Data Migration Workbench remains Coming soon |
| OAuth / SAML |
Partial |
OAuth applications: public configuration, audiences and role inspection; calibrated edits for existing CUSTOM / Client Only / Client Credentials applications on Oracle 8.62.09. Legacy inbound SAML mappings are read-only; 8.63 browser SAML SSO remains planned. Secrets and tokens are excluded — see Security tools |
| Discoveries (Discovery Center) and Studio Knowledge |
Preview |
Findings about how PeopleSoft stores and saves definitions, each with its evidence and the PeopleTools releases it was seen on; the Customization Strategy view's Studio Knowledge shows those about the open definition's kind. Nothing is uploaded unless you turn submissions on and approve each one — see docs/intelligence |
| Definition Properties (packages, records, fields, components, pages, projects, menus, message channels, App Engine, SQL, HTML, style sheets) |
Read-Only |
A panel, from the database. Records, fields, pages and components are changed in their editors; HTML and freeform style sheet descriptions with Change Description... |
| Images |
Read-Only |
Shown in a panel (GIF, PNG, JPEG, SVG, BMP) — see docs/IMAGES.md |
| Permission Lists, Roles |
Read-Only |
A permission list's pages and actions, sign-on times, Web Libraries and more; a role's permission lists — see docs/SECURITY_MESSAGES.md |
| Trees |
Read-Only |
Settings, levels, and nodes as an outline with detail ranges — see docs/TREES.md |
| XSLT |
Read-Only |
Stylesheet text; node editing is covered by Integration Broker and node passwords are never shown — see docs/URLS_NODES.md |
What does not work yet
- Migration of the explicitly refused shapes (custom index DDL, translations, subpackage descriptions/comments and class descriptions, nested or SQL Table subrecords, updates to indexed records), undo of a promotion that creates a process definition, of definition families outside those listed in Project migration, and between database platforms
- Editing record shapes and settings no App Designer save has been captured for (see docs/RECORD_SAVE.md)
- Register Menu Item (portal registration) and menu translations
- Component Interfaces: Test Component Interface, Java / C templates, CI references
- Run and Monitor beyond its first scope (other process types, jobs, recurrence, cancel/restart, creating run controls); native lost-response recovery is fixture-tested only (see runtime scope)
- In the component editor: Default Search Action, the search-page link message numbers, the Custom style lists; component edits through the MCP
- Build: Alter and Create Indexes/Views on SQL Server and DB2, views using rarer meta-SQL (%DatePart, %Join, %DateAdd ...), column type changes and the other uncaptured Alter cases listed in docs/RECORD_SAVE.md; migration of definition families outside the supported Studio package adapters
- A full language server: compile diagnostics as you type come from Studio's compiler, with field references, functions and definition references (Record.X, Page.X, SQL.X ...) checked against the environment, F12 resolves supported definition references, application class paths and declared functions, and completion covers keywords, the known built-in function catalog, the file's own names, connected record fields and application-class own/inherited members. Broader language tooling remains open.
- PS Query: row security combined with joins, translates, subqueries or unions; subqueries inside a union's select; between on number fields. Excel export and printing are planned.
See docs/ROADMAP.md for the longer path.
Two backends
Database — live PeopleTools tables (Oracle; SQL Server and DB2 experimental). Full environment search; PeopleCode is decoded from the tokenized PSPCMPROG byte stream.
Project export — App Designer XML on disk. No DB credentials; PeopleCode is the plain source App Designer already wrote. Scope is that project only.
A backend is where definitions come from. The two front ends — the VS Code UI
and the MCP server for AI clients — sit on top of both:
VS Code UI MCP server (AI clients) <- front ends
\ /
DefinitionProvider interface
/ \
Database backend Project export backend <- backends
Both front ends talk only to the DefinitionProvider interface, through the
same readers and writers. Capabilities (write, global search, build) are
declared per backend, so an AI client gets exactly what the editors get, and a
fix to a reader or writer reaches both.
PeopleCode storage
Oracle does not document the on-disk format. Programs are a tokenized stream in PSPCMPROG.PROGTXT (chunked by PROGSEQ) with identifiers in PSPCMNAME.
This extension decodes that stream with a conservative opcode table: unknown bytes are reported, never guessed.
Settings:
peoplesoft.peoplecode.decoder: auto (default) | strict | raw, the
default for connections that do not set their own decoder (per connection, in
Settings). Use raw when extending the decoder against real programs.
Saving PeopleCode (experimental)
Read the Disclaimer first. Every connection is read-only until
you change it. To allow saves on a connection, open PeopleSoft: Open Settings
and, in that connection's PeopleCode saving group:
- Set Operator ID to a PeopleSoft operator that exists in that database
(it is checked against
PSOPRDEFN). Saves are recorded under it.
- Set Access to Writable and confirm.
- Leave Save mode at Compile and save.
Then open a program -- record → field → event in the tree, an Application
Class, or View PeopleCode on a component -- edit it, and save. An event or
class that has no program yet opens empty and the first save creates it;
clearing a program and saving deletes it. A save is refused with the reason
when:
- the program changed since you opened it;
- the edit does not compile;
- the stored program is not one the writer reproduces exactly;
- the operator does not exist in that database.
Saving covers Record Field PeopleCode, Component PeopleCode (component,
component record and component record field), Page Activate, Menu ItemSelected,
App Engine OnExecute, Component Interface Methods and Application Classes, for
any definition name unless peoplesoft.writeNamePrefix limits it. Afterwards,
compile the program in Application Designer as well (see the Disclaimer). See
CHANGELOG.md for details.
Editor features (PeopleCode)
- Go to Definition — F12 / Ctrl-click resolves qualified application class paths, supported
Record.NAME / Page.NAME and other definition references, and functions declared against Record PeopleCode. The target must exist in the connected environment.
- Completion — keywords, the known built-in function catalog, system variables, locals and function/method names; connected record fields after
RECORD., and application-class own/inherited members after %This. / %Super. and explicitly typed object variables (0.9.7).
- Responsiveness and stale results (0.9.7) — completion reads class declarations and bounds slow database reads; live and explicit validation run on background workers and discard obsolete work after edits, settings/connection changes or closure. See editor acceptance for real VS Code/HRDMO checks and remaining scope.
- Hover — short docs for keywords, built-ins,
% system variables
- Outline — class / method / function / property symbols
- Snippets —
if, for, try, locs, msgbox, sqlexec, …
- Validate PeopleCode — compiles the program in the editor with PeopleSoft Studio's compiler (the one saves use) for the connection's PeopleTools release, and shows where it stops in Problems; Application Designer has the last word. It runs as you type (half a second after typing stops, on a background thread, so a 600 KB class does not hold up the editor) unless
peoplesoft.peoplecode.validateAsYouType (or the Language Server, peoplesoft.peoplecode.languageServer.enabled) is off -- both, with the delay, the environment checks and unknown-function warnings, are under Settings > PeopleCode Editor; the command validates on demand. Against a database it also does what App Designer's compiler does with the environment: in Record and Component Record PeopleCode a bare field name of the program's record is accepted and shown as App Designer stores it (RECORD.FIELD), with a quick fix to write it so before saving; a name that is not a field, or a RECORD.FIELD the database does not have, is "Field ... not defined. (2,17)"; and a call to a function neither declared nor a known built-in is reported as App Designer's "Unknown function" (2,15); a definition reference (Record.X, Page.X, Component.X, SQL.X ...) the database lacks is noted -- App Designer compiles these without checking, warning only for Image.X ("No definition of IMAGE.X found. (2,68)"), which Studio reports the same way. Completion offers a record's fields after RECORD., every built-in function App Designer compiles, and inside an application class the class's own members after %This. (its private ones too) with those it inherits, following extends through the class's imports
- Format Document — lays a program out as Application Designer does (three-space blocks, wrapped conditions, keyword casing and spacing); it reproduces App Designer's stored text for 30,114 of 30,208 HCDEV programs and applies only when the formatted text compiles to the same program
- Find References — where an identifier (a whole word) or any text occurs in every PeopleCode program of the connection, from the word at the cursor; on a database one search of the stored source, so every program is covered. Pick an occurrence to open it at that line
- Compare Project (Projects view) — text and modeled record/field metadata compared with another connection. Read failures remain errors; missing definitions require a successful absence check. Differences open as snapshots side by side.
- Administration tools — Message Catalog, HCM Text Catalog and URL Definitions have searchable editors with create/edit, concurrency checks and readback verification. See Administration.
- Export Migration Package... / Import Migration Package... — versioned Studio JSON packages, target preview, guarded writers, readback verification and a migration receipt. Supported: fields (every stored property and translate values), records with SubRecords and SQL Table user indexes, standalone SQL, HTML, freeform style sheets, stored PeopleCode, bounded PS Query, scoped menus, App Engine, Application Packages with classes, pages, components, message channels, process definitions and File Layouts. Promote Project to Another Environment… exports, previews and stages the import on a different Oracle environment.
- Review Project Migration... (Projects view or command palette) — a saveable report of members, optional target comparison, explicit dependencies, and unresolved coverage. On Writable database connections, select dependencies to include through the existing project writer. Export/import uses Studio migration packages without Application Designer. See Project migration.
- Compare With Environment — a definition side by side with the same one in another connection (a database or a project export), in VS Code's diff editor. The other side is read once, without making that connection the active one
SQL documents use language id psft-sql (basic highlighting). HTML definitions open as HTML; Preview HTML shows one as a page, with no script run and nothing fetched.
Setup
- Install the VSIX (
npm run dev from a clone, or install a release build).
- Open the PeopleSoft activity bar icon.
- Add Connection (Oracle, SQL Server or DB2) or Open Project Export File.
- Connect, then Open Definition… or use the project tree.
Oracle Instant Client is optional (peoplesoft.oracle.thickModeLibDir); leave empty for node-oracledb Thin mode.
The PeopleTools tables are read in the connection's Schema (Settings →
the connection → Edit). Left empty, it is the database's owner ID from
PS.PSDBOWNER, else SYSADM. Set it when the owner ID differs and the
access id is not the owner; the access id then needs grants on that
schema's PeopleTools tables. Connect fails with a clear message when the
schema has no PeopleTools tables.
Saving and creating definitions can be limited to names starting with a
prefix with peoplesoft.writeNamePrefix (empty: no limit).
Coexisting with other PeopleSoft extensions
jatz.peoplesoft-tools contributes a language also called peoplecode, on
scope source.peoplecode, claiming .pcode and .ppl. Two grammars on one
scope means load order decides which wins.
So this extension uses psft-peoplecode on source.psft.peoplecode, and its
virtual documents end in .peoplecode rather than .pcode. Both extensions can
be installed together. richardwood.peoplesoft-datamover only claims .dms and
.dmt, so it does not overlap at all.
Troubleshooting
- Check that the MCP server is running: the Settings panel's MCP
server row is green. If it is not, run PeopleSoft: Start MCP Server.
- Check that your client has the server registered as
peoplesoftStudio:
claude mcp list # Claude Code
codex mcp list # Codex
For another client, check that its MCP settings hold the URL from
Copy MCP URL.
- Restart or reload the client if it was already running when you
registered the server.
Integration Broker
Messages, Document Builder, Services, Service Operations, Nodes and Routings now
have search, inspection, validation, New, Preview and Save tools. The MCP
explicitly distinguishes standard services, REST consumers and REST providers.
Use psft_ib_reference for the workflow and
Integration Broker documentation for supported native
write paths and current PIA-only boundaries. Writes are calibrated on PeopleTools
8.62.09; on 8.61.15, for nonrowset messages, standard services, standard
operations without handlers and flat string documents.
MCP workflow discovery
Start with psft_studio_reference or the filterable psft_capability_catalog
for definition types, configuration tools, customization strategy and migration
coverage. Process Definition editing and bounded PS Query authoring/execution
now have dedicated MCP tools. See MCP reference for
inputs, operation limits, rollback previews and validation.
Change Review development initiative
The 0.9.1 workflow adds durable Change Sets, persistent semantic review,
checkpoint/history and reviewed reversal for bounded MCP paths, with crash and
lost-reply reconciliation, continuation undo/redo and creation reversal. Since
0.9.9 it also stages structural Page, Record and App Engine edits and Application
Package/class creation and deletion with exact undo/redo. It does not yet cover
every object type. Track
verified implementation and remaining native acceptance in
Change Review progress.
The development UI provides PeopleSoft → Change Review for pending changes
and history. Object actions live on right-click menus; project migration actions
live on the selected project. View headers keep at most two frequent actions,
with secondary operations in their overflow menus. Approval and application
remain inside the review workspace. See navigation and action placement.
Approve and apply is the primary action for validated proposals. Approach
approval remains separate; approval-only and per-object review remain
available. The combined action binds the displayed revision and eligible
objects, retaining checkpoints, native write guards and verified readback.
See design and verification.
| |